[PM-18545] Hide section when no unlock option are available (#4751)

This commit is contained in:
André Bispo
2025-02-20 14:30:39 +00:00
committed by GitHub
parent 61c48bf673
commit aac2345a64
2 changed files with 64 additions and 10 deletions

View File

@@ -62,6 +62,7 @@ import com.x8bit.bitwarden.ui.platform.components.toggle.BitwardenUnlockWithPinS
import com.x8bit.bitwarden.ui.platform.components.util.rememberVectorPainter
import com.x8bit.bitwarden.ui.platform.composition.LocalBiometricsManager
import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
@@ -228,17 +229,20 @@ fun AccountSecurityScreen(
.fillMaxWidth(),
)
Spacer(Modifier.height(16.dp))
BitwardenListHeaderText(
label = stringResource(id = R.string.unlock_options),
modifier = Modifier
.fillMaxWidth()
.standardHorizontalMargin()
.padding(horizontal = 16.dp),
)
Spacer(modifier = Modifier.height(height = 8.dp))
val biometricSupportStatus = biometricsManager.biometricSupportStatus
if (biometricSupportStatus != BiometricSupportStatus.NOT_SUPPORTED ||
!state.removeUnlockWithPinPolicyEnabled ||
state.isUnlockWithPinEnabled) {
Spacer(Modifier.height(16.dp))
BitwardenListHeaderText(
label = stringResource(id = R.string.unlock_options),
modifier = Modifier
.fillMaxWidth()
.standardHorizontalMargin()
.padding(horizontal = 16.dp),
)
Spacer(modifier = Modifier.height(height = 8.dp))
}
BitwardenUnlockWithBiometricsSwitch(
biometricSupportStatus = biometricSupportStatus,
isChecked = state.isUnlockWithBiometricsEnabled || showBiometricsPrompt,

View File

@@ -30,6 +30,7 @@ import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.coEvery
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
@@ -241,6 +242,55 @@ class AccountSecurityScreenTest : BaseComposeTest() {
composeTestRule.onNodeWithText("Unlock with Biometrics").assertIsOn()
}
@Suppress("MaxLineLength")
@Test
fun `unlock option section should be displayed according to state if biometrics is available`() {
val section = "UNLOCK OPTIONS"
composeTestRule.onNodeWithText(section).performScrollTo().assertIsDisplayed()
mutableStateFlow.update {
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = true,
isUnlockWithPinEnabled = true,
)
}
composeTestRule.onNodeWithText(section).performScrollTo().assertIsDisplayed()
mutableStateFlow.update {
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = true,
isUnlockWithPinEnabled = false,
)
}
composeTestRule.onNodeWithText(section).performScrollTo().assertIsDisplayed()
}
@Suppress("MaxLineLength")
@Test
fun `unlock option section should be displayed according to state if biometrics is not available`() {
coEvery {
biometricsManager.biometricSupportStatus
} returns BiometricSupportStatus.NOT_SUPPORTED
val section = "UNLOCK OPTIONS"
composeTestRule.onNodeWithText(section).performScrollTo().assertIsDisplayed()
mutableStateFlow.update {
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = true,
isUnlockWithPinEnabled = true,
)
}
composeTestRule.onNodeWithText(section).performScrollTo().assertIsDisplayed()
mutableStateFlow.update {
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = true,
isUnlockWithPinEnabled = false,
)
}
composeTestRule.onNodeWithText(section).assertDoesNotExist()
}
@Test
fun `unlock with pin toggle should be displayed according to state`() {
val toggleText = "Unlock with PIN code"