Update PIN switch keyboard button to be more straightforward.

Addresses #12866.
This commit is contained in:
Nicholas 2023-06-23 10:00:19 -04:00 committed by Nicholas Tinsley
parent 2dd0221680
commit 8ae115028e
13 changed files with 132 additions and 64 deletions

View file

@ -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)
}
}

View file

@ -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<ViewModel extends BaseKbsPinViewModel>
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 extends BaseKbsPinViewModel>
viewModel.getKeyboard().observe(getViewLifecycleOwner(), keyboardType -> {
updateKeyboard(keyboardType);
keyboardToggle.setText(resolveKeyboardToggleText(keyboardType));
keyboardToggle.setIconResource(keyboardType.getOther().getIconResource());
});
description.setOnLinkClickListener(v -> {

View file

@ -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;
}
}

View file

@ -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);

View file

@ -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);

View file

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

View file

@ -1,5 +1,43 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/signal_icon_tint_primary" android:pathData="M20,4.5A1.538,1.538 0,0 1,21.5 6L21.5,17.5A1.538,1.538 0,0 1,20 19L4,19a1.538,1.538 0,0 1,-1.5 -1.5L2.5,6A1.538,1.538 0,0 1,4 4.5L20,4.5M20,3L4,3A2.946,2.946 0,0 0,1 6L1,17.5a2.946,2.946 0,0 0,3 3L20,20.5a2.946,2.946 0,0 0,3 -3L23,6A2.946,2.946 0,0 0,20 3ZM16.5,15h-9v2h9ZM7.5,12h0A1.538,1.538 0,0 0,6 10.5L6,10.5A1.538,1.538 0,0 0,4.5 12h0A1.538,1.538 0,0 0,6 13.5L6,13.5A1.538,1.538 0,0 0,7.5 12ZM11.5,12h0A1.538,1.538 0,0 0,10 10.5h0A1.538,1.538 0,0 0,8.5 12h0A1.538,1.538 0,0 0,10 13.5h0A1.538,1.538 0,0 0,11.5 12ZM15.5,12h0A1.538,1.538 0,0 0,14 10.5h0A1.538,1.538 0,0 0,12.5 12h0A1.538,1.538 0,0 0,14 13.5h0A1.538,1.538 0,0 0,15.5 12ZM19.5,12h0A1.538,1.538 0,0 0,18 10.5h0A1.538,1.538 0,0 0,16.5 12h0A1.538,1.538 0,0 0,18 13.5h0A1.538,1.538 0,0 0,19.5 12ZM7.5,8h0A1.538,1.538 0,0 0,6 6.5L6,6.5A1.538,1.538 0,0 0,4.5 8h0A1.538,1.538 0,0 0,6 9.5L6,9.5A1.538,1.538 0,0 0,7.5 8ZM11.5,8h0A1.538,1.538 0,0 0,10 6.5h0A1.538,1.538 0,0 0,8.5 8h0A1.538,1.538 0,0 0,10 9.5h0A1.538,1.538 0,0 0,11.5 8ZM15.5,8h0A1.538,1.538 0,0 0,14 6.5h0A1.538,1.538 0,0 0,12.5 8h0A1.538,1.538 0,0 0,14 9.5h0A1.538,1.538 0,0 0,15.5 8ZM19.5,8h0A1.538,1.538 0,0 0,18 6.5h0A1.538,1.538 0,0 0,16.5 8h0A1.538,1.538 0,0 0,18 9.5h0A1.538,1.538 0,0 0,19.5 8Z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,9.75C12.69,9.75 13.25,9.19 13.25,8.5C13.25,7.81 12.69,7.25 12,7.25C11.31,7.25 10.75,7.81 10.75,8.5C10.75,9.19 11.31,9.75 12,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M13.25,12C13.25,12.69 12.69,13.25 12,13.25C11.31,13.25 10.75,12.69 10.75,12C10.75,11.31 11.31,10.75 12,10.75C12.69,10.75 13.25,11.31 13.25,12Z" />
<path
android:fillColor="#000000"
android:pathData="M8.5,9.75C9.19,9.75 9.75,9.19 9.75,8.5C9.75,7.81 9.19,7.25 8.5,7.25C7.81,7.25 7.25,7.81 7.25,8.5C7.25,9.19 7.81,9.75 8.5,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M9.75,12C9.75,12.69 9.19,13.25 8.5,13.25C7.81,13.25 7.25,12.69 7.25,12C7.25,11.31 7.81,10.75 8.5,10.75C9.19,10.75 9.75,11.31 9.75,12Z" />
<path
android:fillColor="#000000"
android:pathData="M15.5,9.75C16.19,9.75 16.75,9.19 16.75,8.5C16.75,7.81 16.19,7.25 15.5,7.25C14.81,7.25 14.25,7.81 14.25,8.5C14.25,9.19 14.81,9.75 15.5,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M16.75,12C16.75,12.69 16.19,13.25 15.5,13.25C14.81,13.25 14.25,12.69 14.25,12C14.25,11.31 14.81,10.75 15.5,10.75C16.19,10.75 16.75,11.31 16.75,12Z" />
<path
android:fillColor="#000000"
android:pathData="M19,9.75C19.69,9.75 20.25,9.19 20.25,8.5C20.25,7.81 19.69,7.25 19,7.25C18.31,7.25 17.75,7.81 17.75,8.5C17.75,9.19 18.31,9.75 19,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M20.25,12C20.25,12.69 19.69,13.25 19,13.25C18.31,13.25 17.75,12.69 17.75,12C17.75,11.31 18.31,10.75 19,10.75C19.69,10.75 20.25,11.31 20.25,12Z" />
<path
android:fillColor="#000000"
android:pathData="M5,9.75C5.69,9.75 6.25,9.19 6.25,8.5C6.25,7.81 5.69,7.25 5,7.25C4.31,7.25 3.75,7.81 3.75,8.5C3.75,9.19 4.31,9.75 5,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M6.25,12C6.25,12.69 5.69,13.25 5,13.25C4.31,13.25 3.75,12.69 3.75,12C3.75,11.31 4.31,10.75 5,10.75C5.69,10.75 6.25,11.31 6.25,12Z" />
<path
android:fillColor="#000000"
android:pathData="M8.25,15C7.698,15 7.25,15.448 7.25,16C7.25,16.552 7.698,17 8.25,17H15.75C16.302,17 16.75,16.552 16.75,16C16.75,15.448 16.302,15 15.75,15H8.25Z" />
<path
android:fillColor="#000000"
android:fillType="evenOdd"
android:pathData="M17.737,3.625H6.263C5.454,3.625 4.794,3.625 4.258,3.669C3.704,3.714 3.206,3.811 2.741,4.047C2.012,4.419 1.419,5.012 1.047,5.741C0.811,6.206 0.714,6.704 0.669,7.258C0.625,7.794 0.625,8.454 0.625,9.263V14.737C0.625,15.546 0.625,16.206 0.669,16.742C0.714,17.296 0.811,17.794 1.047,18.259C1.419,18.988 2.012,19.581 2.741,19.953C3.206,20.19 3.704,20.286 4.258,20.331C4.794,20.375 5.454,20.375 6.263,20.375H17.737C18.546,20.375 19.206,20.375 19.742,20.331C20.296,20.286 20.794,20.19 21.259,19.953C21.988,19.581 22.581,18.988 22.953,18.259C23.19,17.794 23.286,17.296 23.331,16.742C23.375,16.206 23.375,15.546 23.375,14.737V9.263C23.375,8.454 23.375,7.794 23.331,7.258C23.286,6.704 23.19,6.206 22.953,5.741C22.581,5.012 21.988,4.419 21.259,4.047C20.794,3.811 20.296,3.714 19.742,3.669C19.206,3.625 18.546,3.625 17.737,3.625ZM3.535,5.607C3.712,5.516 3.955,5.449 4.401,5.413C4.857,5.376 5.445,5.375 6.3,5.375H17.7C18.555,5.375 19.143,5.376 19.599,5.413C20.045,5.449 20.288,5.516 20.465,5.607C20.865,5.81 21.19,6.135 21.393,6.535C21.484,6.712 21.551,6.955 21.587,7.401C21.624,7.857 21.625,8.445 21.625,9.3V14.7C21.625,15.554 21.624,16.143 21.587,16.599C21.551,17.045 21.484,17.288 21.393,17.465C21.19,17.865 20.865,18.19 20.465,18.393C20.288,18.484 20.045,18.551 19.599,18.587C19.143,18.624 18.555,18.625 17.7,18.625H6.3C5.445,18.625 4.857,18.624 4.401,18.587C3.955,18.551 3.712,18.484 3.535,18.393C3.135,18.19 2.81,17.865 2.607,17.465C2.516,17.288 2.449,17.045 2.413,16.599C2.376,16.143 2.375,15.554 2.375,14.7V9.3C2.375,8.445 2.376,7.857 2.413,7.401C2.449,6.955 2.516,6.712 2.607,6.535C2.81,6.135 3.135,5.81 3.535,5.607Z" />
</vector>

View file

@ -1,5 +1,36 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/signal_icon_tint_primary" android:pathData="M8.5,4.75h0A1.8,1.8 0,0 0,6.75 3h0A1.8,1.8 0,0 0,5 4.75L5,4.75A1.8,1.8 0,0 0,6.75 6.5h0A1.8,1.8 0,0 0,8.5 4.75ZM13.75,4.75h0A1.8,1.8 0,0 0,12 3h0a1.8,1.8 0,0 0,-1.75 1.75h0A1.8,1.8 0,0 0,12 6.5h0A1.8,1.8 0,0 0,13.75 4.75ZM19,4.75h0A1.8,1.8 0,0 0,17.25 3h0A1.8,1.8 0,0 0,15.5 4.75h0A1.8,1.8 0,0 0,17.25 6.5h0A1.8,1.8 0,0 0,19 4.75ZM8.5,9.75h0A1.8,1.8 0,0 0,6.75 8h0A1.8,1.8 0,0 0,5 9.75L5,9.75A1.8,1.8 0,0 0,6.75 11.5h0A1.8,1.8 0,0 0,8.5 9.75ZM13.75,9.75h0A1.8,1.8 0,0 0,12 8h0a1.8,1.8 0,0 0,-1.75 1.75h0A1.8,1.8 0,0 0,12 11.5h0A1.8,1.8 0,0 0,13.75 9.75ZM19,9.75h0A1.8,1.8 0,0 0,17.25 8h0A1.8,1.8 0,0 0,15.5 9.75h0a1.8,1.8 0,0 0,1.75 1.75h0A1.8,1.8 0,0 0,19 9.75ZM8.5,14.75h0A1.8,1.8 0,0 0,6.75 13h0A1.8,1.8 0,0 0,5 14.75L5,14.75A1.8,1.8 0,0 0,6.75 16.5h0A1.8,1.8 0,0 0,8.5 14.75ZM13.75,14.75h0A1.8,1.8 0,0 0,12 13h0a1.8,1.8 0,0 0,-1.75 1.75h0A1.8,1.8 0,0 0,12 16.5h0A1.8,1.8 0,0 0,13.75 14.75ZM19,14.75h0A1.8,1.8 0,0 0,17.25 13h0a1.8,1.8 0,0 0,-1.75 1.75h0a1.8,1.8 0,0 0,1.75 1.75h0A1.8,1.8 0,0 0,19 14.75ZM13.75,19.75h0A1.8,1.8 0,0 0,12 18h0a1.8,1.8 0,0 0,-1.75 1.75h0A1.8,1.8 0,0 0,12 21.5h0A1.8,1.8 0,0 0,13.75 19.75Z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M8.375,4.75C8.375,5.647 7.647,6.375 6.75,6.375C5.853,6.375 5.125,5.647 5.125,4.75C5.125,3.853 5.853,3.125 6.75,3.125C7.647,3.125 8.375,3.853 8.375,4.75Z" />
<path
android:fillColor="#000000"
android:pathData="M12,6.375C12.898,6.375 13.625,5.647 13.625,4.75C13.625,3.853 12.898,3.125 12,3.125C11.102,3.125 10.375,3.853 10.375,4.75C10.375,5.647 11.102,6.375 12,6.375Z" />
<path
android:fillColor="#000000"
android:pathData="M17.25,6.375C18.147,6.375 18.875,5.647 18.875,4.75C18.875,3.853 18.147,3.125 17.25,3.125C16.353,3.125 15.625,3.853 15.625,4.75C15.625,5.647 16.353,6.375 17.25,6.375Z" />
<path
android:fillColor="#000000"
android:pathData="M12,21.375C12.898,21.375 13.625,20.647 13.625,19.75C13.625,18.853 12.898,18.125 12,18.125C11.102,18.125 10.375,18.853 10.375,19.75C10.375,20.647 11.102,21.375 12,21.375Z" />
<path
android:fillColor="#000000"
android:pathData="M13.625,14.75C13.625,15.648 12.898,16.375 12,16.375C11.102,16.375 10.375,15.648 10.375,14.75C10.375,13.852 11.102,13.125 12,13.125C12.898,13.125 13.625,13.852 13.625,14.75Z" />
<path
android:fillColor="#000000"
android:pathData="M17.25,16.375C18.147,16.375 18.875,15.648 18.875,14.75C18.875,13.852 18.147,13.125 17.25,13.125C16.353,13.125 15.625,13.852 15.625,14.75C15.625,15.648 16.353,16.375 17.25,16.375Z" />
<path
android:fillColor="#000000"
android:pathData="M8.375,14.75C8.375,15.648 7.647,16.375 6.75,16.375C5.853,16.375 5.125,15.648 5.125,14.75C5.125,13.852 5.853,13.125 6.75,13.125C7.647,13.125 8.375,13.852 8.375,14.75Z" />
<path
android:fillColor="#000000"
android:pathData="M12,11.375C12.898,11.375 13.625,10.648 13.625,9.75C13.625,8.853 12.898,8.125 12,8.125C11.102,8.125 10.375,8.853 10.375,9.75C10.375,10.648 11.102,11.375 12,11.375Z" />
<path
android:fillColor="#000000"
android:pathData="M18.875,9.75C18.875,10.648 18.147,11.375 17.25,11.375C16.353,11.375 15.625,10.648 15.625,9.75C15.625,8.853 16.353,8.125 17.25,8.125C18.147,8.125 18.875,8.853 18.875,9.75Z" />
<path
android:fillColor="#000000"
android:pathData="M6.75,11.375C7.647,11.375 8.375,10.648 8.375,9.75C8.375,8.853 7.647,8.125 6.75,8.125C5.853,8.125 5.125,8.853 5.125,9.75C5.125,10.648 5.853,11.375 6.75,11.375Z" />
</vector>

View file

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

View file

@ -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" />
<org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton
android:id="@+id/kbs_lock_pin_confirm"

View file

@ -52,7 +52,10 @@
style="@style/Signal.Widget.Button.Medium.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/PinRestoreEntryFragment_enter_alphanumeric_pin"
android:text="@string/RegistrationLockFragment__switch_keyboard"
app:icon="@drawable/ic_keyboard_24"
app:iconGravity="textStart"
app:iconPadding="8dp"
app:layout_constraintTop_toBottomOf="@+id/reminder_disable_pin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />

View file

@ -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" />
<org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton
android:id="@+id/pin_restore_pin_confirm"

View file

@ -1629,8 +1629,8 @@
<item quantity="other">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.</item>
</plurals>
<string name="PinRestoreEntryFragment_signal_registration_need_help_with_pin">Signal Registration - Need Help with PIN for Android</string>
<string name="PinRestoreEntryFragment_enter_alphanumeric_pin">Enter alphanumeric PIN</string>
<string name="PinRestoreEntryFragment_enter_numeric_pin">Enter numeric PIN</string>
<!-- Button label to prompt the user to switch between an alphanumeric and numeric-only keyboards -->
<string name="PinRestoreEntryFragment_switch_keyboard">Switch keyboard</string>
<!-- PinRestoreLockedFragment -->
<string name="PinRestoreLockedFragment_create_your_pin">Create your PIN</string>
@ -3449,7 +3449,9 @@
<!-- BaseKbsPinFragment -->
<string name="BaseKbsPinFragment__next">Next</string>
<!-- Button label to prompt them to create a password ("PIN") using numbers and letters rather than only numbers. -->
<string name="BaseKbsPinFragment__create_alphanumeric_pin">Create alphanumeric PIN</string>
<!-- Button label to prompt them to return to creating a numbers-only password ("PIN") -->
<string name="BaseKbsPinFragment__create_numeric_pin">Create numeric PIN</string>
<string name="BaseKbsPinFragment__learn_more_url" translatable="false">https://support.signal.org/hc/articles/360007059792</string>
@ -3511,8 +3513,8 @@
<string name="RegistrationLockFragment__enter_the_pin_you_created">Enter the PIN you created for your account. This is different from your SMS verification code.</string>
<!-- Info text shown above a pin entry text box describing what pin they should be entering. -->
<string name="RegistrationLockFragment__enter_the_pin_you_created_for_your_account">Enter the PIN you created for your account.</string>
<string name="RegistrationLockFragment__enter_alphanumeric_pin">Enter alphanumeric PIN</string>
<string name="RegistrationLockFragment__enter_numeric_pin">Enter numeric PIN</string>
<!-- Button label to prompt the user to switch between an alphanumeric and numeric-only keyboards -->
<string name="RegistrationLockFragment__switch_keyboard">Switch keyboard</string>
<string name="RegistrationLockFragment__incorrect_pin_try_again">Incorrect PIN. Try again.</string>
<string name="RegistrationLockFragment__forgot_pin">Forgot PIN?</string>
<string name="RegistrationLockFragment__incorrect_pin">Incorrect PIN</string>