Allow keyboard switch when disabling pin reminders.

Fixes #9862
This commit is contained in:
Cody Henthorne 2022-04-19 11:47:09 -04:00 committed by Alex Hart
parent 7b89687206
commit 405d99fbe2
2 changed files with 41 additions and 13 deletions

View file

@ -7,6 +7,7 @@ import android.graphics.Typeface
import android.text.InputType import android.text.InputType
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
@ -16,6 +17,7 @@ import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.Navigation import androidx.navigation.Navigation
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLConfiguration
@ -31,8 +33,7 @@ import org.thoughtcrime.securesms.lock.v2.KbsConstants
import org.thoughtcrime.securesms.lock.v2.PinKeyboardType import org.thoughtcrime.securesms.lock.v2.PinKeyboardType
import org.thoughtcrime.securesms.pin.RegistrationLockV2Dialog import org.thoughtcrime.securesms.pin.RegistrationLockV2Dialog
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.ServiceUtil import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.ThemeUtil
import org.thoughtcrime.securesms.util.navigation.safeNavigate import org.thoughtcrime.securesms.util.navigation.safeNavigate
class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFragment__account) { class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFragment__account) {
@ -145,7 +146,7 @@ class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFrag
val context: Context = requireContext() val context: Context = requireContext()
val metrics: DisplayMetrics = resources.displayMetrics val metrics: DisplayMetrics = resources.displayMetrics
val dialog: AlertDialog = AlertDialog.Builder(context, if (ThemeUtil.isDarkTheme(context)) R.style.Theme_Signal_AlertDialog_Dark_Cornered_ColoredAccent else R.style.Theme_Signal_AlertDialog_Light_Cornered_ColoredAccent) val dialog: AlertDialog = MaterialAlertDialogBuilder(context)
.setView(R.layout.pin_disable_reminders_dialog) .setView(R.layout.pin_disable_reminders_dialog)
.create() .create()
@ -156,18 +157,34 @@ class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFrag
val statusText = DialogCompat.requireViewById(dialog, R.id.reminder_disable_status) as TextView val statusText = DialogCompat.requireViewById(dialog, R.id.reminder_disable_status) as TextView
val cancelButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_cancel) val cancelButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_cancel)
val turnOffButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_turn_off) val turnOffButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_turn_off)
val changeKeyboard = DialogCompat.requireViewById(dialog, R.id.reminder_change_keyboard) as Button
changeKeyboard.setOnClickListener {
if (pinEditText.inputType and InputType.TYPE_CLASS_NUMBER == 0) {
pinEditText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_alphanumeric_pin)
} else {
pinEditText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_numeric_pin)
}
pinEditText.typeface = Typeface.DEFAULT
}
pinEditText.post { pinEditText.post {
if (pinEditText.requestFocus()) { ViewUtil.focusAndShowKeyboard(pinEditText)
ServiceUtil.getInputMethodManager(pinEditText.context).showSoftInput(pinEditText, 0)
}
} }
ViewCompat.setAutofillHints(pinEditText, HintConstants.AUTOFILL_HINT_PASSWORD) ViewCompat.setAutofillHints(pinEditText, HintConstants.AUTOFILL_HINT_PASSWORD)
when (SignalStore.pinValues().keyboardType) { when (SignalStore.pinValues().keyboardType) {
PinKeyboardType.NUMERIC -> pinEditText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD PinKeyboardType.NUMERIC -> {
PinKeyboardType.ALPHA_NUMERIC -> pinEditText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD pinEditText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_alphanumeric_pin)
}
PinKeyboardType.ALPHA_NUMERIC -> {
pinEditText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_numeric_pin)
}
} }
pinEditText.addTextChangedListener(object : SimpleTextWatcher() { pinEditText.addTextChangedListener(object : SimpleTextWatcher() {

View file

@ -46,6 +46,16 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/reminder_disable_description" /> app:layout_constraintTop_toBottomOf="@id/reminder_disable_description" />
<com.google.android.material.button.MaterialButton
android:id="@+id/reminder_change_keyboard"
style="@style/Signal.Widget.Button.Medium.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/PinRestoreEntryFragment_enter_alphanumeric_pin"
app:layout_constraintTop_toBottomOf="@+id/reminder_disable_pin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView <TextView
android:id="@+id/reminder_disable_status" android:id="@+id/reminder_disable_status"
android:layout_width="0dp" android:layout_width="0dp"
@ -54,7 +64,7 @@
android:textColor="@color/core_red" android:textColor="@color/core_red"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/reminder_disable_pin" app:layout_constraintTop_toBottomOf="@id/reminder_change_keyboard"
tools:text="@string/preferences_app_protection__incorrect_pin_try_again" /> tools:text="@string/preferences_app_protection__incorrect_pin_try_again" />
<androidx.constraintlayout.helper.widget.Flow <androidx.constraintlayout.helper.widget.Flow
@ -62,14 +72,15 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
app:constraint_referenced_ids="reminder_disable_cancel,reminder_disable_turn_off" app:constraint_referenced_ids="reminder_disable_cancel,reminder_disable_turn_off"
app:flow_horizontalGap="8dp"
app:flow_wrapMode="chain" app:flow_wrapMode="chain"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/reminder_disable_status" /> app:layout_constraintTop_toBottomOf="@id/reminder_disable_status" />
<Button <com.google.android.material.button.MaterialButton
android:id="@+id/reminder_disable_cancel" android:id="@+id/reminder_disable_cancel"
style="@style/Button.Borderless" style="@style/Signal.Widget.Button.Dialog"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@android:string/cancel" android:text="@android:string/cancel"
@ -79,9 +90,9 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/reminder_disable_turn_off" /> app:layout_constraintTop_toTopOf="@id/reminder_disable_turn_off" />
<Button <com.google.android.material.button.MaterialButton
android:id="@+id/reminder_disable_turn_off" android:id="@+id/reminder_disable_turn_off"
style="@style/Button.Primary" style="@style/Signal.Widget.Button.Dialog"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:enabled="false" android:enabled="false"