show option to reset password when resetting or deleting account

This commit is contained in:
Phillip Thelen 2024-02-08 13:03:07 +01:00
parent 0576e9b663
commit 1950cc91cd
2 changed files with 69 additions and 5 deletions

View file

@ -53,10 +53,11 @@
</RelativeLayout>
</com.google.android.material.card.MaterialCardView>
<RelativeLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar_cardview">
android:layout_below="@id/toolbar_cardview"
android:orientation="vertical">
<TextView
android:id="@+id/title_textview"
@ -107,8 +108,19 @@
android:textSize="20sp" />
</com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>
<Button
android:id="@+id/forgot_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/forgot_pw_btn"
style="@style/HabiticaButton.Borderless"
android:textColor="@color/text_primary"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large"
android:paddingTop="@dimen/spacing_large"/>
</LinearLayout>
</RelativeLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView>

View file

@ -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 {