RESTRICT AUTOMERGE Add activeUnlock config to force dismissKeyguard

On some wakeup active unlock triggers

Test: manual
Test: atest KeyguardUpdateMonitorTest ActiveUnlockConfigTest
Fixes: 267170467
Change-Id: Ib1aa68a7407f9e902d78f1d949471edddb26281a
This commit is contained in:
Beverly
2023-02-10 20:18:02 +00:00
committed by Beverly Tai
parent 7cf6cd8567
commit 0011ed15f3
8 changed files with 192 additions and 16 deletions

View File

@@ -9922,7 +9922,7 @@ public final class Settings {
/** /**
* If active unlock triggers on unlock intents, then also request active unlock on * If active unlock triggers on unlock intents, then also request active unlock on
* these wake-up reasons. See PowerManager.WakeReason for value mappings. * these wake-up reasons. See {@link PowerManager.WakeReason} for value mappings.
* WakeReasons should be separated by a pipe. For example: "0|3" or "0". If this * WakeReasons should be separated by a pipe. For example: "0|3" or "0". If this
* setting should be disabled, then this should be set to an empty string. A null value * setting should be disabled, then this should be set to an empty string. A null value
* will use the system default value (WAKE_REASON_UNFOLD_DEVICE). * will use the system default value (WAKE_REASON_UNFOLD_DEVICE).
@@ -9931,6 +9931,17 @@ public final class Settings {
public static final String ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS = public static final String ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS =
"active_unlock_wakeups_considered_unlock_intents"; "active_unlock_wakeups_considered_unlock_intents";
/**
* If active unlock triggers and succeeds on these wakeups, force dismiss keyguard on
* these wake reasons. See {@link PowerManager#WakeReason} for value mappings.
* WakeReasons should be separated by a pipe. For example: "0|3" or "0". If this
* setting should be disabled, then this should be set to an empty string. A null value
* will use the system default value (WAKE_REASON_UNFOLD_DEVICE).
* @hide
*/
public static final String ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD =
"active_unlock_wakeups_to_force_dismiss_keyguard";
/** /**
* Whether the assist gesture should be enabled. * Whether the assist gesture should be enabled.
* *

View File

@@ -131,6 +131,7 @@ public class SecureSettings {
Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO, Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO,
Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED, Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS, Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
Settings.Secure.VR_DISPLAY_MODE, Settings.Secure.VR_DISPLAY_MODE,
Settings.Secure.NOTIFICATION_BADGING, Settings.Secure.NOTIFICATION_BADGING,
Settings.Secure.NOTIFICATION_DISMISS_RTL, Settings.Secure.NOTIFICATION_DISMISS_RTL,

View File

@@ -191,6 +191,8 @@ public class SecureSettingsValidators {
ANY_STRING_VALIDATOR); ANY_STRING_VALIDATOR);
VALIDATORS.put(Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS, VALIDATORS.put(Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
ANY_STRING_VALIDATOR); ANY_STRING_VALIDATOR);
VALIDATORS.put(Secure.ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
ANY_STRING_VALIDATOR);
VALIDATORS.put(Secure.ASSIST_GESTURE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.ASSIST_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.ASSIST_GESTURE_WAKE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.ASSIST_GESTURE_WAKE_ENABLED, BOOLEAN_VALIDATOR);

View File

@@ -29,8 +29,9 @@ import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ERRORS import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ERRORS
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED
import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_WAKE import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_WAKE
import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS
import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD
import android.util.Log import android.util.Log
import com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser import com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser
import com.android.systemui.Dumpable import com.android.systemui.Dumpable
@@ -60,9 +61,27 @@ class ActiveUnlockConfig @Inject constructor(
* Indicates the origin for an active unlock request. * Indicates the origin for an active unlock request.
*/ */
enum class ActiveUnlockRequestOrigin { enum class ActiveUnlockRequestOrigin {
/**
* Trigger ActiveUnlock on wake ups that'd trigger FaceAuth, see [FaceWakeUpTriggersConfig]
*/
WAKE, WAKE,
/**
* Trigger ActiveUnlock on unlock intents. This includes the bouncer showing or tapping on
* a notification. May also include wakeups: [wakeupsConsideredUnlockIntents].
*/
UNLOCK_INTENT, UNLOCK_INTENT,
/**
* Trigger ActiveUnlock on biometric failures. This may include soft errors depending on
* the other settings. See: [faceErrorsToTriggerBiometricFailOn],
* [faceAcquireInfoToTriggerBiometricFailOn].
*/
BIOMETRIC_FAIL, BIOMETRIC_FAIL,
/**
* Trigger ActiveUnlock when the assistant is triggered.
*/
ASSISTANT, ASSISTANT,
} }
@@ -85,6 +104,7 @@ class ActiveUnlockConfig @Inject constructor(
private var faceAcquireInfoToTriggerBiometricFailOn = mutableSetOf<Int>() private var faceAcquireInfoToTriggerBiometricFailOn = mutableSetOf<Int>()
private var onUnlockIntentWhenBiometricEnrolled = mutableSetOf<Int>() private var onUnlockIntentWhenBiometricEnrolled = mutableSetOf<Int>()
private var wakeupsConsideredUnlockIntents = mutableSetOf<Int>() private var wakeupsConsideredUnlockIntents = mutableSetOf<Int>()
private var wakeupsToForceDismissKeyguard = mutableSetOf<Int>()
private val settingsObserver = object : ContentObserver(handler) { private val settingsObserver = object : ContentObserver(handler) {
private val wakeUri = secureSettings.getUriFor(ACTIVE_UNLOCK_ON_WAKE) private val wakeUri = secureSettings.getUriFor(ACTIVE_UNLOCK_ON_WAKE)
@@ -97,6 +117,8 @@ class ActiveUnlockConfig @Inject constructor(
secureSettings.getUriFor(ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED) secureSettings.getUriFor(ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED)
private val wakeupsConsideredUnlockIntentsUri = private val wakeupsConsideredUnlockIntentsUri =
secureSettings.getUriFor(ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS) secureSettings.getUriFor(ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS)
private val wakeupsToForceDismissKeyguardUri =
secureSettings.getUriFor(ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD)
fun register() { fun register() {
registerUri( registerUri(
@@ -108,6 +130,7 @@ class ActiveUnlockConfig @Inject constructor(
faceAcquireInfoUri, faceAcquireInfoUri,
unlockIntentWhenBiometricEnrolledUri, unlockIntentWhenBiometricEnrolledUri,
wakeupsConsideredUnlockIntentsUri, wakeupsConsideredUnlockIntentsUri,
wakeupsToForceDismissKeyguardUri,
) )
) )
@@ -182,6 +205,15 @@ class ActiveUnlockConfig @Inject constructor(
wakeupsConsideredUnlockIntents, wakeupsConsideredUnlockIntents,
setOf(WAKE_REASON_UNFOLD_DEVICE)) setOf(WAKE_REASON_UNFOLD_DEVICE))
} }
if (selfChange || uris.contains(wakeupsToForceDismissKeyguardUri)) {
processStringArray(
secureSettings.getStringForUser(
ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
getCurrentUser()),
wakeupsToForceDismissKeyguard,
setOf(WAKE_REASON_UNFOLD_DEVICE))
}
} }
/** /**
@@ -248,6 +280,14 @@ class ActiveUnlockConfig @Inject constructor(
return wakeupsConsideredUnlockIntents.contains(pmWakeReason) return wakeupsConsideredUnlockIntents.contains(pmWakeReason)
} }
/**
* Whether the PowerManager wake reason should force dismiss the keyguard if active
* unlock is successful.
*/
fun shouldWakeupForceDismissKeyguard(pmWakeReason: Int): Boolean {
return wakeupsToForceDismissKeyguard.contains(pmWakeReason)
}
/** /**
* Whether to trigger active unlock based on where the request is coming from and * Whether to trigger active unlock based on where the request is coming from and
* the current settings. * the current settings.
@@ -321,6 +361,9 @@ class ActiveUnlockConfig @Inject constructor(
pw.println(" activeUnlockWakeupsConsideredUnlockIntents=${ pw.println(" activeUnlockWakeupsConsideredUnlockIntents=${
wakeupsConsideredUnlockIntents.map { PowerManager.wakeReasonToString(it) } wakeupsConsideredUnlockIntents.map { PowerManager.wakeReasonToString(it) }
}") }")
pw.println(" activeUnlockFromWakeupsToAlwaysDismissKeyguard=${
wakeupsToForceDismissKeyguard.map { PowerManager.wakeReasonToString(it) }
}")
pw.println("Current state:") pw.println("Current state:")
keyguardUpdateMonitor?.let { keyguardUpdateMonitor?.let {

View File

@@ -29,7 +29,7 @@ import java.io.PrintWriter
import java.util.stream.Collectors import java.util.stream.Collectors
import javax.inject.Inject import javax.inject.Inject
/** Determines which device wake-ups should trigger face authentication. */ /** Determines which device wake-ups should trigger passive authentication. */
@SysUISingleton @SysUISingleton
class FaceWakeUpTriggersConfig class FaceWakeUpTriggersConfig
@Inject @Inject

View File

@@ -1927,11 +1927,23 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason); FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason);
updateFaceListeningState(BIOMETRIC_ACTION_UPDATE, updateFaceListeningState(BIOMETRIC_ACTION_UPDATE,
FACE_AUTH_UPDATED_STARTED_WAKING_UP); FACE_AUTH_UPDATED_STARTED_WAKING_UP);
requestActiveUnlock(
final ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin =
mActiveUnlockConfig.isWakeupConsideredUnlockIntent(pmWakeReason) mActiveUnlockConfig.isWakeupConsideredUnlockIntent(pmWakeReason)
? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT ? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT
: ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE, : ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE;
"wakingUp - " + PowerManager.wakeReasonToString(pmWakeReason)); final String reason = "wakingUp - " + PowerManager.wakeReasonToString(pmWakeReason);
if (mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(pmWakeReason)) {
requestActiveUnlockDismissKeyguard(
requestOrigin,
reason
);
} else {
requestActiveUnlock(
requestOrigin,
reason
);
}
} else { } else {
mLogger.logSkipUpdateFaceListeningOnWakeup(pmWakeReason); mLogger.logSkipUpdateFaceListeningOnWakeup(pmWakeReason);
} }
@@ -2590,6 +2602,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
} }
} }
/** /**
* Attempts to trigger active unlock from trust agent. * Attempts to trigger active unlock from trust agent.
* Only dismisses the keyguard under certain conditions. * Only dismisses the keyguard under certain conditions.

View File

@@ -31,6 +31,7 @@ import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_WAKE import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_WAKE
import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS
import android.provider.Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
@@ -51,6 +52,7 @@ import java.io.PrintWriter
@SmallTest @SmallTest
class ActiveUnlockConfigTest : SysuiTestCase() { class ActiveUnlockConfigTest : SysuiTestCase() {
private lateinit var secureSettings: FakeSettings private lateinit var secureSettings: FakeSettings
@Mock @Mock
private lateinit var contentResolver: ContentResolver private lateinit var contentResolver: ContentResolver
@@ -71,7 +73,6 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
currentUser = KeyguardUpdateMonitor.getCurrentUser() currentUser = KeyguardUpdateMonitor.getCurrentUser()
secureSettings = FakeSettings() secureSettings = FakeSettings()
activeUnlockConfig = ActiveUnlockConfig( activeUnlockConfig = ActiveUnlockConfig(
@@ -313,10 +314,6 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason)) assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason))
} }
} }
assertTrue(activeUnlockConfig.isWakeupConsideredUnlockIntent(PowerManager.WAKE_REASON_LIFT))
assertTrue(activeUnlockConfig.isWakeupConsideredUnlockIntent(PowerManager.WAKE_REASON_TAP))
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(
PowerManager.WAKE_REASON_UNFOLD_DEVICE))
} }
@Test @Test
@@ -330,11 +327,70 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
for (wakeReason in 0..WAKE_REASON_BIOMETRIC) { for (wakeReason in 0..WAKE_REASON_BIOMETRIC) {
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason)) assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason))
} }
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent( }
PowerManager.WAKE_REASON_LIFT))
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(PowerManager.WAKE_REASON_TAP)) @Test
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent( fun isWakeupForceDismissKeyguard_singleValue() {
PowerManager.WAKE_REASON_UNFOLD_DEVICE)) verifyRegisterSettingObserver()
// GIVEN lift is considered an unlock intent
secureSettings.putStringForUser(ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
PowerManager.WAKE_REASON_LIFT.toString(), currentUser)
updateSetting(secureSettings.getUriFor(
ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD
))
// THEN only WAKE_REASON_LIFT is considered an unlock intent
for (wakeReason in 0..WAKE_REASON_BIOMETRIC) {
if (wakeReason == PowerManager.WAKE_REASON_LIFT) {
assertTrue(activeUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason))
} else {
assertFalse(activeUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason))
}
}
}
@Test
fun isWakeupForceDismissKeyguard_emptyValues() {
verifyRegisterSettingObserver()
// GIVEN lift and tap are considered an unlock intent
secureSettings.putStringForUser(ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
" ", currentUser)
updateSetting(secureSettings.getUriFor(
ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD
))
// THEN no wake up gestures are considered an unlock intent
for (wakeReason in 0..WAKE_REASON_BIOMETRIC) {
assertFalse(activeUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason))
}
}
@Test
fun isWakeupForceDismissKeyguard_multiValue() {
verifyRegisterSettingObserver()
// GIVEN lift and tap are considered an unlock intent
secureSettings.putStringForUser(ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD,
PowerManager.WAKE_REASON_LIFT.toString() +
"|" +
PowerManager.WAKE_REASON_TAP.toString(),
currentUser
)
updateSetting(secureSettings.getUriFor(
ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD
))
// THEN WAKE_REASON_LIFT and WAKE_REASON TAP are considered an unlock intent
for (wakeReason in 0..WAKE_REASON_BIOMETRIC) {
if (wakeReason == PowerManager.WAKE_REASON_LIFT ||
wakeReason == PowerManager.WAKE_REASON_TAP) {
assertTrue(activeUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason))
} else {
assertFalse(activeUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason))
}
}
} }
@Test @Test

View File

@@ -2374,6 +2374,56 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue(); assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
} }
@Test
public void unfoldWakeup_requestActiveUnlock_forceDismissKeyguard()
throws RemoteException {
// GIVEN shouldTriggerActiveUnlock
keyguardIsVisible();
when(mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser())).thenReturn(true);
// GIVEN active unlock triggers on wakeup
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE))
.thenReturn(true);
// GIVEN an unfold should force dismiss the keyguard
when(mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(
PowerManager.WAKE_REASON_UNFOLD_DEVICE)).thenReturn(true);
// WHEN device wakes up from an unfold
mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_UNFOLD_DEVICE);
mTestableLooper.processAllMessages();
// THEN request unlock with a keyguard dismissal
verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()),
eq(true));
}
@Test
public void unfoldWakeup_requestActiveUnlock_noDismissKeyguard()
throws RemoteException {
// GIVEN shouldTriggerActiveUnlock on wake from UNFOLD_DEVICE
keyguardIsVisible();
when(mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser())).thenReturn(true);
// GIVEN active unlock triggers on wakeup
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE))
.thenReturn(true);
// GIVEN an unfold should NOT force dismiss the keyguard
when(mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(
PowerManager.WAKE_REASON_UNFOLD_DEVICE)).thenReturn(false);
// WHEN device wakes up from an unfold
mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_UNFOLD_DEVICE);
mTestableLooper.processAllMessages();
// THEN request unlock WITHOUT a keyguard dismissal
verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()),
eq(false));
}
private void userDeviceLockDown() { private void userDeviceLockDown() {
when(mStrongAuthTracker.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(false); when(mStrongAuthTracker.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(false);
when(mStrongAuthTracker.getStrongAuthForUser(mCurrentUserId)) when(mStrongAuthTracker.getStrongAuthForUser(mCurrentUserId))