Loading packages/SystemUI/res/values/flags.xml +2 −0 Original line number Diff line number Diff line Loading @@ -38,4 +38,6 @@ protected. --> <bool name="flag_battery_shield_icon">false</bool> <!-- Whether face auth will immediately stop when the display state is OFF --> <bool name="flag_stop_face_auth_on_display_off">false</bool> </resources> packages/SystemUI/src/com/android/keyguard/FaceAuthReason.kt +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.keyguard.InternalFaceAuthReasons.AUTH_REQUEST_DURING_CANCELLA import com.android.keyguard.InternalFaceAuthReasons.BIOMETRIC_ENABLED import com.android.keyguard.InternalFaceAuthReasons.CAMERA_LAUNCHED import com.android.keyguard.InternalFaceAuthReasons.DEVICE_WOKEN_UP_ON_REACH_GESTURE import com.android.keyguard.InternalFaceAuthReasons.DISPLAY_OFF import com.android.keyguard.InternalFaceAuthReasons.DREAM_STARTED import com.android.keyguard.InternalFaceAuthReasons.DREAM_STOPPED import com.android.keyguard.InternalFaceAuthReasons.ENROLLMENTS_CHANGED Loading Loading @@ -131,6 +132,7 @@ private object InternalFaceAuthReasons { const val NON_STRONG_BIOMETRIC_ALLOWED_CHANGED = "Face auth stopped because non strong biometric allowed changed" const val POSTURE_CHANGED = "Face auth started/stopped due to device posture changed." const val DISPLAY_OFF = "Face auth stopped due to display state OFF." } /** Loading Loading @@ -221,7 +223,8 @@ constructor(private val id: Int, val reason: String, var extraInfo: Int = 0) : FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED(1255, STRONG_AUTH_ALLOWED_CHANGED), @UiEvent(doc = NON_STRONG_BIOMETRIC_ALLOWED_CHANGED) FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED(1256, NON_STRONG_BIOMETRIC_ALLOWED_CHANGED), @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION); @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION), @UiEvent(doc = DISPLAY_OFF) FACE_AUTH_DISPLAY_OFF(1461, DISPLAY_OFF); override fun getId(): Int = this.id Loading packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt +7 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ data class KeyguardFaceListenModel( override var userId: Int = 0, override var listening: Boolean = false, // keep sorted var allowedDisplayState: Boolean = false, var alternateBouncerShowing: Boolean = false, var authInterruptActive: Boolean = false, var biometricSettingEnabledForUser: Boolean = false, Loading Loading @@ -57,6 +58,8 @@ data class KeyguardFaceListenModel( userId.toString(), listening.toString(), // keep sorted allowedDisplayState.toString(), alternateBouncerShowing.toString(), authInterruptActive.toString(), biometricSettingEnabledForUser.toString(), bouncerFullyShown.toString(), Loading @@ -74,7 +77,6 @@ data class KeyguardFaceListenModel( supportsDetect.toString(), switchingUser.toString(), systemUser.toString(), alternateBouncerShowing.toString(), udfpsFingerDown.toString(), userNotTrustedOrDetectionIsNeeded.toString(), ) Loading @@ -96,7 +98,9 @@ data class KeyguardFaceListenModel( userId = model.userId listening = model.listening // keep sorted allowedDisplayState = model.allowedDisplayState alternateBouncerShowing = model.alternateBouncerShowing authInterruptActive = model.authInterruptActive biometricSettingEnabledForUser = model.biometricSettingEnabledForUser bouncerFullyShown = model.bouncerFullyShown faceAndFpNotAuthenticated = model.faceAndFpNotAuthenticated Loading @@ -105,7 +109,6 @@ data class KeyguardFaceListenModel( faceLockedOut = model.faceLockedOut goingToSleep = model.goingToSleep keyguardAwake = model.keyguardAwake goingToSleep = model.goingToSleep keyguardGoingAway = model.keyguardGoingAway listeningForFaceAssistant = model.listeningForFaceAssistant occludingAppRequestingFaceAuth = model.occludingAppRequestingFaceAuth Loading Loading @@ -140,6 +143,8 @@ data class KeyguardFaceListenModel( "userId", "listening", // keep sorted "allowedDisplayState", "alternateBouncerShowing", "authInterruptActive", "biometricSettingEnabledForUser", "bouncerFullyShown", Loading @@ -157,7 +162,6 @@ data class KeyguardFaceListenModel( "supportsDetect", "switchingUser", "systemUser", "udfpsBouncerShowing", "udfpsFingerDown", "userNotTrustedOrDetectionIsNeeded", ) Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +35 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STR import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; import static com.android.keyguard.FaceAuthReasonKt.apiRequestReasonToUiEvent; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_DISPLAY_OFF; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_DREAM_STARTED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED; Loading Loading @@ -135,6 +136,7 @@ import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Display; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -175,6 +177,7 @@ import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.WeatherData; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; Loading Loading @@ -335,6 +338,25 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } }; private final DisplayTracker.Callback mDisplayCallback = new DisplayTracker.Callback() { @Override public void onDisplayChanged(int displayId) { if (displayId != Display.DEFAULT_DISPLAY) { return; } if (mDisplayTracker.getDisplay(mDisplayTracker.getDefaultDisplayId()).getState() == Display.STATE_OFF) { mAllowedDisplayStateForFaceAuth = false; updateFaceListeningState( BIOMETRIC_ACTION_STOP, FACE_AUTH_DISPLAY_OFF ); } else { mAllowedDisplayStateForFaceAuth = true; } } }; private final FaceWakeUpTriggersConfig mFaceWakeUpTriggersConfig; HashMap<Integer, SimData> mSimDatas = new HashMap<>(); Loading @@ -355,6 +377,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private boolean mOccludingAppRequestingFp; private boolean mOccludingAppRequestingFace; private boolean mSecureCameraLaunched; private boolean mAllowedDisplayStateForFaceAuth = true; @VisibleForTesting protected boolean mTelephonyCapable; private boolean mAllowFingerprintOnCurrentOccludingActivity; Loading Loading @@ -403,6 +426,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private KeyguardFaceAuthInteractor mFaceAuthInteractor; private final TaskStackChangeListeners mTaskStackChangeListeners; private final IActivityTaskManager mActivityTaskManager; private final DisplayTracker mDisplayTracker; private final LockPatternUtils mLockPatternUtils; @VisibleForTesting @DevicePostureInt Loading Loading @@ -2187,6 +2211,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp"); Assert.isMainThread(); mAllowedDisplayStateForFaceAuth = true; updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE); if (mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(pmWakeReason)) { FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason); Loading Loading @@ -2342,7 +2367,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider, FeatureFlags featureFlags, TaskStackChangeListeners taskStackChangeListeners, IActivityTaskManager activityTaskManagerService) { IActivityTaskManager activityTaskManagerService, DisplayTracker displayTracker) { mContext = context; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; Loading Loading @@ -2390,6 +2416,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab .collect(Collectors.toSet()); mTaskStackChangeListeners = taskStackChangeListeners; mActivityTaskManager = activityTaskManagerService; mDisplayTracker = displayTracker; if (mFeatureFlags.isEnabled(Flags.STOP_FACE_AUTH_ON_DISPLAY_OFF)) { mDisplayTracker.addDisplayChangeCallback(mDisplayCallback, mainExecutor); } mHandler = new Handler(mainLooper) { @Override Loading Loading @@ -3199,7 +3229,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab && (!mSecureCameraLaunched || mAlternateBouncerShowing) && faceAndFpNotAuthenticated && !mGoingToSleep && isPostureAllowedForFaceAuth; && isPostureAllowedForFaceAuth && mAllowedDisplayStateForFaceAuth; // Aggregate relevant fields for debug logging. logListenerModelData( Loading @@ -3207,6 +3238,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab System.currentTimeMillis(), user, shouldListen, mAllowedDisplayStateForFaceAuth, mAlternateBouncerShowing, mAuthInterruptActive, biometricEnabledForUser, Loading Loading @@ -4400,6 +4432,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mLockPatternUtils.unregisterStrongAuthTracker(mStrongAuthTracker); mTrustManager.unregisterTrustListener(this); mDisplayTracker.removeCallback(mDisplayCallback); mHandler.removeCallbacksAndMessages(null); } Loading packages/SystemUI/src/com/android/systemui/flags/Flags.kt +5 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,11 @@ object Flags { teamfood = true ) /** Stop running face auth when the display state changes to OFF. */ // TODO(b/294221702): Tracking bug. @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(245, R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off") // 300 - power menu // TODO(b/254512600): Tracking Bug @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite") Loading Loading
packages/SystemUI/res/values/flags.xml +2 −0 Original line number Diff line number Diff line Loading @@ -38,4 +38,6 @@ protected. --> <bool name="flag_battery_shield_icon">false</bool> <!-- Whether face auth will immediately stop when the display state is OFF --> <bool name="flag_stop_face_auth_on_display_off">false</bool> </resources>
packages/SystemUI/src/com/android/keyguard/FaceAuthReason.kt +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.keyguard.InternalFaceAuthReasons.AUTH_REQUEST_DURING_CANCELLA import com.android.keyguard.InternalFaceAuthReasons.BIOMETRIC_ENABLED import com.android.keyguard.InternalFaceAuthReasons.CAMERA_LAUNCHED import com.android.keyguard.InternalFaceAuthReasons.DEVICE_WOKEN_UP_ON_REACH_GESTURE import com.android.keyguard.InternalFaceAuthReasons.DISPLAY_OFF import com.android.keyguard.InternalFaceAuthReasons.DREAM_STARTED import com.android.keyguard.InternalFaceAuthReasons.DREAM_STOPPED import com.android.keyguard.InternalFaceAuthReasons.ENROLLMENTS_CHANGED Loading Loading @@ -131,6 +132,7 @@ private object InternalFaceAuthReasons { const val NON_STRONG_BIOMETRIC_ALLOWED_CHANGED = "Face auth stopped because non strong biometric allowed changed" const val POSTURE_CHANGED = "Face auth started/stopped due to device posture changed." const val DISPLAY_OFF = "Face auth stopped due to display state OFF." } /** Loading Loading @@ -221,7 +223,8 @@ constructor(private val id: Int, val reason: String, var extraInfo: Int = 0) : FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED(1255, STRONG_AUTH_ALLOWED_CHANGED), @UiEvent(doc = NON_STRONG_BIOMETRIC_ALLOWED_CHANGED) FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED(1256, NON_STRONG_BIOMETRIC_ALLOWED_CHANGED), @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION); @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION), @UiEvent(doc = DISPLAY_OFF) FACE_AUTH_DISPLAY_OFF(1461, DISPLAY_OFF); override fun getId(): Int = this.id Loading
packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt +7 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ data class KeyguardFaceListenModel( override var userId: Int = 0, override var listening: Boolean = false, // keep sorted var allowedDisplayState: Boolean = false, var alternateBouncerShowing: Boolean = false, var authInterruptActive: Boolean = false, var biometricSettingEnabledForUser: Boolean = false, Loading Loading @@ -57,6 +58,8 @@ data class KeyguardFaceListenModel( userId.toString(), listening.toString(), // keep sorted allowedDisplayState.toString(), alternateBouncerShowing.toString(), authInterruptActive.toString(), biometricSettingEnabledForUser.toString(), bouncerFullyShown.toString(), Loading @@ -74,7 +77,6 @@ data class KeyguardFaceListenModel( supportsDetect.toString(), switchingUser.toString(), systemUser.toString(), alternateBouncerShowing.toString(), udfpsFingerDown.toString(), userNotTrustedOrDetectionIsNeeded.toString(), ) Loading @@ -96,7 +98,9 @@ data class KeyguardFaceListenModel( userId = model.userId listening = model.listening // keep sorted allowedDisplayState = model.allowedDisplayState alternateBouncerShowing = model.alternateBouncerShowing authInterruptActive = model.authInterruptActive biometricSettingEnabledForUser = model.biometricSettingEnabledForUser bouncerFullyShown = model.bouncerFullyShown faceAndFpNotAuthenticated = model.faceAndFpNotAuthenticated Loading @@ -105,7 +109,6 @@ data class KeyguardFaceListenModel( faceLockedOut = model.faceLockedOut goingToSleep = model.goingToSleep keyguardAwake = model.keyguardAwake goingToSleep = model.goingToSleep keyguardGoingAway = model.keyguardGoingAway listeningForFaceAssistant = model.listeningForFaceAssistant occludingAppRequestingFaceAuth = model.occludingAppRequestingFaceAuth Loading Loading @@ -140,6 +143,8 @@ data class KeyguardFaceListenModel( "userId", "listening", // keep sorted "allowedDisplayState", "alternateBouncerShowing", "authInterruptActive", "biometricSettingEnabledForUser", "bouncerFullyShown", Loading @@ -157,7 +162,6 @@ data class KeyguardFaceListenModel( "supportsDetect", "switchingUser", "systemUser", "udfpsBouncerShowing", "udfpsFingerDown", "userNotTrustedOrDetectionIsNeeded", ) Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +35 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STR import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; import static com.android.keyguard.FaceAuthReasonKt.apiRequestReasonToUiEvent; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_DISPLAY_OFF; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_DREAM_STARTED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED; Loading Loading @@ -135,6 +136,7 @@ import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Display; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -175,6 +177,7 @@ import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.WeatherData; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; Loading Loading @@ -335,6 +338,25 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } }; private final DisplayTracker.Callback mDisplayCallback = new DisplayTracker.Callback() { @Override public void onDisplayChanged(int displayId) { if (displayId != Display.DEFAULT_DISPLAY) { return; } if (mDisplayTracker.getDisplay(mDisplayTracker.getDefaultDisplayId()).getState() == Display.STATE_OFF) { mAllowedDisplayStateForFaceAuth = false; updateFaceListeningState( BIOMETRIC_ACTION_STOP, FACE_AUTH_DISPLAY_OFF ); } else { mAllowedDisplayStateForFaceAuth = true; } } }; private final FaceWakeUpTriggersConfig mFaceWakeUpTriggersConfig; HashMap<Integer, SimData> mSimDatas = new HashMap<>(); Loading @@ -355,6 +377,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private boolean mOccludingAppRequestingFp; private boolean mOccludingAppRequestingFace; private boolean mSecureCameraLaunched; private boolean mAllowedDisplayStateForFaceAuth = true; @VisibleForTesting protected boolean mTelephonyCapable; private boolean mAllowFingerprintOnCurrentOccludingActivity; Loading Loading @@ -403,6 +426,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private KeyguardFaceAuthInteractor mFaceAuthInteractor; private final TaskStackChangeListeners mTaskStackChangeListeners; private final IActivityTaskManager mActivityTaskManager; private final DisplayTracker mDisplayTracker; private final LockPatternUtils mLockPatternUtils; @VisibleForTesting @DevicePostureInt Loading Loading @@ -2187,6 +2211,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp"); Assert.isMainThread(); mAllowedDisplayStateForFaceAuth = true; updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE); if (mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(pmWakeReason)) { FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason); Loading Loading @@ -2342,7 +2367,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider, FeatureFlags featureFlags, TaskStackChangeListeners taskStackChangeListeners, IActivityTaskManager activityTaskManagerService) { IActivityTaskManager activityTaskManagerService, DisplayTracker displayTracker) { mContext = context; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; Loading Loading @@ -2390,6 +2416,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab .collect(Collectors.toSet()); mTaskStackChangeListeners = taskStackChangeListeners; mActivityTaskManager = activityTaskManagerService; mDisplayTracker = displayTracker; if (mFeatureFlags.isEnabled(Flags.STOP_FACE_AUTH_ON_DISPLAY_OFF)) { mDisplayTracker.addDisplayChangeCallback(mDisplayCallback, mainExecutor); } mHandler = new Handler(mainLooper) { @Override Loading Loading @@ -3199,7 +3229,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab && (!mSecureCameraLaunched || mAlternateBouncerShowing) && faceAndFpNotAuthenticated && !mGoingToSleep && isPostureAllowedForFaceAuth; && isPostureAllowedForFaceAuth && mAllowedDisplayStateForFaceAuth; // Aggregate relevant fields for debug logging. logListenerModelData( Loading @@ -3207,6 +3238,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab System.currentTimeMillis(), user, shouldListen, mAllowedDisplayStateForFaceAuth, mAlternateBouncerShowing, mAuthInterruptActive, biometricEnabledForUser, Loading Loading @@ -4400,6 +4432,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mLockPatternUtils.unregisterStrongAuthTracker(mStrongAuthTracker); mTrustManager.unregisterTrustListener(this); mDisplayTracker.removeCallback(mDisplayCallback); mHandler.removeCallbacksAndMessages(null); } Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.kt +5 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,11 @@ object Flags { teamfood = true ) /** Stop running face auth when the display state changes to OFF. */ // TODO(b/294221702): Tracking bug. @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(245, R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off") // 300 - power menu // TODO(b/254512600): Tracking Bug @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite") Loading