Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +33 −17 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STARTED_WAK import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_USER_SWITCHING; import static com.android.systemui.DejankUtils.whitelistIpcs; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN; import android.annotation.AnyThread; Loading Loading @@ -1862,6 +1863,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab updateFaceListeningState(BIOMETRIC_ACTION_STOP, FACE_AUTH_UPDATED_POSTURE_CHANGED); } if (mPostureState == DEVICE_POSTURE_OPENED) { mLogger.d("Posture changed to open - attempting to request active unlock"); requestActiveUnlockFromWakeReason(PowerManager.WAKE_REASON_UNFOLD_DEVICE, false); } } }; Loading Loading @@ -1988,26 +1994,10 @@ 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); final ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin = mActiveUnlockConfig.isWakeupConsideredUnlockIntent(pmWakeReason) ? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT : ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE; final String reason = "wakingUp - " + PowerManager.wakeReasonToString(pmWakeReason); if (mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(pmWakeReason)) { requestActiveUnlockDismissKeyguard( requestOrigin, reason ); } else { requestActiveUnlock( requestOrigin, reason ); } } else { mLogger.logSkipUpdateFaceListeningOnWakeup(pmWakeReason); } requestActiveUnlockFromWakeReason(pmWakeReason, true); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); Loading Loading @@ -2640,6 +2630,32 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } private void requestActiveUnlockFromWakeReason(@PowerManager.WakeReason int wakeReason, boolean powerManagerWakeup) { if (!mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(wakeReason)) { mLogger.logActiveUnlockRequestSkippedForWakeReasonDueToFaceConfig(wakeReason); return; } final ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin = mActiveUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason) ? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT : ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE; final String reason = "wakingUp - " + PowerManager.wakeReasonToString(wakeReason) + " powerManagerWakeup=" + powerManagerWakeup; if (mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason)) { requestActiveUnlockDismissKeyguard( requestOrigin, reason ); } else { requestActiveUnlock( requestOrigin, reason ); } } /** * Attempts to trigger active unlock from trust agent. */ Loading packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt +10 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,16 @@ constructor(@KeyguardUpdateMonitorLog private val logBuffer: LogBuffer) { ) } fun logActiveUnlockRequestSkippedForWakeReasonDueToFaceConfig(wakeReason: Int) { logBuffer.log( "ActiveUnlock", DEBUG, { int1 = wakeReason }, { "Skip requesting active unlock from wake reason that doesn't trigger face auth" + " reason=${PowerManager.wakeReasonToString(int1)}" } ) } fun logAuthInterruptDetected(active: Boolean) { logBuffer.log(TAG, DEBUG, { bool1 = active }, { "onAuthInterruptDetected($bool1)" }) } Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -2432,6 +2432,57 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { eq(false)); } @Test public void unfoldFromPostureChange_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 posture changes to unfold deviceInPostureStateOpened(); mTestableLooper.processAllMessages(); // THEN request unlock with a keyguard dismissal verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()), eq(true)); } @Test public void unfoldFromPostureChange_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 posture changes to unfold deviceInPostureStateOpened(); mTestableLooper.processAllMessages(); // THEN request unlock WITHOUT a keyguard dismissal verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()), eq(false)); } @Test public void detectFingerprint_onTemporaryLockoutReset_authenticateFingerprint() { ArgumentCaptor<FingerprintManager.LockoutResetCallback> fpLockoutResetCallbackCaptor = Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +33 −17 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STARTED_WAK import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED; import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_USER_SWITCHING; import static com.android.systemui.DejankUtils.whitelistIpcs; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN; import android.annotation.AnyThread; Loading Loading @@ -1862,6 +1863,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab updateFaceListeningState(BIOMETRIC_ACTION_STOP, FACE_AUTH_UPDATED_POSTURE_CHANGED); } if (mPostureState == DEVICE_POSTURE_OPENED) { mLogger.d("Posture changed to open - attempting to request active unlock"); requestActiveUnlockFromWakeReason(PowerManager.WAKE_REASON_UNFOLD_DEVICE, false); } } }; Loading Loading @@ -1988,26 +1994,10 @@ 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); final ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin = mActiveUnlockConfig.isWakeupConsideredUnlockIntent(pmWakeReason) ? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT : ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE; final String reason = "wakingUp - " + PowerManager.wakeReasonToString(pmWakeReason); if (mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(pmWakeReason)) { requestActiveUnlockDismissKeyguard( requestOrigin, reason ); } else { requestActiveUnlock( requestOrigin, reason ); } } else { mLogger.logSkipUpdateFaceListeningOnWakeup(pmWakeReason); } requestActiveUnlockFromWakeReason(pmWakeReason, true); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); Loading Loading @@ -2640,6 +2630,32 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } private void requestActiveUnlockFromWakeReason(@PowerManager.WakeReason int wakeReason, boolean powerManagerWakeup) { if (!mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(wakeReason)) { mLogger.logActiveUnlockRequestSkippedForWakeReasonDueToFaceConfig(wakeReason); return; } final ActiveUnlockConfig.ActiveUnlockRequestOrigin requestOrigin = mActiveUnlockConfig.isWakeupConsideredUnlockIntent(wakeReason) ? ActiveUnlockConfig.ActiveUnlockRequestOrigin.UNLOCK_INTENT : ActiveUnlockConfig.ActiveUnlockRequestOrigin.WAKE; final String reason = "wakingUp - " + PowerManager.wakeReasonToString(wakeReason) + " powerManagerWakeup=" + powerManagerWakeup; if (mActiveUnlockConfig.shouldWakeupForceDismissKeyguard(wakeReason)) { requestActiveUnlockDismissKeyguard( requestOrigin, reason ); } else { requestActiveUnlock( requestOrigin, reason ); } } /** * Attempts to trigger active unlock from trust agent. */ Loading
packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt +10 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,16 @@ constructor(@KeyguardUpdateMonitorLog private val logBuffer: LogBuffer) { ) } fun logActiveUnlockRequestSkippedForWakeReasonDueToFaceConfig(wakeReason: Int) { logBuffer.log( "ActiveUnlock", DEBUG, { int1 = wakeReason }, { "Skip requesting active unlock from wake reason that doesn't trigger face auth" + " reason=${PowerManager.wakeReasonToString(int1)}" } ) } fun logAuthInterruptDetected(active: Boolean) { logBuffer.log(TAG, DEBUG, { bool1 = active }, { "onAuthInterruptDetected($bool1)" }) } Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -2432,6 +2432,57 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { eq(false)); } @Test public void unfoldFromPostureChange_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 posture changes to unfold deviceInPostureStateOpened(); mTestableLooper.processAllMessages(); // THEN request unlock with a keyguard dismissal verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()), eq(true)); } @Test public void unfoldFromPostureChange_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 posture changes to unfold deviceInPostureStateOpened(); mTestableLooper.processAllMessages(); // THEN request unlock WITHOUT a keyguard dismissal verify(mTrustManager).reportUserRequestedUnlock(eq(KeyguardUpdateMonitor.getCurrentUser()), eq(false)); } @Test public void detectFingerprint_onTemporaryLockoutReset_authenticateFingerprint() { ArgumentCaptor<FingerprintManager.LockoutResetCallback> fpLockoutResetCallbackCaptor = Loading