Skip to content

Commit

Permalink
show option to reset password when resetting or deleting account
Browse files Browse the repository at this point in the history
  • Loading branch information
phillipthelen committed Feb 8, 2024
1 parent 0576e9b commit 1950cc9
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 5 deletions.
20 changes: 16 additions & 4 deletions Habitica/res/layout/dialog_habitica_account.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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>
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,38 @@ 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
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!!

Expand Down Expand Up @@ -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 {
Expand All @@ -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)

Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 1950cc9

Please sign in to comment.