Pārlūkot izejas kodu

Fixed remaining profile link unchanged after nickname update

Vadik Sirekanyan 7 gadi atpakaļ
vecāks
revīzija
b114fffda8

+ 9 - 6
app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfileInteractor.kt

@@ -2,8 +2,10 @@ package com.sirekanyan.knigopis.feature.profile
 
 import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.model.BookDataModel
-import com.sirekanyan.knigopis.model.dto.Profile
+import com.sirekanyan.knigopis.model.ProfileModel
 import com.sirekanyan.knigopis.model.dto.User
+import com.sirekanyan.knigopis.model.toProfile
+import com.sirekanyan.knigopis.model.toProfileModel
 import com.sirekanyan.knigopis.repository.BookRepository
 import com.sirekanyan.knigopis.repository.Endpoint
 import com.sirekanyan.knigopis.repository.TokenStorage
@@ -15,9 +17,9 @@ import java.util.concurrent.TimeUnit
 
 interface ProfileInteractor {
 
-    fun getProfile(): Single<User>
+    fun getProfile(): Single<ProfileModel>
     fun getBooks(): Observable<BookDataModel>
-    fun updateProfile(user: User, nickname: String): Completable
+    fun updateProfile(profile: ProfileModel): Completable
     fun logout()
 
 }
@@ -28,8 +30,9 @@ class ProfileInteractorImpl(
     private val tokenStorage: TokenStorage
 ) : ProfileInteractor {
 
-    override fun getProfile(): Single<User> =
+    override fun getProfile(): Single<ProfileModel> =
         api.getProfile()
+            .map(User::toProfileModel)
             .io2main()
 
     override fun getBooks(): Observable<BookDataModel> =
@@ -46,8 +49,8 @@ class ProfileInteractorImpl(
             .map { (book) -> book }
             .io2main()
 
-    override fun updateProfile(user: User, nickname: String): Completable =
-        api.updateProfile(user.id, Profile(nickname, user.fixedProfile))
+    override fun updateProfile(profile: ProfileModel): Completable =
+        api.updateProfile(profile.id, profile.toProfile())
             .io2main()
 
     override fun logout() {

+ 12 - 15
app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfilePresenter.kt

@@ -6,7 +6,7 @@ import com.sirekanyan.knigopis.common.Presenter
 import com.sirekanyan.knigopis.common.extensions.toast
 import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.model.BookDataModel
-import com.sirekanyan.knigopis.model.dto.User
+import com.sirekanyan.knigopis.model.ProfileModel
 import java.util.*
 
 interface ProfilePresenter : Presenter {
@@ -32,7 +32,7 @@ class ProfilePresenterImpl(
     private val todoList = Stack<BookDataModel>()
     private val doingList = Stack<BookDataModel>()
     private val doneList = Stack<BookDataModel>()
-    private var user: User? = null
+    private var profile: ProfileModel? = null
 
     override fun init() {
         view.setTodoCount(0)
@@ -63,17 +63,16 @@ class ProfilePresenterImpl(
     }
 
     override fun onSaveOptionClicked(nickname: String) {
-        if (view.isNicknameChanged) {
-            updateNickname(nickname)
+        val profile = profile?.copy(name = nickname) ?: return
+        if (view.isProfileChanged) {
+            updateProfile(profile)
         } else {
             view.quitEditMode()
         }
     }
 
     override fun onShareOptionClicked() {
-        user?.fixedProfile?.let {
-            router.shareProfile(it)
-        }
+        profile?.shareUrl?.let(router::shareProfile)
     }
 
     override fun onLogoutOptionClicked() {
@@ -83,10 +82,9 @@ class ProfilePresenterImpl(
 
     private fun refreshProfile() {
         interactor.getProfile()
-            .bind({ user ->
-                this.user = user
-                view.setNickname(user.nickname.orEmpty())
-                view.setAvatar(user.photo)
+            .bind({ profile ->
+                this.profile = profile
+                view.setProfile(profile)
                 view.setEditOptionVisible(true)
             }) {
                 logError("cannot get profile", it)
@@ -124,11 +122,10 @@ class ProfilePresenterImpl(
         }
     }
 
-    private fun updateNickname(nickname: String) {
-        val user = user ?: return
-        interactor.updateProfile(user, nickname)
+    private fun updateProfile(profile: ProfileModel) {
+        interactor.updateProfile(profile)
             .bind({
-                view.setNickname(nickname)
+                view.setProfile(profile)
                 view.quitEditMode()
                 refreshProfile()
             }, {

+ 7 - 11
app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfileView.kt

@@ -9,6 +9,7 @@ import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.common.android.toast.CommonView
 import com.sirekanyan.knigopis.common.extensions.*
 import com.sirekanyan.knigopis.model.BookDataModel
+import com.sirekanyan.knigopis.model.ProfileModel
 import kotlinx.android.extensions.LayoutContainer
 import kotlinx.android.synthetic.main.profile_activity.*
 import java.util.*
@@ -16,9 +17,8 @@ import java.util.*
 interface ProfileView : CommonView {
 
     val isEditMode: Boolean
-    val isNicknameChanged: Boolean
-    fun setNickname(name: String)
-    fun setAvatar(avatar: String?)
+    val isProfileChanged: Boolean
+    fun setProfile(profile: ProfileModel)
     fun setEditOptionVisible(isVisible: Boolean)
     fun setTodoCount(count: Int)
     fun setDoingCount(count: Int)
@@ -50,11 +50,10 @@ class ProfileViewImpl(
     private val context = containerView.context
     private lateinit var editOption: MenuItem
     override val isEditMode get() = profileNicknameSwitcher.displayedChild == 1
-    override val isNicknameChanged get() = profileNickname.text.toString() != profileNicknameEditText.text.toString()
+    override val isProfileChanged get() = profileNickname.text.toString() != profileNicknameEditText.text.toString()
 
     init {
         initToolbar(profileToolbar)
-
         profileNicknameEditText.setOnEditorActionListener { view, actionId, _ ->
             when (actionId) {
                 EditorInfo.IME_ACTION_DONE -> {
@@ -66,12 +65,9 @@ class ProfileViewImpl(
         }
     }
 
-    override fun setNickname(name: String) {
-        profileNickname.text = name
-    }
-
-    override fun setAvatar(avatar: String?) {
-        profileAvatar.setCircleImage(avatar)
+    override fun setProfile(profile: ProfileModel) {
+        profileNickname.text = profile.name
+        profileAvatar.setCircleImage(profile.imageUrl)
     }
 
     override fun setEditOptionVisible(isVisible: Boolean) {