From 8ae115028e2e462e82dee5383831de653191b4b2 Mon Sep 17 00:00:00 2001 From: Nicholas Date: Fri, 23 Jun 2023 10:00:19 -0400 Subject: [PATCH] Update PIN switch keyboard button to be more straightforward. Addresses #12866. --- .../app/account/AccountSettingsFragment.kt | 12 ++--- .../securesms/lock/v2/BaseKbsPinFragment.java | 6 ++- .../securesms/lock/v2/PinKeyboardType.java | 7 +++ .../pin/PinRestoreEntryFragment.java | 18 ++------ .../BaseRegistrationLockFragment.java | 17 ++----- .../fragments/ReRegisterWithPinFragment.kt | 19 ++------ app/src/main/res/drawable/ic_keyboard_24.xml | 46 +++++++++++++++++-- .../ic_number_pad_conversation_filter_24.xml | 39 ++++++++++++++-- .../main/res/layout/base_kbs_pin_fragment.xml | 3 ++ .../res/layout/fragment_registration_lock.xml | 7 ++- .../layout/pin_disable_reminders_dialog.xml | 5 +- .../res/layout/pin_restore_entry_fragment.xml | 7 ++- app/src/main/res/values/strings.xml | 10 ++-- 13 files changed, 132 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/account/AccountSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/account/AccountSettingsFragment.kt index 8bfbe575a3..8cc273f2b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/account/AccountSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/account/AccountSettingsFragment.kt @@ -7,7 +7,6 @@ import android.graphics.Typeface import android.text.InputType import android.util.DisplayMetrics import android.view.ViewGroup -import android.widget.Button import android.widget.EditText import android.widget.TextView import android.widget.Toast @@ -18,6 +17,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation +import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar import org.thoughtcrime.securesms.R @@ -208,15 +208,15 @@ class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFrag val statusText = DialogCompat.requireViewById(dialog, R.id.reminder_disable_status) as TextView val cancelButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_cancel) val turnOffButton = DialogCompat.requireViewById(dialog, R.id.reminder_disable_turn_off) - val changeKeyboard = DialogCompat.requireViewById(dialog, R.id.reminder_change_keyboard) as Button + val changeKeyboard = DialogCompat.requireViewById(dialog, R.id.reminder_change_keyboard) as MaterialButton 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) + changeKeyboard.setIconResource(PinKeyboardType.ALPHA_NUMERIC.iconResource) } else { pinEditText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD - changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_numeric_pin) + changeKeyboard.setIconResource(PinKeyboardType.NUMERIC.iconResource) } pinEditText.typeface = Typeface.DEFAULT } @@ -230,11 +230,11 @@ class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFrag when (SignalStore.pinValues().keyboardType) { PinKeyboardType.NUMERIC -> { pinEditText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD - changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_alphanumeric_pin) + changeKeyboard.setIconResource(PinKeyboardType.ALPHA_NUMERIC.iconResource) } PinKeyboardType.ALPHA_NUMERIC -> { pinEditText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD - changeKeyboard.setText(R.string.PinRestoreEntryFragment_enter_numeric_pin) + changeKeyboard.setIconResource(PinKeyboardType.NUMERIC.iconResource) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java index b3e2585194..0867b5668c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/BaseKbsPinFragment.java @@ -14,12 +14,15 @@ import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TextView; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import com.google.android.material.button.MaterialButton; + import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -36,7 +39,7 @@ public abstract class BaseKbsPinFragment private LearnMoreTextView description; private EditText input; private TextView label; - private TextView keyboardToggle; + private MaterialButton keyboardToggle; private CircularProgressMaterialButton confirm; private ViewModel viewModel; @@ -69,6 +72,7 @@ public abstract class BaseKbsPinFragment viewModel.getKeyboard().observe(getViewLifecycleOwner(), keyboardType -> { updateKeyboard(keyboardType); keyboardToggle.setText(resolveKeyboardToggleText(keyboardType)); + keyboardToggle.setIconResource(keyboardType.getOther().getIconResource()); }); description.setOnLinkClickListener(v -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/PinKeyboardType.java b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/PinKeyboardType.java index a2f5dd79a9..9a1a7cad28 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/lock/v2/PinKeyboardType.java +++ b/app/src/main/java/org/thoughtcrime/securesms/lock/v2/PinKeyboardType.java @@ -2,6 +2,8 @@ package org.thoughtcrime.securesms.lock.v2; import androidx.annotation.Nullable; +import org.thoughtcrime.securesms.R; + public enum PinKeyboardType { NUMERIC("numeric"), ALPHA_NUMERIC("alphaNumeric"); @@ -30,4 +32,9 @@ public enum PinKeyboardType { return NUMERIC; } + + public int getIconResource() { + if (this == ALPHA_NUMERIC) return R.drawable.ic_keyboard_24; + else return R.drawable.ic_number_pad_conversation_filter_24; + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java index 6b06d58699..d07db50608 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java @@ -14,12 +14,12 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.StringRes; import androidx.autofill.HintConstants; import androidx.core.view.ViewCompat; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; +import com.google.android.material.button.MaterialButton; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.logging.Log; @@ -52,7 +52,7 @@ public class PinRestoreEntryFragment extends LoggingFragment { private View skipButton; private CircularProgressMaterialButton pinButton; private TextView errorLabel; - private TextView keyboardToggle; + private MaterialButton keyboardToggle; private PinRestoreViewModel viewModel; @Override @@ -102,12 +102,12 @@ public class PinRestoreEntryFragment extends LoggingFragment { keyboardToggle.setOnClickListener((v) -> { PinKeyboardType keyboardType = getPinEntryKeyboardType(); + keyboardToggle.setIconResource(keyboardType.getIconResource()); + updateKeyboard(keyboardType.getOther()); - keyboardToggle.setText(resolveKeyboardToggleText(keyboardType)); }); - PinKeyboardType keyboardType = getPinEntryKeyboardType().getOther(); - keyboardToggle.setText(resolveKeyboardToggleText(keyboardType)); + keyboardToggle.setIconResource(getPinEntryKeyboardType().getOther().getIconResource()); } private void initViewModel() { @@ -260,14 +260,6 @@ public class PinRestoreEntryFragment extends LoggingFragment { pinEntry.getText().clear(); } - private @StringRes static int resolveKeyboardToggleText(@NonNull PinKeyboardType keyboard) { - if (keyboard == PinKeyboardType.ALPHA_NUMERIC) { - return R.string.PinRestoreEntryFragment_enter_alphanumeric_pin; - } else { - return R.string.PinRestoreEntryFragment_enter_numeric_pin; - } - } - private void enableAndFocusPinEntry() { pinEntry.setEnabled(true); pinEntry.setFocusable(true); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java index 2b208d1dac..4afa97cd87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java @@ -10,10 +10,11 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.CallSuper; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.StringRes; +import com.google.android.material.button.MaterialButton; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.logging.Log; @@ -49,7 +50,7 @@ public abstract class BaseRegistrationLockFragment extends LoggingFragment { private View forgotPin; protected CircularProgressMaterialButton pinButton; private TextView errorLabel; - private TextView keyboardToggle; + private MaterialButton keyboardToggle; private long timeRemaining; private BaseRegistrationViewModel viewModel; @@ -101,11 +102,11 @@ public abstract class BaseRegistrationLockFragment extends LoggingFragment { PinKeyboardType keyboardType = getPinEntryKeyboardType(); updateKeyboard(keyboardType.getOther()); - keyboardToggle.setText(resolveKeyboardToggleText(keyboardType)); + keyboardToggle.setIconResource(keyboardType.getIconResource()); }); PinKeyboardType keyboardType = getPinEntryKeyboardType().getOther(); - keyboardToggle.setText(resolveKeyboardToggleText(keyboardType)); + keyboardToggle.setIconResource(keyboardType.getIconResource()); disposables.bindTo(getViewLifecycleOwner().getLifecycle()); viewModel = getViewModel(); @@ -274,14 +275,6 @@ public abstract class BaseRegistrationLockFragment extends LoggingFragment { pinEntry.getText().clear(); } - private @StringRes static int resolveKeyboardToggleText(@NonNull PinKeyboardType keyboard) { - if (keyboard == PinKeyboardType.ALPHA_NUMERIC) { - return R.string.RegistrationLockFragment__enter_alphanumeric_pin; - } else { - return R.string.RegistrationLockFragment__enter_numeric_pin; - } - } - private void enableAndFocusPinEntry() { pinEntry.setEnabled(true); pinEntry.setFocusable(true); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ReRegisterWithPinFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ReRegisterWithPinFragment.kt index 3b2b965faf..316fc31c74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ReRegisterWithPinFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ReRegisterWithPinFragment.kt @@ -5,7 +5,6 @@ import android.text.InputType import android.view.View import android.view.inputmethod.EditorInfo import android.widget.Toast -import androidx.annotation.StringRes import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController @@ -74,13 +73,12 @@ class ReRegisterWithPinFragment : LoggingFragment(R.layout.pin_restore_entry_fra } binding.pinRestoreKeyboardToggle.setOnClickListener { - val keyboardType: PinKeyboardType = getPinEntryKeyboardType() - updateKeyboard(keyboardType.other) - binding.pinRestoreKeyboardToggle.setText(resolveKeyboardToggleText(keyboardType)) + val currentKeyboardType: PinKeyboardType = getPinEntryKeyboardType() + updateKeyboard(currentKeyboardType.other) + binding.pinRestoreKeyboardToggle.setIconResource(currentKeyboardType.iconResource) } - val keyboardType: PinKeyboardType = getPinEntryKeyboardType().other - binding.pinRestoreKeyboardToggle.setText(resolveKeyboardToggleText(keyboardType)) + binding.pinRestoreKeyboardToggle.setIconResource(getPinEntryKeyboardType().other.iconResource) reRegisterViewModel.updateTokenData(registrationViewModel.keyBackupCurrentToken) @@ -212,15 +210,6 @@ class ReRegisterWithPinFragment : LoggingFragment(R.layout.pin_restore_entry_fra binding.pinRestorePinInput.text?.clear() } - @StringRes - private fun resolveKeyboardToggleText(keyboard: PinKeyboardType): Int { - return if (keyboard == PinKeyboardType.ALPHA_NUMERIC) { - R.string.RegistrationLockFragment__enter_alphanumeric_pin - } else { - R.string.RegistrationLockFragment__enter_numeric_pin - } - } - private fun onNeedHelpClicked() { val message = if (reRegisterViewModel.isLocalVerification) R.string.ReRegisterWithPinFragment_need_help_local else R.string.PinRestoreEntryFragment_your_pin_is_a_d_digit_code diff --git a/app/src/main/res/drawable/ic_keyboard_24.xml b/app/src/main/res/drawable/ic_keyboard_24.xml index 142edd1d8a..7781422e8c 100644 --- a/app/src/main/res/drawable/ic_keyboard_24.xml +++ b/app/src/main/res/drawable/ic_keyboard_24.xml @@ -1,5 +1,43 @@ - - + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_number_pad_conversation_filter_24.xml b/app/src/main/res/drawable/ic_number_pad_conversation_filter_24.xml index b9d9ef2bbe..0658693275 100644 --- a/app/src/main/res/drawable/ic_number_pad_conversation_filter_24.xml +++ b/app/src/main/res/drawable/ic_number_pad_conversation_filter_24.xml @@ -1,5 +1,36 @@ - - + + + + + + + + + + + diff --git a/app/src/main/res/layout/base_kbs_pin_fragment.xml b/app/src/main/res/layout/base_kbs_pin_fragment.xml index fd6d07709e..10b6ba8271 100644 --- a/app/src/main/res/layout/base_kbs_pin_fragment.xml +++ b/app/src/main/res/layout/base_kbs_pin_fragment.xml @@ -102,6 +102,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" + app:icon="@drawable/ic_keyboard_24" + app:iconGravity="textStart" + app:iconPadding="8dp" app:layout_constraintBottom_toTopOf="@id/edit_kbs_pin_confirm" app:layout_constraintTop_toBottomOf="@id/edit_kbs_pin_input_label" app:layout_constraintVertical_bias="0.0" diff --git a/app/src/main/res/layout/fragment_registration_lock.xml b/app/src/main/res/layout/fragment_registration_lock.xml index e3be5f4bb7..e546806942 100644 --- a/app/src/main/res/layout/fragment_registration_lock.xml +++ b/app/src/main/res/layout/fragment_registration_lock.xml @@ -78,11 +78,14 @@ style="@style/Signal.Widget.Button.Large.Secondary" android:layout_width="match_parent" android:layout_height="wrap_content" + android:text="@string/RegistrationLockFragment__switch_keyboard" + app:icon="@drawable/ic_keyboard_24" + app:iconGravity="textStart" + app:iconPadding="8dp" app:layout_constraintBottom_toTopOf="@id/kbs_lock_pin_confirm" app:layout_constraintTop_toBottomOf="@id/kbs_lock_forgot_pin" app:layout_constraintVertical_bias="0.0" - tools:layout_editor_absoluteX="32dp" - tools:text="Create Alphanumeric Pin" /> + tools:layout_editor_absoluteX="32dp" /> diff --git a/app/src/main/res/layout/pin_restore_entry_fragment.xml b/app/src/main/res/layout/pin_restore_entry_fragment.xml index 7f7f139131..27e23e9e8c 100644 --- a/app/src/main/res/layout/pin_restore_entry_fragment.xml +++ b/app/src/main/res/layout/pin_restore_entry_fragment.xml @@ -97,10 +97,13 @@ style="@style/Signal.Widget.Button.Large.Secondary" android:layout_width="match_parent" android:layout_height="wrap_content" + android:text="@string/RegistrationLockFragment__switch_keyboard" + app:icon="@drawable/ic_keyboard_24" + app:iconGravity="textStart" + app:iconPadding="8dp" app:layout_constraintTop_toBottomOf="@id/pin_restore_forgot_pin" app:layout_constraintVertical_bias="0.0" - tools:layout_editor_absoluteX="32dp" - tools:text="Create Alphanumeric Pin" /> + tools:layout_editor_absoluteX="32dp" /> You have %1$d attempts remaining. If you run out of attempts, you can create a new PIN. You can register and use your account but you\'ll lose some saved settings like your profile information. Signal Registration - Need Help with PIN for Android - Enter alphanumeric PIN - Enter numeric PIN + + Switch keyboard Create your PIN @@ -3449,7 +3449,9 @@ Next + Create alphanumeric PIN + Create numeric PIN https://support.signal.org/hc/articles/360007059792 @@ -3511,8 +3513,8 @@ Enter the PIN you created for your account. This is different from your SMS verification code. Enter the PIN you created for your account. - Enter alphanumeric PIN - Enter numeric PIN + + Switch keyboard Incorrect PIN. Try again. Forgot PIN? Incorrect PIN