Merge "Some wake-ups can be considered unlock-intents" into tm-qpr-dev am: f9957304f9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21129646 Change-Id: I71158fefcf2bb0bd2e0f2c50a034836350656033 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -9920,6 +9920,17 @@ public final class Settings {
|
||||
public static final String ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED =
|
||||
"active_unlock_on_unlock_intent_when_biometric_enrolled";
|
||||
|
||||
/**
|
||||
* If active unlock triggers on unlock intents, then also request active unlock on
|
||||
* these wake-up reasons. See 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_CONSIDERED_UNLOCK_INTENTS =
|
||||
"active_unlock_wakeups_considered_unlock_intents";
|
||||
|
||||
/**
|
||||
* Whether the assist gesture should be enabled.
|
||||
*
|
||||
|
||||
@@ -130,6 +130,7 @@ public class SecureSettings {
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ERRORS,
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO,
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
|
||||
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
Settings.Secure.VR_DISPLAY_MODE,
|
||||
Settings.Secure.NOTIFICATION_BADGING,
|
||||
Settings.Secure.NOTIFICATION_DISMISS_RTL,
|
||||
|
||||
@@ -189,6 +189,8 @@ public class SecureSettingsValidators {
|
||||
VALIDATORS.put(Secure.ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO, ANY_STRING_VALIDATOR);
|
||||
VALIDATORS.put(Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
|
||||
ANY_STRING_VALIDATOR);
|
||||
VALIDATORS.put(Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
ANY_STRING_VALIDATOR);
|
||||
VALIDATORS.put(Secure.ASSIST_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(Secure.ASSIST_GESTURE_WAKE_ENABLED, BOOLEAN_VALIDATOR);
|
||||
|
||||
@@ -16,18 +16,20 @@
|
||||
|
||||
package com.android.keyguard
|
||||
|
||||
import android.annotation.IntDef
|
||||
import android.content.ContentResolver
|
||||
import android.database.ContentObserver
|
||||
import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_TIMEOUT
|
||||
import android.net.Uri
|
||||
import android.os.Handler
|
||||
import android.os.PowerManager
|
||||
import android.os.PowerManager.WAKE_REASON_UNFOLD_DEVICE
|
||||
import android.os.UserHandle
|
||||
import android.provider.Settings.Secure.ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL
|
||||
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_UNLOCK_INTENT
|
||||
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.util.Log
|
||||
import com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser
|
||||
@@ -52,23 +54,26 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
|
||||
companion object {
|
||||
const val TAG = "ActiveUnlockConfig"
|
||||
|
||||
const val BIOMETRIC_TYPE_NONE = 0
|
||||
const val BIOMETRIC_TYPE_ANY_FACE = 1
|
||||
const val BIOMETRIC_TYPE_ANY_FINGERPRINT = 2
|
||||
const val BIOMETRIC_TYPE_UNDER_DISPLAY_FINGERPRINT = 3
|
||||
}
|
||||
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@IntDef(BIOMETRIC_TYPE_NONE, BIOMETRIC_TYPE_ANY_FACE, BIOMETRIC_TYPE_ANY_FINGERPRINT,
|
||||
BIOMETRIC_TYPE_UNDER_DISPLAY_FINGERPRINT)
|
||||
annotation class BiometricType
|
||||
|
||||
/**
|
||||
* Indicates the origin for an active unlock request.
|
||||
*/
|
||||
enum class ACTIVE_UNLOCK_REQUEST_ORIGIN {
|
||||
WAKE, UNLOCK_INTENT, BIOMETRIC_FAIL, ASSISTANT
|
||||
enum class ActiveUnlockRequestOrigin {
|
||||
WAKE,
|
||||
UNLOCK_INTENT,
|
||||
BIOMETRIC_FAIL,
|
||||
ASSISTANT,
|
||||
}
|
||||
|
||||
/**
|
||||
* Biometric type options.
|
||||
*/
|
||||
enum class BiometricType(val intValue: Int) {
|
||||
NONE(0),
|
||||
ANY_FACE(1),
|
||||
ANY_FINGERPRINT(2),
|
||||
UNDER_DISPLAY_FINGERPRINT(3),
|
||||
}
|
||||
|
||||
var keyguardUpdateMonitor: KeyguardUpdateMonitor? = null
|
||||
@@ -76,9 +81,10 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
private var requestActiveUnlockOnUnlockIntent = false
|
||||
private var requestActiveUnlockOnBioFail = false
|
||||
|
||||
private var faceErrorsToTriggerBiometricFailOn = mutableSetOf(FACE_ERROR_TIMEOUT)
|
||||
private var faceErrorsToTriggerBiometricFailOn = mutableSetOf<Int>()
|
||||
private var faceAcquireInfoToTriggerBiometricFailOn = mutableSetOf<Int>()
|
||||
private var onUnlockIntentWhenBiometricEnrolled = mutableSetOf<Int>(BIOMETRIC_TYPE_NONE)
|
||||
private var onUnlockIntentWhenBiometricEnrolled = mutableSetOf<Int>()
|
||||
private var wakeupsConsideredUnlockIntents = mutableSetOf<Int>()
|
||||
|
||||
private val settingsObserver = object : ContentObserver(handler) {
|
||||
private val wakeUri = secureSettings.getUriFor(ACTIVE_UNLOCK_ON_WAKE)
|
||||
@@ -89,16 +95,19 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
secureSettings.getUriFor(ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO)
|
||||
private val unlockIntentWhenBiometricEnrolledUri =
|
||||
secureSettings.getUriFor(ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED)
|
||||
private val wakeupsConsideredUnlockIntentsUri =
|
||||
secureSettings.getUriFor(ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS)
|
||||
|
||||
fun register() {
|
||||
registerUri(
|
||||
listOf(
|
||||
wakeUri,
|
||||
unlockIntentUri,
|
||||
bioFailUri,
|
||||
faceErrorsUri,
|
||||
faceAcquireInfoUri,
|
||||
unlockIntentWhenBiometricEnrolledUri
|
||||
wakeUri,
|
||||
unlockIntentUri,
|
||||
bioFailUri,
|
||||
faceErrorsUri,
|
||||
faceAcquireInfoUri,
|
||||
unlockIntentWhenBiometricEnrolledUri,
|
||||
wakeupsConsideredUnlockIntentsUri,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -153,7 +162,7 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
secureSettings.getStringForUser(ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO,
|
||||
getCurrentUser()),
|
||||
faceAcquireInfoToTriggerBiometricFailOn,
|
||||
setOf<Int>())
|
||||
emptySet())
|
||||
}
|
||||
|
||||
if (selfChange || uris.contains(unlockIntentWhenBiometricEnrolledUri)) {
|
||||
@@ -162,7 +171,16 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
|
||||
getCurrentUser()),
|
||||
onUnlockIntentWhenBiometricEnrolled,
|
||||
setOf(BIOMETRIC_TYPE_NONE))
|
||||
setOf(BiometricType.NONE.intValue))
|
||||
}
|
||||
|
||||
if (selfChange || uris.contains(wakeupsConsideredUnlockIntentsUri)) {
|
||||
processStringArray(
|
||||
secureSettings.getStringForUser(
|
||||
ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
getCurrentUser()),
|
||||
wakeupsConsideredUnlockIntents,
|
||||
setOf(WAKE_REASON_UNFOLD_DEVICE))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,10 +199,12 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
out.clear()
|
||||
stringSetting?.let {
|
||||
for (code: String in stringSetting.split("|")) {
|
||||
try {
|
||||
out.add(code.toInt())
|
||||
} catch (e: NumberFormatException) {
|
||||
Log.e(TAG, "Passed an invalid setting=$code")
|
||||
if (code.isNotEmpty()) {
|
||||
try {
|
||||
out.add(code.toInt())
|
||||
} catch (e: NumberFormatException) {
|
||||
Log.e(TAG, "Passed an invalid setting=$code")
|
||||
}
|
||||
}
|
||||
}
|
||||
} ?: out.addAll(default)
|
||||
@@ -220,23 +240,31 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
return faceAcquireInfoToTriggerBiometricFailOn.contains(acquiredInfo)
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the PowerManager wake reason is considered an unlock intent and should use origin
|
||||
* [ActiveUnlockRequestOrigin.UNLOCK_INTENT] instead of [ActiveUnlockRequestOrigin.WAKE].
|
||||
*/
|
||||
fun isWakeupConsideredUnlockIntent(pmWakeReason: Int): Boolean {
|
||||
return wakeupsConsideredUnlockIntents.contains(pmWakeReason)
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to trigger active unlock based on where the request is coming from and
|
||||
* the current settings.
|
||||
*/
|
||||
fun shouldAllowActiveUnlockFromOrigin(requestOrigin: ACTIVE_UNLOCK_REQUEST_ORIGIN): Boolean {
|
||||
fun shouldAllowActiveUnlockFromOrigin(requestOrigin: ActiveUnlockRequestOrigin): Boolean {
|
||||
return when (requestOrigin) {
|
||||
ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE -> requestActiveUnlockOnWakeup
|
||||
ActiveUnlockRequestOrigin.WAKE -> requestActiveUnlockOnWakeup
|
||||
|
||||
ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT ->
|
||||
ActiveUnlockRequestOrigin.UNLOCK_INTENT ->
|
||||
requestActiveUnlockOnUnlockIntent || requestActiveUnlockOnWakeup ||
|
||||
(shouldRequestActiveUnlockOnUnlockIntentFromBiometricEnrollment())
|
||||
|
||||
ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL ->
|
||||
ActiveUnlockRequestOrigin.BIOMETRIC_FAIL ->
|
||||
requestActiveUnlockOnBioFail || requestActiveUnlockOnUnlockIntent ||
|
||||
requestActiveUnlockOnWakeup
|
||||
|
||||
ACTIVE_UNLOCK_REQUEST_ORIGIN.ASSISTANT -> isActiveUnlockEnabled()
|
||||
ActiveUnlockRequestOrigin.ASSISTANT -> isActiveUnlockEnabled()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,18 +280,18 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
val udfpsEnrolled = it.isUdfpsEnrolled
|
||||
|
||||
if (!anyFaceEnrolled && !anyFingerprintEnrolled) {
|
||||
return onUnlockIntentWhenBiometricEnrolled.contains(BIOMETRIC_TYPE_NONE)
|
||||
return onUnlockIntentWhenBiometricEnrolled.contains(BiometricType.NONE.intValue)
|
||||
}
|
||||
|
||||
if (!anyFaceEnrolled && anyFingerprintEnrolled) {
|
||||
return onUnlockIntentWhenBiometricEnrolled.contains(
|
||||
BIOMETRIC_TYPE_ANY_FINGERPRINT) ||
|
||||
BiometricType.ANY_FINGERPRINT.intValue) ||
|
||||
(udfpsEnrolled && onUnlockIntentWhenBiometricEnrolled.contains(
|
||||
BIOMETRIC_TYPE_UNDER_DISPLAY_FINGERPRINT))
|
||||
BiometricType.UNDER_DISPLAY_FINGERPRINT.intValue))
|
||||
}
|
||||
|
||||
if (!anyFingerprintEnrolled && anyFaceEnrolled) {
|
||||
return onUnlockIntentWhenBiometricEnrolled.contains(BIOMETRIC_TYPE_ANY_FACE)
|
||||
return onUnlockIntentWhenBiometricEnrolled.contains(BiometricType.ANY_FACE.intValue)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,11 +303,15 @@ class ActiveUnlockConfig @Inject constructor(
|
||||
pw.println(" requestActiveUnlockOnWakeup=$requestActiveUnlockOnWakeup")
|
||||
pw.println(" requestActiveUnlockOnUnlockIntent=$requestActiveUnlockOnUnlockIntent")
|
||||
pw.println(" requestActiveUnlockOnBioFail=$requestActiveUnlockOnBioFail")
|
||||
pw.println(" requestActiveUnlockOnUnlockIntentWhenBiometricEnrolled=" +
|
||||
"$onUnlockIntentWhenBiometricEnrolled")
|
||||
pw.println(" requestActiveUnlockOnUnlockIntentWhenBiometricEnrolled=${
|
||||
onUnlockIntentWhenBiometricEnrolled.map { BiometricType.values()[it] }
|
||||
}")
|
||||
pw.println(" requestActiveUnlockOnFaceError=$faceErrorsToTriggerBiometricFailOn")
|
||||
pw.println(" requestActiveUnlockOnFaceAcquireInfo=" +
|
||||
"$faceAcquireInfoToTriggerBiometricFailOn")
|
||||
pw.println(" activeUnlockWakeupsConsideredUnlockIntents=${
|
||||
wakeupsConsideredUnlockIntents.map { PowerManager.wakeReasonToString(it) }
|
||||
}")
|
||||
|
||||
pw.println("Current state:")
|
||||
keyguardUpdateMonitor?.let {
|
||||
|
||||
@@ -237,7 +237,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
|
||||
}
|
||||
if (mUpdateMonitor.isFaceEnrolled()) {
|
||||
mUpdateMonitor.requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT,
|
||||
"swipeUpOnBouncer");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1534,7 +1534,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
FACE_AUTH_UPDATED_ASSISTANT_VISIBILITY_CHANGED);
|
||||
if (mAssistantVisible) {
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.ASSISTANT,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.ASSISTANT,
|
||||
"assistant",
|
||||
false);
|
||||
}
|
||||
@@ -1664,7 +1664,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
@Override
|
||||
public void onAuthenticationFailed() {
|
||||
requestActiveUnlockDismissKeyguard(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
|
||||
"fingerprintFailure");
|
||||
handleFingerprintAuthFailed();
|
||||
}
|
||||
@@ -1733,7 +1733,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
: mPrimaryBouncerFullyShown ? "bouncer"
|
||||
: "udfpsFpDown";
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
|
||||
"faceFailure-" + reason);
|
||||
|
||||
handleFaceAuthFailed();
|
||||
@@ -1760,7 +1760,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
|
||||
if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceError(errMsgId)) {
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
|
||||
"faceError-" + errMsgId);
|
||||
}
|
||||
}
|
||||
@@ -1772,7 +1772,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceAcquireInfo(
|
||||
acquireInfo)) {
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
|
||||
"faceAcquireInfo-" + acquireInfo);
|
||||
}
|
||||
}
|
||||
@@ -1912,8 +1912,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason);
|
||||
updateFaceListeningState(BIOMETRIC_ACTION_UPDATE,
|
||||
FACE_AUTH_UPDATED_STARTED_WAKING_UP);
|
||||
requestActiveUnlock(ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE, "wakingUp - "
|
||||
+ PowerManager.wakeReasonToString(pmWakeReason));
|
||||
requestActiveUnlock(
|
||||
mActiveUnlockConfig.isWakeupConsideredUnlockIntent(pmWakeReason)
|
||||
? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT
|
||||
: ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE,
|
||||
"wakingUp - " + PowerManager.wakeReasonToString(pmWakeReason));
|
||||
} else {
|
||||
mLogger.logSkipUpdateFaceListeningOnWakeup(pmWakeReason);
|
||||
}
|
||||
@@ -2477,7 +2480,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
mAuthInterruptActive = active;
|
||||
updateFaceListeningState(BIOMETRIC_ACTION_UPDATE,
|
||||
FACE_AUTH_TRIGGERED_ON_REACH_GESTURE_ON_AOD);
|
||||
requestActiveUnlock(ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE, "onReach");
|
||||
requestActiveUnlock(ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE, "onReach");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2547,7 +2550,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
* Attempts to trigger active unlock from trust agent.
|
||||
*/
|
||||
private void requestActiveUnlock(
|
||||
@NonNull ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN requestOrigin,
|
||||
@NonNull ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin,
|
||||
String reason,
|
||||
boolean dismissKeyguard
|
||||
) {
|
||||
@@ -2558,7 +2561,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
|
||||
final boolean allowRequest =
|
||||
mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(requestOrigin);
|
||||
if (requestOrigin == ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE
|
||||
if (requestOrigin == ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE
|
||||
&& !allowRequest && mActiveUnlockConfig.isActiveUnlockEnabled()) {
|
||||
// instead of requesting the active unlock, initiate the unlock
|
||||
initiateActiveUnlock(reason);
|
||||
@@ -2577,7 +2580,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
* Only dismisses the keyguard under certain conditions.
|
||||
*/
|
||||
public void requestActiveUnlock(
|
||||
@NonNull ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN requestOrigin,
|
||||
@NonNull ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin,
|
||||
String extraReason
|
||||
) {
|
||||
final boolean canFaceBypass = isFaceEnrolled() && mKeyguardBypassController != null
|
||||
@@ -2594,7 +2597,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
* Attempts to trigger active unlock from trust agent with a request to dismiss the keyguard.
|
||||
*/
|
||||
public void requestActiveUnlockDismissKeyguard(
|
||||
@NonNull ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN requestOrigin,
|
||||
@NonNull ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin,
|
||||
String extraReason
|
||||
) {
|
||||
requestActiveUnlock(
|
||||
@@ -2611,7 +2614,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
updateFaceListeningState(BIOMETRIC_ACTION_START,
|
||||
FACE_AUTH_TRIGGERED_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN);
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT,
|
||||
"udfpsBouncer");
|
||||
}
|
||||
}
|
||||
@@ -3416,7 +3419,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
if (wasPrimaryBouncerFullyShown != mPrimaryBouncerFullyShown) {
|
||||
if (mPrimaryBouncerFullyShown) {
|
||||
requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT,
|
||||
"bouncerFullyShown");
|
||||
}
|
||||
for (int i = 0; i < mCallbacks.size(); i++) {
|
||||
|
||||
@@ -372,7 +372,7 @@ class KeyguardUpdateMonitorLogger @Inject constructor(
|
||||
}
|
||||
|
||||
fun logUserRequestedUnlock(
|
||||
requestOrigin: ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN,
|
||||
requestOrigin: ActiveUnlockConfig.ActiveUnlockRequestOrigin,
|
||||
reason: String?,
|
||||
dismissKeyguard: Boolean
|
||||
) {
|
||||
|
||||
@@ -4125,7 +4125,7 @@ public final class NotificationPanelViewController implements Dumpable {
|
||||
|
||||
if (didFaceAuthRun) {
|
||||
mUpdateMonitor.requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT,
|
||||
"lockScreenEmptySpaceTap");
|
||||
} else {
|
||||
mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_HINT,
|
||||
|
||||
@@ -76,7 +76,7 @@ class KeyguardLiftController @Inject constructor(
|
||||
FaceAuthApiRequestReason.PICK_UP_GESTURE_TRIGGERED
|
||||
)
|
||||
keyguardUpdateMonitor.requestActiveUnlock(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE,
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE,
|
||||
"KeyguardLiftController")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@ import android.database.ContentObserver
|
||||
import android.hardware.biometrics.BiometricFaceConstants
|
||||
import android.net.Uri
|
||||
import android.os.Handler
|
||||
import android.os.PowerManager
|
||||
import android.os.PowerManager.WAKE_REASON_BIOMETRIC
|
||||
import android.os.UserHandle
|
||||
import android.provider.Settings
|
||||
import androidx.test.filters.SmallTest
|
||||
@@ -48,6 +50,8 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
private val fakeFaceErrorsUri = Uri.Builder().appendPath("face-errors").build()
|
||||
private val fakeFaceAcquiredUri = Uri.Builder().appendPath("face-acquired").build()
|
||||
private val fakeUnlockIntentBioEnroll = Uri.Builder().appendPath("unlock-intent-bio").build()
|
||||
private val fakeWakeupsConsideredUnlockIntents =
|
||||
Uri.Builder().appendPath("wakeups-considered-unlock-intent").build()
|
||||
|
||||
@Mock
|
||||
private lateinit var secureSettings: SecureSettings
|
||||
@@ -82,6 +86,9 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
`when`(secureSettings.getUriFor(
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED))
|
||||
.thenReturn(fakeUnlockIntentBioEnroll)
|
||||
`when`(secureSettings.getUriFor(
|
||||
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS))
|
||||
.thenReturn(fakeWakeupsConsideredUnlockIntents)
|
||||
|
||||
activeUnlockConfig = ActiveUnlockConfig(
|
||||
handler,
|
||||
@@ -92,18 +99,18 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testRegsitersForSettingsChanges() {
|
||||
fun registersForSettingsChanges() {
|
||||
verifyRegisterSettingObserver()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnWakeupSettingChanged() {
|
||||
fun onWakeupSettingChanged() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN no active unlock settings enabled
|
||||
assertFalse(
|
||||
activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE)
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE)
|
||||
)
|
||||
|
||||
// WHEN unlock on wake is allowed
|
||||
@@ -114,26 +121,26 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
// THEN active unlock triggers allowed on: wake, unlock-intent, and biometric failure
|
||||
assertTrue(
|
||||
activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE)
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE)
|
||||
)
|
||||
assertTrue(
|
||||
activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT)
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT)
|
||||
)
|
||||
assertTrue(
|
||||
activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL)
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnUnlockIntentSettingChanged() {
|
||||
fun onUnlockIntentSettingChanged() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN no active unlock settings enabled
|
||||
assertFalse(
|
||||
activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT)
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT)
|
||||
)
|
||||
|
||||
// WHEN unlock on biometric failed is allowed
|
||||
@@ -143,15 +150,15 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
|
||||
// THEN active unlock triggers allowed on: biometric failure ONLY
|
||||
assertFalse(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE))
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnBioFailSettingChanged() {
|
||||
fun onBioFailSettingChanged() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN no active unlock settings enabled and triggering unlock intent on biometric
|
||||
@@ -161,7 +168,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
0)).thenReturn("")
|
||||
updateSetting(fakeUnlockIntentBioEnroll)
|
||||
assertFalse(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
|
||||
// WHEN unlock on biometric failed is allowed
|
||||
`when`(secureSettings.getIntForUser(Settings.Secure.ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL,
|
||||
@@ -170,15 +177,15 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
|
||||
// THEN active unlock triggers allowed on: biometric failure ONLY
|
||||
assertFalse(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.WAKE))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE))
|
||||
assertFalse(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFaceErrorSettingsChanged() {
|
||||
fun faceErrorSettingsChanged() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN unlock on biometric fail
|
||||
@@ -200,7 +207,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFaceAcquiredSettingsChanged() {
|
||||
fun faceAcquiredSettingsChanged() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN unlock on biometric fail
|
||||
@@ -228,7 +235,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testTriggerOnUnlockIntentWhenBiometricEnrolledNone() {
|
||||
fun triggerOnUnlockIntentWhenBiometricEnrolledNone() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN unlock on biometric fail
|
||||
@@ -244,16 +251,16 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
// WHEN unlock intent is allowed when NO biometrics are enrolled (0)
|
||||
`when`(secureSettings.getStringForUser(
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
|
||||
0)).thenReturn("${ActiveUnlockConfig.BIOMETRIC_TYPE_NONE}")
|
||||
0)).thenReturn("${ActiveUnlockConfig.BiometricType.NONE.intValue}")
|
||||
updateSetting(fakeUnlockIntentBioEnroll)
|
||||
|
||||
// THEN active unlock triggers allowed on unlock intent
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testTriggerOnUnlockIntentWhenBiometricEnrolledFingerprintOrFaceOnly() {
|
||||
fun triggerOnUnlockIntentWhenBiometricEnrolledFingerprintOrFaceOnly() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN unlock on biometric fail
|
||||
@@ -263,7 +270,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
|
||||
// GIVEN fingerprint and face are both enrolled
|
||||
activeUnlockConfig.keyguardUpdateMonitor = keyguardUpdateMonitor
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled()).thenReturn(true)
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled).thenReturn(true)
|
||||
`when`(keyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(0)).thenReturn(true)
|
||||
|
||||
// WHEN unlock intent is allowed when ONLY fingerprint is enrolled or NO biometircs
|
||||
@@ -271,29 +278,99 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
`when`(secureSettings.getStringForUser(
|
||||
Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED,
|
||||
0)).thenReturn(
|
||||
"${ActiveUnlockConfig.BIOMETRIC_TYPE_ANY_FACE}" +
|
||||
"|${ActiveUnlockConfig.BIOMETRIC_TYPE_ANY_FINGERPRINT}")
|
||||
"${ActiveUnlockConfig.BiometricType.ANY_FACE.intValue}" +
|
||||
"|${ActiveUnlockConfig.BiometricType.ANY_FINGERPRINT.intValue}")
|
||||
updateSetting(fakeUnlockIntentBioEnroll)
|
||||
|
||||
// THEN active unlock triggers NOT allowed on unlock intent
|
||||
assertFalse(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
|
||||
// WHEN fingerprint ONLY enrolled
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled()).thenReturn(false)
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled).thenReturn(false)
|
||||
`when`(keyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(0)).thenReturn(true)
|
||||
|
||||
// THEN active unlock triggers allowed on unlock intent
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
|
||||
// WHEN face ONLY enrolled
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled()).thenReturn(true)
|
||||
`when`(keyguardUpdateMonitor.isFaceEnrolled).thenReturn(true)
|
||||
`when`(keyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(0)).thenReturn(false)
|
||||
|
||||
// THEN active unlock triggers allowed on unlock intent
|
||||
assertTrue(activeUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isWakeupConsideredUnlockIntent_singleValue() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN lift is considered an unlock intent
|
||||
`when`(secureSettings.getStringForUser(
|
||||
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
0)).thenReturn(PowerManager.WAKE_REASON_LIFT.toString())
|
||||
updateSetting(fakeWakeupsConsideredUnlockIntents)
|
||||
|
||||
// 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.isWakeupConsideredUnlockIntent(wakeReason))
|
||||
} else {
|
||||
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isWakeupConsideredUnlockIntent_multiValue() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN lift and tap are considered an unlock intent
|
||||
`when`(secureSettings.getStringForUser(
|
||||
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
0)).thenReturn(
|
||||
PowerManager.WAKE_REASON_LIFT.toString() +
|
||||
"|" +
|
||||
PowerManager.WAKE_REASON_TAP.toString()
|
||||
)
|
||||
updateSetting(fakeWakeupsConsideredUnlockIntents)
|
||||
|
||||
// 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.isWakeupConsideredUnlockIntent(wakeReason))
|
||||
} else {
|
||||
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
|
||||
fun isWakeupConsideredUnlockIntent_emptyValues() {
|
||||
verifyRegisterSettingObserver()
|
||||
|
||||
// GIVEN lift and tap are considered an unlock intent
|
||||
`when`(secureSettings.getStringForUser(
|
||||
Settings.Secure.ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS,
|
||||
0)).thenReturn(" ")
|
||||
updateSetting(fakeWakeupsConsideredUnlockIntents)
|
||||
|
||||
// THEN no wake up gestures are considered an unlock intent
|
||||
for (wakeReason in 0..WAKE_REASON_BIOMETRIC) {
|
||||
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason))
|
||||
}
|
||||
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(
|
||||
PowerManager.WAKE_REASON_LIFT))
|
||||
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(PowerManager.WAKE_REASON_TAP))
|
||||
assertFalse(activeUnlockConfig.isWakeupConsideredUnlockIntent(
|
||||
PowerManager.WAKE_REASON_UNFOLD_DEVICE))
|
||||
}
|
||||
|
||||
private fun updateSetting(uri: Uri) {
|
||||
@@ -312,6 +389,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
|
||||
verifyRegisterSettingObserver(fakeFaceErrorsUri)
|
||||
verifyRegisterSettingObserver(fakeFaceAcquiredUri)
|
||||
verifyRegisterSettingObserver(fakeUnlockIntentBioEnroll)
|
||||
verifyRegisterSettingObserver(fakeWakeupsConsideredUnlockIntents)
|
||||
}
|
||||
|
||||
private fun verifyRegisterSettingObserver(uri: Uri) {
|
||||
|
||||
@@ -2183,7 +2183,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
||||
|
||||
// GIVEN active unlock triggers on biometric failures
|
||||
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN fingerprint fails
|
||||
@@ -2206,7 +2206,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
||||
|
||||
// GIVEN active unlock triggers on biometric failures
|
||||
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN face fails & bypass is not allowed
|
||||
@@ -2230,7 +2230,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
||||
|
||||
// GIVEN active unlock triggers on biometric failures
|
||||
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN face fails & bypass is not allowed
|
||||
@@ -2252,7 +2252,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
||||
|
||||
// GIVEN active unlock triggers on biometric failures
|
||||
when(mActiveUnlockConfig.shouldAllowActiveUnlockFromOrigin(
|
||||
ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.BIOMETRIC_FAIL))
|
||||
ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN face fails & on the bouncer
|
||||
|
||||
Reference in New Issue
Block a user