diff --git a/Habitica/res/layout/dialog_edittext_change_pw.xml b/Habitica/res/layout/dialog_edittext_change_pw.xml
new file mode 100644
index 000000000..6ce8f0938
--- /dev/null
+++ b/Habitica/res/layout/dialog_edittext_change_pw.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 1c4c73b69..093c25d1d 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -866,5 +866,8 @@
Only leader can create Challenges
Create Party
Add Local Authentication
+ Old Password
+ New Password
+ Repeat new Password
diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml
index c3491b339..3519f7b64 100644
--- a/Habitica/res/xml/preferences_fragment.xml
+++ b/Habitica/res/xml/preferences_fragment.xml
@@ -1,268 +1,271 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
index 587de93b6..ddc6e97a9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
@@ -241,7 +241,7 @@ interface ApiClient {
fun updateEmail(newEmail: String, password: String): Flowable
- fun updatePassword(newPassword: String, oldPassword: String, oldPasswordConfirmation: String): Flowable
+ fun updatePassword(oldPassword: String, newPassword: String, newPasswordConfirmation: String): Flowable
fun allocatePoint(stat: String): Flowable
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 828abaf1b..fc513edee 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
@@ -63,7 +63,7 @@ interface UserRepository : BaseRepository {
fun updateLoginName(newLoginName: String, password: String? = null): Maybe
fun updateEmail(newEmail: String, password: String): Flowable
- fun updatePassword(newPassword: String, oldPassword: String, oldPasswordConfirmation: String): Flowable
+ fun updatePassword(oldPassword: String, newPassword: String, newPasswordConfirmation: String): Flowable
fun verifyUsername(username: String): Flowable
fun allocatePoint(user: User?, stat: String): Flowable
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
index 7305bcd31..8017908e0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
@@ -723,11 +723,11 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.updateEmail(updateObject).compose(configureApiCallObserver())
}
- override fun updatePassword(newPassword: String, oldPassword: String, oldPasswordConfirmation: String): Flowable {
+ override fun updatePassword(oldPassword: String, newPassword: String, newPasswordConfirmation: String): Flowable {
val updateObject = HashMap()
- updateObject["newPassword"] = newPassword
updateObject["password"] = oldPassword
- updateObject["confirmPassowrd"] = oldPasswordConfirmation
+ updateObject["newPassword"] = newPassword
+ updateObject["confirmPassword"] = newPasswordConfirmation
return apiService.updatePassword(updateObject).compose(configureApiCallObserver())
}
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 65cc05114..af5c9593d 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
@@ -11,7 +11,6 @@ import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.models.responses.SkillResponse
import com.habitrpg.android.habitica.models.responses.UnlockResponse
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
-import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
@@ -211,8 +210,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
override fun updateEmail(newEmail: String, password: String): Flowable =
apiClient.updateEmail(newEmail, password)
- override fun updatePassword(newPassword: String, oldPassword: String, oldPasswordConfirmation: String): Flowable =
- apiClient.updatePassword(newPassword, oldPassword, oldPasswordConfirmation)
+ override fun updatePassword(oldPassword: String, newPassword: String, newPasswordConfirmation: String): Flowable =
+ apiClient.updatePassword(oldPassword, newPassword, newPasswordConfirmation)
override fun allocatePoint(user: User?, stat: String): Flowable {
if (user != null && user.isManaged) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt
index 691bd5104..5933f4f69 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt
@@ -52,6 +52,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
private fun updateUserFields() {
configurePreference(findPreference("login_name"), user?.authentication?.localAuthentication?.username, false)
configurePreference(findPreference("email"), user?.authentication?.localAuthentication?.email, true)
+ findPreference("change_password").isVisible = user?.authentication?.localAuthentication?.email?.isNotEmpty() == true
findPreference("add_local_auth").isVisible = user?.authentication?.localAuthentication?.email?.isNotEmpty() != true
findPreference("confirm_username").isVisible = user?.flags?.isVerifiedUsername != true
}
@@ -94,7 +95,25 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
}
private fun showChangePasswordDialog() {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ val inflater = context?.layoutInflater
+ val view = inflater?.inflate(R.layout.dialog_edittext_change_pw, null)
+ val oldPasswordEditText = view?.findViewById(R.id.editText)
+ val passwordEditText = view?.findViewById(R.id.passwordEditText)
+ val passwordRepeatEditText = view?.findViewById(R.id.passwordRepeatEditText)
+ context.notNull { context ->
+ val dialog = AlertDialog.Builder(context)
+ .setTitle(R.string.change_password)
+ .setPositiveButton(R.string.change) { thisDialog, _ ->
+ thisDialog.dismiss()
+ userRepository.updatePassword(oldPasswordEditText?.text.toString(), passwordEditText?.text.toString(), passwordRepeatEditText?.text.toString())
+ .subscribe(Consumer {
+ }, RxErrorHandler.handleEmptyError())
+ }
+ .setNegativeButton(R.string.action_cancel) { thisDialog, _ -> thisDialog.dismiss() }
+ .create()
+ dialog.setView(view)
+ dialog.show()
+ }
}
private fun showEmailDialog() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java
index df30a770f..72d320c03 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java
@@ -21,6 +21,7 @@ import com.habitrpg.android.habitica.models.inventory.Pet;
import com.habitrpg.android.habitica.models.inventory.QuestContent;
import java.lang.reflect.Type;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -57,11 +58,17 @@ public class ContentDeserializer implements JsonDeserializer {
Map premiumPets = context.deserialize(object.get("premiumPets"), new TypeToken