diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt index c0ac3907dc..126ef36f93 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt @@ -261,8 +261,8 @@ private fun LandingScreenContent( Spacer(modifier = Modifier.height(height = 8.dp)) BitwardenSwitch( - label = stringResource(id = R.string.remember_me), - isChecked = state.isRememberMeEnabled, + label = stringResource(id = R.string.remember_email), + isChecked = state.isRememberEmailEnabled, onCheckedChange = onRememberMeToggle, cardStyle = CardStyle.Full, modifier = Modifier diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt index 1499f1e218..99f758b65c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt @@ -43,7 +43,7 @@ class LandingViewModel @Inject constructor( ?: LandingState( emailInput = authRepository.rememberedEmailAddress.orEmpty(), isContinueButtonEnabled = authRepository.rememberedEmailAddress != null, - isRememberMeEnabled = authRepository.rememberedEmailAddress != null, + isRememberEmailEnabled = authRepository.rememberedEmailAddress != null, selectedEnvironmentType = environmentRepository.environment.type, selectedEnvironmentLabel = environmentRepository.environment.label, dialog = null, @@ -185,7 +185,7 @@ class LandingViewModel @Inject constructor( } val email = state.emailInput - val isRememberMeEnabled = state.isRememberMeEnabled + val isRememberMeEnabled = state.isRememberEmailEnabled // Update the remembered email address authRepository.rememberedEmailAddress = email.takeUnless { !isRememberMeEnabled } @@ -210,7 +210,7 @@ class LandingViewModel @Inject constructor( } private fun handleRememberMeToggled(action: LandingAction.RememberMeToggle) { - mutableStateFlow.update { it.copy(isRememberMeEnabled = action.isChecked) } + mutableStateFlow.update { it.copy(isRememberEmailEnabled = action.isChecked) } } private fun handleEnvironmentTypeSelect(action: LandingAction.EnvironmentTypeSelect) { @@ -261,7 +261,7 @@ class LandingViewModel @Inject constructor( data class LandingState( val emailInput: String, val isContinueButtonEnabled: Boolean, - val isRememberMeEnabled: Boolean, + val isRememberEmailEnabled: Boolean, val selectedEnvironmentType: Environment.Type, val selectedEnvironmentLabel: String, val dialog: DialogState?, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt index c5992abeab..4eb5b4cbce 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt @@ -269,8 +269,8 @@ private fun TwoFactorLoginScreenContent( } BitwardenSwitch( - label = stringResource(id = R.string.remember_me), - isChecked = state.isRememberMeEnabled, + label = stringResource(id = R.string.remember), + isChecked = state.isRememberEnabled, onCheckedChange = onRememberMeToggle, cardStyle = CardStyle.Full, modifier = Modifier @@ -317,7 +317,7 @@ private fun TwoFactorLoginScreenContentPreview() { dialogState = null, displayEmail = "email@dot.com", isContinueButtonEnabled = true, - isRememberMeEnabled = true, + isRememberEnabled = true, captchaToken = null, email = "", password = "", diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt index e0aac8b0bf..15c7e8ae2f 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt @@ -68,7 +68,7 @@ class TwoFactorLoginViewModel @Inject constructor( .twoFactorResponse .preferredAuthMethod .isContinueButtonEnabled, - isRememberMeEnabled = false, + isRememberEnabled = false, captchaToken = null, email = args.emailAddress, password = args.password, @@ -445,7 +445,7 @@ class TwoFactorLoginViewModel @Inject constructor( private fun handleRememberMeToggle(action: TwoFactorLoginAction.RememberMeToggle) { mutableStateFlow.update { it.copy( - isRememberMeEnabled = action.isChecked, + isRememberEnabled = action.isChecked, ) } } @@ -561,7 +561,7 @@ class TwoFactorLoginViewModel @Inject constructor( twoFactorData = TwoFactorDataModel( code = code, method = state.authMethod.value.toString(), - remember = state.isRememberMeEnabled, + remember = state.isRememberEnabled, ), captchaToken = state.captchaToken, orgIdentifier = state.orgIdentifier, @@ -586,7 +586,7 @@ data class TwoFactorLoginState( val dialogState: DialogState?, val displayEmail: String, val isContinueButtonEnabled: Boolean, - val isRememberMeEnabled: Boolean, + val isRememberEnabled: Boolean, // Internal val captchaToken: String?, val email: String, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b3fb761195..2684a1f4d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,7 +225,8 @@ Login unavailable This account has two-step login set up, however, none of the configured two-step providers are supported on this device. Please use a supported device and/or add additional providers that are better supported across devices (such as an authenticator app). Recovery code - Remember me + Remember + Remember email Send verification code email again Two-step login options Use another two-step login method diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreenTest.kt index 19ce772706..6f6a99adb1 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreenTest.kt @@ -245,17 +245,17 @@ class LandingScreenTest : BaseComposeTest() { @Test fun `remember me should be toggled on or off according to the state`() { - composeTestRule.onNodeWithText("Remember me").assertIsOff() + composeTestRule.onNodeWithText("Remember email").assertIsOff() - mutableStateFlow.update { it.copy(isRememberMeEnabled = true) } + mutableStateFlow.update { it.copy(isRememberEmailEnabled = true) } - composeTestRule.onNodeWithText("Remember me").assertIsOn() + composeTestRule.onNodeWithText("Remember email").assertIsOn() } @Test fun `remember me click should send RememberMeToggle action`() { composeTestRule - .onNodeWithText("Remember me") + .onNodeWithText("Remember email") .performClick() verify { viewModel.trySendAction(LandingAction.RememberMeToggle(true)) @@ -473,7 +473,7 @@ private val ACTIVE_ACCOUNT_SUMMARY = AccountSummary( private val DEFAULT_STATE = LandingState( emailInput = "", isContinueButtonEnabled = true, - isRememberMeEnabled = false, + isRememberEmailEnabled = false, selectedEnvironmentType = Environment.Type.US, selectedEnvironmentLabel = Environment.Us.label, dialog = null, diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt index ff56c7bc01..6f2272dcfe 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt @@ -60,7 +60,7 @@ class LandingViewModelTest : BaseViewModelTest() { DEFAULT_STATE.copy( emailInput = rememberedEmail, isContinueButtonEnabled = true, - isRememberMeEnabled = true, + isRememberEmailEnabled = true, ), awaitItem(), ) @@ -107,7 +107,7 @@ class LandingViewModelTest : BaseViewModelTest() { val expectedState = DEFAULT_STATE.copy( emailInput = "test", isContinueButtonEnabled = false, - isRememberMeEnabled = true, + isRememberEmailEnabled = true, ) val handle = SavedStateHandle(mapOf("state" to expectedState)) val viewModel = createViewModel(savedStateHandle = handle) @@ -242,7 +242,7 @@ class LandingViewModelTest : BaseViewModelTest() { val initialState = DEFAULT_STATE.copy( emailInput = rememberedEmail, isContinueButtonEnabled = true, - isRememberMeEnabled = true, + isRememberEmailEnabled = true, accountSummaries = accountSummaries, ) assertEquals( @@ -298,7 +298,7 @@ class LandingViewModelTest : BaseViewModelTest() { val initialState = DEFAULT_STATE.copy( emailInput = rememberedEmail, isContinueButtonEnabled = true, - isRememberMeEnabled = true, + isRememberEmailEnabled = true, accountSummaries = accountSummaries, ) assertEquals( @@ -359,7 +359,7 @@ class LandingViewModelTest : BaseViewModelTest() { val initialState = DEFAULT_STATE.copy( emailInput = rememberedEmail, isContinueButtonEnabled = true, - isRememberMeEnabled = true, + isRememberEmailEnabled = true, accountSummaries = accountSummaries, ) assertEquals( @@ -434,7 +434,7 @@ class LandingViewModelTest : BaseViewModelTest() { viewModel.trySendAction(LandingAction.RememberMeToggle(true)) assertEquals( viewModel.stateFlow.value, - DEFAULT_STATE.copy(isRememberMeEnabled = true), + DEFAULT_STATE.copy(isRememberEmailEnabled = true), ) } } @@ -599,7 +599,7 @@ class LandingViewModelTest : BaseViewModelTest() { private val DEFAULT_STATE = LandingState( emailInput = "", isContinueButtonEnabled = false, - isRememberMeEnabled = false, + isRememberEmailEnabled = false, selectedEnvironmentType = Environment.Type.US, selectedEnvironmentLabel = Environment.Us.label, dialog = null, diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreenTest.kt index 2a3b8841f3..eba7820565 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreenTest.kt @@ -155,7 +155,7 @@ class TwoFactorLoginScreenTest : BaseComposeTest() { @Test fun `remember me click should send RememberMeToggle action`() { - composeTestRule.onNodeWithText("Remember me").performClick() + composeTestRule.onNodeWithText("Remember").performClick() verify { viewModel.trySendAction(TwoFactorLoginAction.RememberMeToggle(true)) } @@ -163,11 +163,11 @@ class TwoFactorLoginScreenTest : BaseComposeTest() { @Test fun `remember me should be toggled on or off according to the state`() { - composeTestRule.onNodeWithText("Remember me").assertIsOff() + composeTestRule.onNodeWithText("Remember").assertIsOff() - mutableStateFlow.update { it.copy(isRememberMeEnabled = true) } + mutableStateFlow.update { it.copy(isRememberEnabled = true) } - composeTestRule.onNodeWithText("Remember me").assertIsOn() + composeTestRule.onNodeWithText("Remember").assertIsOn() } @Test @@ -290,7 +290,7 @@ private val DEFAULT_STATE = TwoFactorLoginState( displayEmail = "ex***@email.com", dialogState = null, isContinueButtonEnabled = false, - isRememberMeEnabled = false, + isRememberEnabled = false, captchaToken = null, email = "example@email.com", password = "password123", diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt index d95b22aef9..b4bc1cce91 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt @@ -118,7 +118,7 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() { twoFactorData = TwoFactorDataModel( code = token, method = TwoFactorAuthMethod.YUBI_KEY.value.toString(), - remember = DEFAULT_STATE.isRememberMeEnabled, + remember = DEFAULT_STATE.isRememberEnabled, ), captchaToken = DEFAULT_STATE.captchaToken, orgIdentifier = DEFAULT_STATE.orgIdentifier, @@ -786,7 +786,7 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() { viewModel.trySendAction(TwoFactorLoginAction.RememberMeToggle(true)) assertEquals( DEFAULT_STATE.copy( - isRememberMeEnabled = true, + isRememberEnabled = true, ), viewModel.stateFlow.value, ) @@ -1045,7 +1045,7 @@ private val DEFAULT_STATE = TwoFactorLoginState( displayEmail = "ex***@email.com", dialogState = null, isContinueButtonEnabled = false, - isRememberMeEnabled = false, + isRememberEnabled = false, captchaToken = null, email = DEFAULT_EMAIL_ADDRESS, password = DEFAULT_PASSWORD,