diff --git a/Habitica/res/layout/dialog_habitica_account.xml b/Habitica/res/layout/dialog_habitica_account.xml
index ef2c716d2..53a295849 100644
--- a/Habitica/res/layout/dialog_habitica_account.xml
+++ b/Habitica/res/layout/dialog_habitica_account.xml
@@ -53,10 +53,11 @@
-
+ android:layout_below="@id/toolbar_cardview"
+ android:orientation="vertical">
-
+
+
+
-
\ No newline at end of file
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt
index c2d3a5c6d..0c75d4ccc 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt
@@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.ui.fragments.preferences
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
+import android.os.Build
import android.os.Bundle
import android.text.Editable
import android.text.InputType
@@ -10,18 +11,30 @@ import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.EditText
+import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
+import androidx.core.view.isVisible
+import androidx.lifecycle.lifecycleScope
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding
+import com.habitrpg.android.habitica.extensions.addCancelButton
+import com.habitrpg.android.habitica.extensions.addOkButton
import com.habitrpg.android.habitica.models.user.User
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
+import com.habitrpg.common.habitica.helpers.launchCatching
import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
@AndroidEntryPoint
class HabiticaAccountDialog(private var thisContext: Context) : BottomSheetDialogFragment(R.layout.dialog_habitica_account) {
+ @Inject
+ lateinit var userRepository: UserRepository
private var _binding: DialogHabiticaAccountBinding? = null
private val binding get() = _binding!!
@@ -52,6 +65,43 @@ class HabiticaAccountDialog(private var thisContext: Context) : BottomSheetDialo
}
binding.backImagebutton.setOnClickListener { dismiss() }
+ binding.forgotPassword.setOnClickListener {
+ showForgotPasswordDialog()
+ }
+ }
+
+ private fun showForgotPasswordDialog() {
+ val input = EditText(requireContext())
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ input.setAutofillHints(EditText.AUTOFILL_HINT_EMAIL_ADDRESS)
+ }
+ input.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
+ input.hint = getString(R.string.forgot_password_hint_example)
+ input.textSize = 16f
+ val lp = LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.MATCH_PARENT
+ )
+ input.layoutParams = lp
+ val alertDialog = HabiticaAlertDialog(requireContext())
+ alertDialog.setTitle(R.string.forgot_password_title)
+ alertDialog.setMessage(R.string.forgot_password_description)
+ alertDialog.setAdditionalContentView(input)
+ alertDialog.addButton(R.string.send, true) { _, _ ->
+ lifecycleScope.launchCatching {
+ userRepository.sendPasswordResetEmail(input.text.toString())
+ showPasswordEmailConfirmation()
+ }
+ }
+ alertDialog.addCancelButton()
+ alertDialog.show()
+ }
+
+ private fun showPasswordEmailConfirmation() {
+ val alert = HabiticaAlertDialog(requireContext())
+ alert.setMessage(R.string.forgot_password_confirmation)
+ alert.addOkButton()
+ alert.show()
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@@ -70,8 +120,9 @@ class HabiticaAccountDialog(private var thisContext: Context) : BottomSheetDialo
binding.confirmationTextInputLayout.setHint(R.string.password)
if (user?.authentication?.hasPassword != true) {
binding.warningDescriptionTextview.text = context?.getString(R.string.reset_account_description_no_pw)
- binding.confirmationTextInputLayout.setHint(R.string.confirm_deletion)
+ binding.confirmationTextInputLayout.setHint(R.string.confirm_reset)
binding.confirmationInputEdittext.inputType = InputType.TYPE_CLASS_TEXT
+ binding.forgotPassword.isVisible = false
}
binding.confirmActionTextview.setText(R.string.reset_account)
@@ -122,6 +173,7 @@ class HabiticaAccountDialog(private var thisContext: Context) : BottomSheetDialo
binding.warningDescriptionTextview.text = context?.getString(R.string.delete_oauth_account_description)
binding.confirmationTextInputLayout.setHint(R.string.confirm_deletion)
binding.confirmationInputEdittext.inputType = InputType.TYPE_CLASS_TEXT
+ binding.forgotPassword.isVisible = false
}
binding.confirmationInputEdittext.addTextChangedListener(object : TextWatcher {