diff --git a/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt index 32de484b77..42e5a4e449 100644 --- a/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt @@ -58,6 +58,7 @@ import java.time.Clock import javax.inject.Inject private const val SPECIAL_CIRCUMSTANCE_KEY = "special-circumstance" +private const val ANIMATION_REFRESH_DELAY = 500L /** * A view model that helps launch actions for the [MainActivity]. @@ -148,8 +149,7 @@ class MainViewModel @Inject constructor( // Switching between account states often involves some kind of animation (ex: // account switcher) that we might want to give time to finish before triggering // a refresh. - @Suppress("MagicNumber") - delay(500) + delay(ANIMATION_REFRESH_DELAY) trySendAction(MainAction.Internal.CurrentUserStateChange) } .launchIn(viewModelScope) @@ -161,8 +161,7 @@ class MainViewModel @Inject constructor( is VaultStateEvent.Locked -> { // Similar to account switching, triggering this action too soon can // interfere with animations or navigation logic, so we will delay slightly. - @Suppress("MagicNumber") - delay(500) + delay(ANIMATION_REFRESH_DELAY) trySendAction(MainAction.Internal.VaultUnlockStateChange) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt index 0afbb86c18..bb72db3be6 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt @@ -70,7 +70,14 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay import javax.crypto.Cipher -private const val AUTO_FOCUS_DELAY = 415L +/** + * Time slice to delay auto-focusing on the password/pin field. Because of the refresh that + * takes place when switching accounts or changing the lock status we want to delay this + * longer than the delay in place for sending those actions in [com.x8bit.bitwarden.MainViewModel] + * defined by `ANIMATION_REFRESH_DELAY`. We need to ensure this value is + * always greater. + */ +private const val AUTO_FOCUS_DELAY = 575L /** * The top level composable for the Vault Unlock screen. diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreenTest.kt index 248a2e4156..212588a7c5 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreenTest.kt @@ -479,7 +479,7 @@ class VaultUnlockScreenTest : BaseComposeTest() { @Test fun `state with input and without biometrics should request focus on input field`() = runTest { mutableStateFlow.update { it.copy(hideInput = false, isBiometricEnabled = false) } - dispatcher.advanceTimeByAndRunCurrent(500L) + dispatcher.advanceTimeByAndRunCurrent(600L) composeTestRule .onNodeWithText("Master password") .performScrollTo()