From 1e223b1a2ae28a1dbf21143c694005654a95dcb5 Mon Sep 17 00:00:00 2001 From: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Date: Fri, 22 Nov 2024 08:59:01 -0500 Subject: [PATCH] PM-15109 only accept numeric values for account pin lock value (#4359) --- .../components/toggle/BitwardenUnlockWithPinSwitch.kt | 1 + .../feature/settings/accountsecurity/PinInputDialog.kt | 8 +++++++- .../ui/vault/feature/addedit/VaultAddEditScreenTest.kt | 4 ++-- .../feature/itemlisting/VaultItemListingScreenTest.kt | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenUnlockWithPinSwitch.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenUnlockWithPinSwitch.kt index d09adbf0bb..c751f7c978 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenUnlockWithPinSwitch.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenUnlockWithPinSwitch.kt @@ -79,6 +79,7 @@ fun BitwardenUnlockWithPinSwitch( onUnlockWithPinToggleAction(UnlockWithPinState.Disabled) pin = "" }, + isPinCreation = true, ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/PinInputDialog.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/PinInputDialog.kt index 34bbe83bec..194a3df1c7 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/PinInputDialog.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/PinInputDialog.kt @@ -43,6 +43,9 @@ import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme * @param onCancelClick A callback for when the "Cancel" button is clicked. * @param onSubmitClick A callback for when the "Submit" button is clicked. * @param onDismissRequest A callback for when the dialog is requesting to be dismissed. + * @param isPinCreation A flag for determining if the dialog is being used for PIN creation. We + * want to restrict PINs to numeric values but also support any existing PINs with non-numeric + * characters. */ @OptIn(ExperimentalComposeUiApi::class) @Suppress("LongMethod") @@ -51,6 +54,7 @@ fun PinInputDialog( onCancelClick: () -> Unit, onSubmitClick: (String) -> Unit, onDismissRequest: () -> Unit, + isPinCreation: Boolean = false, ) { var pin by remember { mutableStateOf(value = "") } Dialog( @@ -107,7 +111,9 @@ fun PinInputDialog( label = stringResource(id = R.string.pin), value = pin, autoFocus = true, - onValueChange = { pin = it }, + onValueChange = { newValue -> + pin = newValue.filter { it.isDigit() || !isPinCreation } + }, keyboardType = KeyboardType.Number, modifier = Modifier .testTag(tag = "AlertInputField") diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 3dd29a4a65..d5dad2c05a 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -388,7 +388,7 @@ class VaultAddEditScreenTest : BaseComposeTest() { composeTestRule .onAllNodesWithText(text = "PIN") .filterToOne(hasAnyAncestor(isDialog())) - .performTextInput("PIN") + .performTextInput("1234") composeTestRule .onAllNodesWithText(text = "Submit") .filterToOne(hasAnyAncestor(isDialog())) @@ -397,7 +397,7 @@ class VaultAddEditScreenTest : BaseComposeTest() { verify { viewModel.trySendAction( VaultAddEditAction.Common.PinFido2SetUpSubmit( - pin = "PIN", + pin = "1234", ), ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt index 52642bffa3..445e464e4e 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt @@ -1788,7 +1788,7 @@ class VaultItemListingScreenTest : BaseComposeTest() { composeTestRule .onAllNodesWithText(text = "PIN") .filterToOne(hasAnyAncestor(isDialog())) - .performTextInput("PIN") + .performTextInput("1234") composeTestRule .onAllNodesWithText(text = "Submit") .filterToOne(hasAnyAncestor(isDialog())) @@ -1797,7 +1797,7 @@ class VaultItemListingScreenTest : BaseComposeTest() { verify { viewModel.trySendAction( VaultItemListingsAction.PinFido2SetUpSubmit( - pin = "PIN", + pin = "1234", selectedCipherId = selectedCipherId, ), )