mirror of
https://github.com/bitwarden/android.git
synced 2026-05-10 16:45:43 -05:00
Compare commits
1 Commits
cron-sync-
...
hold-on-bi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
635eb10511 |
@@ -11,11 +11,13 @@ import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
|
||||
import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.model.UnlockType
|
||||
|
||||
private const val VAULT_UNLOCK_TYPE: String = "unlock_type"
|
||||
private const val PROMPT_FOR_BIO: String = "prompt_for_bio"
|
||||
private const val TDE_VAULT_UNLOCK_ROUTE_PREFIX: String = "tde_vault_unlock"
|
||||
private const val TDE_VAULT_UNLOCK_ROUTE: String =
|
||||
"$TDE_VAULT_UNLOCK_ROUTE_PREFIX/{$VAULT_UNLOCK_TYPE}"
|
||||
private const val VAULT_UNLOCK_ROUTE_PREFIX: String = "vault_unlock"
|
||||
const val VAULT_UNLOCK_ROUTE: String = "$VAULT_UNLOCK_ROUTE_PREFIX/{$VAULT_UNLOCK_TYPE}"
|
||||
const val VAULT_UNLOCK_ROUTE: String =
|
||||
"$VAULT_UNLOCK_ROUTE_PREFIX/{$VAULT_UNLOCK_TYPE}/{$PROMPT_FOR_BIO}"
|
||||
|
||||
/**
|
||||
* Class to retrieve vault unlock arguments from the [SavedStateHandle].
|
||||
@@ -23,9 +25,11 @@ const val VAULT_UNLOCK_ROUTE: String = "$VAULT_UNLOCK_ROUTE_PREFIX/{$VAULT_UNLOC
|
||||
@OmitFromCoverage
|
||||
data class VaultUnlockArgs(
|
||||
val unlockType: UnlockType,
|
||||
val shouldPromptForBio: Boolean,
|
||||
) {
|
||||
constructor(savedStateHandle: SavedStateHandle) : this(
|
||||
unlockType = checkNotNull(savedStateHandle.get<UnlockType>(VAULT_UNLOCK_TYPE)),
|
||||
shouldPromptForBio = checkNotNull(savedStateHandle.get<Boolean>(PROMPT_FOR_BIO)),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -34,9 +38,10 @@ data class VaultUnlockArgs(
|
||||
*/
|
||||
fun NavController.navigateToVaultUnlock(
|
||||
navOptions: NavOptions? = null,
|
||||
shouldPromptForBio: Boolean = false,
|
||||
) {
|
||||
navigate(
|
||||
route = "$VAULT_UNLOCK_ROUTE_PREFIX/${UnlockType.STANDARD}",
|
||||
route = "$VAULT_UNLOCK_ROUTE_PREFIX/${UnlockType.STANDARD}/$shouldPromptForBio",
|
||||
navOptions = navOptions,
|
||||
)
|
||||
}
|
||||
@@ -49,6 +54,7 @@ fun NavGraphBuilder.vaultUnlockDestination() {
|
||||
route = VAULT_UNLOCK_ROUTE,
|
||||
arguments = listOf(
|
||||
navArgument(VAULT_UNLOCK_TYPE) { type = NavType.EnumType(UnlockType::class.java) },
|
||||
navArgument(PROMPT_FOR_BIO) { type = NavType.BoolType },
|
||||
),
|
||||
) {
|
||||
VaultUnlockScreen()
|
||||
|
||||
@@ -75,11 +75,12 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
val specialCircumstance = specialCircumstanceManager.specialCircumstance
|
||||
|
||||
val args = VaultUnlockArgs(savedStateHandle)
|
||||
val showAccountMenu =
|
||||
VaultUnlockArgs(savedStateHandle).unlockType == UnlockType.STANDARD &&
|
||||
args.unlockType == UnlockType.STANDARD &&
|
||||
(specialCircumstance !is SpecialCircumstance.Fido2GetCredentials &&
|
||||
specialCircumstance !is SpecialCircumstance.Fido2Assertion)
|
||||
val shouldPromptBiometrics = args.shouldPromptForBio
|
||||
VaultUnlockState(
|
||||
accountSummaries = accountSummaries,
|
||||
avatarColorString = activeAccountSummary.avatarColorHex,
|
||||
@@ -100,6 +101,7 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
// TODO: [PM-13076] Handle Fido2CredentialAssertionRequest special circumstance
|
||||
fido2CredentialAssertionRequest = null,
|
||||
hasMasterPassword = activeAccount.hasMasterPassword,
|
||||
shouldPromptForBiometrics = shouldPromptBiometrics,
|
||||
)
|
||||
},
|
||||
) {
|
||||
@@ -425,7 +427,7 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
|
||||
private fun promptForBiometricsIfAvailable() {
|
||||
val cipher = biometricsEncryptionManager.getOrCreateCipher(state.userId)
|
||||
if (state.showBiometricLogin && cipher != null) {
|
||||
if (state.showBiometricLogin && cipher != null && state.shouldPromptForBiometrics) {
|
||||
sendEvent(
|
||||
VaultUnlockEvent.PromptForBiometrics(
|
||||
cipher = cipher,
|
||||
@@ -458,6 +460,7 @@ data class VaultUnlockState(
|
||||
val fido2GetCredentialsRequest: Fido2GetCredentialsRequest? = null,
|
||||
val fido2CredentialAssertionRequest: Fido2CredentialAssertionRequest? = null,
|
||||
private val hasMasterPassword: Boolean,
|
||||
val shouldPromptForBiometrics: Boolean,
|
||||
) : Parcelable {
|
||||
|
||||
/**
|
||||
|
||||
@@ -120,7 +120,7 @@ fun RootNavScreen(
|
||||
RootNavState.RemovePassword -> REMOVE_PASSWORD_ROUTE
|
||||
RootNavState.Splash -> SPLASH_ROUTE
|
||||
RootNavState.TrustedDevice -> TRUSTED_DEVICE_GRAPH_ROUTE
|
||||
RootNavState.VaultLocked -> VAULT_UNLOCK_ROUTE
|
||||
is RootNavState.VaultLocked -> VAULT_UNLOCK_ROUTE
|
||||
is RootNavState.VaultUnlocked,
|
||||
is RootNavState.VaultUnlockedForAutofillSave,
|
||||
is RootNavState.VaultUnlockedForAutofillSelection,
|
||||
@@ -193,7 +193,12 @@ fun RootNavScreen(
|
||||
RootNavState.SetPassword -> navController.navigateToSetPassword(rootNavOptions)
|
||||
RootNavState.Splash -> navController.navigateToSplash(rootNavOptions)
|
||||
RootNavState.TrustedDevice -> navController.navigateToTrustedDeviceGraph(rootNavOptions)
|
||||
RootNavState.VaultLocked -> navController.navigateToVaultUnlock(rootNavOptions)
|
||||
is RootNavState.VaultLocked -> {
|
||||
navController.navigateToVaultUnlock(
|
||||
navOptions = rootNavOptions,
|
||||
shouldPromptForBio = currentState.promptForBiometrics,
|
||||
)
|
||||
}
|
||||
is RootNavState.VaultUnlocked -> navController.navigateToVaultUnlockedGraph(
|
||||
navOptions = rootNavOptions,
|
||||
)
|
||||
|
||||
@@ -173,7 +173,16 @@ class RootNavViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
else -> RootNavState.VaultLocked
|
||||
else -> {
|
||||
val promptForBiometrics = when (val previousState = state) {
|
||||
is RootNavState.VaultUnlocked -> {
|
||||
previousState.activeUserId != userState.activeUserId
|
||||
}
|
||||
|
||||
else -> true
|
||||
}
|
||||
RootNavState.VaultLocked(promptForBiometrics = promptForBiometrics)
|
||||
}
|
||||
}
|
||||
mutableStateFlow.update { updatedRootNavState }
|
||||
}
|
||||
@@ -260,7 +269,7 @@ sealed class RootNavState : Parcelable {
|
||||
* App should show vault locked nav graph.
|
||||
*/
|
||||
@Parcelize
|
||||
data object VaultLocked : RootNavState()
|
||||
data class VaultLocked(val promptForBiometrics: Boolean) : RootNavState()
|
||||
|
||||
/**
|
||||
* App should show vault unlocked nav graph for the given [activeUserId].
|
||||
|
||||
Reference in New Issue
Block a user