diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt index e2a5ff568..a449a5c9e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt @@ -10,6 +10,7 @@ import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.User import io.reactivex.Flowable +import io.reactivex.Maybe import io.realm.RealmResults interface UserRepository : BaseRepository { @@ -63,7 +64,7 @@ interface UserRepository : BaseRepository { fun sendPasswordResetEmail(email: String): Flowable - fun updateLoginName(newLoginName: String, password: String? = null): Flowable + fun updateLoginName(newLoginName: String, password: String? = null): Maybe fun updateEmail(newEmail: String, password: String): Flowable fun updatePassword(newPassword: String, oldPassword: String, oldPasswordConfirmation: String): Flowable diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index f5401e3a6..b22f00e86 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -205,12 +205,19 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli override fun sendPasswordResetEmail(email: String): Flowable = apiClient.sendPasswordResetEmail(email) - override fun updateLoginName(newLoginName: String, password: String?): Flowable { - return if (password != null) { + override fun updateLoginName(newLoginName: String, password: String?): Maybe { + return (if (password != null && password.isNotEmpty()) { apiClient.updateLoginName(newLoginName, password) } else { apiClient.updateUsername(newLoginName) - } + }).flatMapMaybe { localRepository.getUser(userID).firstElement() } + .doOnNext { user -> + localRepository.executeTransaction { + user.authentication?.localAuthentication?.username = newLoginName + user.flags?.isVerifiedUsername = true + } + } + .firstElement() } override fun updateEmail(newEmail: String, password: String): Flowable = diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java index 5a7739446..d11cbfc80 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java @@ -47,7 +47,7 @@ public class RemoteConfigManager { public Integer maxChatLength() { return maxChatLength; } - public Boolean enableChangeUsername() { return enableChangeUsername; } + public Boolean enableChangeUsername() { return true; } private void loadFromPreferences () { String storedPreferences = PreferenceManager.getDefaultSharedPreferences(context) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.java index d9e0a48f2..4d6e76d07 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.java @@ -10,6 +10,7 @@ import io.realm.annotations.PrimaryKey; public class LocalAuthentication extends RealmObject { @PrimaryKey + public String userID; String username; String email; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt index a076feddb..35684857c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt @@ -13,6 +13,7 @@ open class Authentication : RealmObject() { set(value) { field = value timestamps?.userId = value + localAuthentication?.userID = value } @SerializedName("local") diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt index 8c0e2effd..98c14ac77 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt @@ -26,7 +26,7 @@ abstract class BasePreferencesFragment : PreferenceFragmentCompat() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - userRepository.getUser(userId).firstElement().subscribe(Consumer { + userRepository.getUser(userId).subscribe(Consumer { this.user = it }, RxErrorHandler.handleEmptyError()) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index 599f5a89c..a72506035 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -45,11 +45,6 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare override fun onCreate(savedInstanceState: Bundle?) { HabiticaBaseApplication.component?.inject(this) super.onCreate(savedInstanceState) - - val userID = preferenceManager.sharedPreferences.getString(context?.getString(R.string.SP_userID), null) - if (userID != null) { - compositeSubscription.add(userRepository.getUser(userID).subscribe(Consumer { this@PreferencesFragment.setUser(it) }, RxErrorHandler.handleEmptyError())) - } } override fun setupPreferences() {