mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-19 12:18:59 +00:00
show option to reset password when resetting or deleting account
This commit is contained in:
parent
0576e9b663
commit
1950cc91cd
2 changed files with 69 additions and 5 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue