mirror of
https://github.com/bitwarden/android.git
synced 2025-02-23 00:59:16 +03:00
PM-17378: Update remember me text (#4624)
This commit is contained in:
parent
b3550bc933
commit
5f1ef71b3b
9 changed files with 35 additions and 34 deletions
app/src
main
java/com/x8bit/bitwarden/ui/auth/feature
landing
twofactorlogin
res/values
test/java/com/x8bit/bitwarden/ui/auth/feature
|
@ -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
|
||||
|
|
|
@ -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?,
|
||||
|
|
|
@ -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 = "",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -225,7 +225,8 @@
|
|||
<string name="login_unavailable">Login unavailable</string>
|
||||
<string name="no_two_step_available">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).</string>
|
||||
<string name="recovery_code_title">Recovery code</string>
|
||||
<string name="remember_me">Remember me</string>
|
||||
<string name="remember">Remember</string>
|
||||
<string name="remember_email">Remember email</string>
|
||||
<string name="send_verification_code_again">Send verification code email again</string>
|
||||
<string name="two_step_login_options">Two-step login options</string>
|
||||
<string name="use_another_two_step_method">Use another two-step login method</string>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue