Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +12 −2 Original line number Diff line number Diff line Loading @@ -155,6 +155,8 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpsysTableLogger; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.domain.interactor.FaceAuthenticationListener; import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor; import com.android.systemui.keyguard.shared.constants.TrustAgentUiEvent; Loading Loading @@ -380,6 +382,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final ActiveUnlockConfig mActiveUnlockConfig; private final IDreamManager mDreamManager; private final TelephonyManager mTelephonyManager; private final FeatureFlags mFeatureFlags; @Nullable private final FingerprintManager mFpm; @Nullable Loading Loading @@ -2288,7 +2291,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Nullable BiometricManager biometricManager, FaceWakeUpTriggersConfig faceWakeUpTriggersConfig, DevicePostureController devicePostureController, Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider) { Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider, FeatureFlags featureFlags) { mContext = context; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; Loading Loading @@ -2320,6 +2324,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mPackageManager = packageManager; mFpm = fingerprintManager; mFaceManager = faceManager; mFeatureFlags = featureFlags; mActiveUnlockConfig.setKeyguardUpdateMonitor(this); mFaceAcquiredInfoIgnoreList = Arrays.stream( mContext.getResources().getIntArray( Loading Loading @@ -3011,7 +3016,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab || shouldListenForFingerprintAssistant || (mKeyguardOccluded && mIsDreaming) || (mKeyguardOccluded && userDoesNotHaveTrust && mKeyguardShowing && (mOccludingAppRequestingFp || isUdfps || mAlternateBouncerShowing)); && (mOccludingAppRequestingFp || isUdfps || mAlternateBouncerShowing || mFeatureFlags.isEnabled(Flags.FP_LISTEN_OCCLUDING_APPS) ) ); // Only listen if this KeyguardUpdateMonitor belongs to the system user. There is an // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware. Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_CANCELL import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.HAL_POWER_PRESS_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser; import static com.android.systemui.flags.Flags.FP_LISTEN_OCCLUDING_APPS; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_CLOSED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN; Loading Loading @@ -134,6 +135,7 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; Loading Loading @@ -277,6 +279,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { private final Executor mBackgroundExecutor = Runnable::run; private final Executor mMainExecutor = Runnable::run; private TestableLooper mTestableLooper; private FakeFeatureFlags mFeatureFlags; private Handler mHandler; private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor; private MockitoSession mMockitoSession; Loading Loading @@ -325,6 +328,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mTestableLooper = TestableLooper.get(this); allowTestableLooperAsMainThread(); mFeatureFlags = new FakeFeatureFlags(); mFeatureFlags.set(FP_LISTEN_OCCLUDING_APPS, false); when(mSecureSettings.getUriFor(anyString())).thenReturn(mURI); Loading Loading @@ -1429,6 +1434,23 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isEqualTo(true); } @Test public void testOccludingAppFingerprintListeningState_featureFlagEnabled() { mFeatureFlags.set(FP_LISTEN_OCCLUDING_APPS, true); // GIVEN keyguard isn't visible (app occluding) mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON); mKeyguardUpdateMonitor.setKeyguardShowing(true, true); when(mStrongAuthTracker.hasUserAuthenticatedSinceBoot()).thenReturn(true); // THEN we SHOULD listen for non-UDFPS fingerprint assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(false)).isEqualTo(true); // THEN we should listen for udfps (hiding of mechanism to actually auth is // controlled by UdfpsKeyguardViewController) assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isEqualTo(true); } @Test public void testOccludingAppFingerprintListeningState() { // GIVEN keyguard isn't visible (app occluding) Loading Loading @@ -3126,7 +3148,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mDreamManager, mDevicePolicyManager, mSensorPrivacyManager, mTelephonyManager, mPackageManager, mFaceManager, mFingerprintManager, mBiometricManager, mFaceWakeUpTriggersConfig, mDevicePostureController, Optional.of(mInteractiveToAuthProvider)); Optional.of(mInteractiveToAuthProvider), mFeatureFlags); setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker); } Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +12 −2 Original line number Diff line number Diff line Loading @@ -155,6 +155,8 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpsysTableLogger; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.domain.interactor.FaceAuthenticationListener; import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor; import com.android.systemui.keyguard.shared.constants.TrustAgentUiEvent; Loading Loading @@ -380,6 +382,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final ActiveUnlockConfig mActiveUnlockConfig; private final IDreamManager mDreamManager; private final TelephonyManager mTelephonyManager; private final FeatureFlags mFeatureFlags; @Nullable private final FingerprintManager mFpm; @Nullable Loading Loading @@ -2288,7 +2291,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Nullable BiometricManager biometricManager, FaceWakeUpTriggersConfig faceWakeUpTriggersConfig, DevicePostureController devicePostureController, Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider) { Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider, FeatureFlags featureFlags) { mContext = context; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; Loading Loading @@ -2320,6 +2324,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mPackageManager = packageManager; mFpm = fingerprintManager; mFaceManager = faceManager; mFeatureFlags = featureFlags; mActiveUnlockConfig.setKeyguardUpdateMonitor(this); mFaceAcquiredInfoIgnoreList = Arrays.stream( mContext.getResources().getIntArray( Loading Loading @@ -3011,7 +3016,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab || shouldListenForFingerprintAssistant || (mKeyguardOccluded && mIsDreaming) || (mKeyguardOccluded && userDoesNotHaveTrust && mKeyguardShowing && (mOccludingAppRequestingFp || isUdfps || mAlternateBouncerShowing)); && (mOccludingAppRequestingFp || isUdfps || mAlternateBouncerShowing || mFeatureFlags.isEnabled(Flags.FP_LISTEN_OCCLUDING_APPS) ) ); // Only listen if this KeyguardUpdateMonitor belongs to the system user. There is an // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware. Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_CANCELL import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.HAL_POWER_PRESS_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser; import static com.android.systemui.flags.Flags.FP_LISTEN_OCCLUDING_APPS; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_CLOSED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN; Loading Loading @@ -134,6 +135,7 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; Loading Loading @@ -277,6 +279,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { private final Executor mBackgroundExecutor = Runnable::run; private final Executor mMainExecutor = Runnable::run; private TestableLooper mTestableLooper; private FakeFeatureFlags mFeatureFlags; private Handler mHandler; private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor; private MockitoSession mMockitoSession; Loading Loading @@ -325,6 +328,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mTestableLooper = TestableLooper.get(this); allowTestableLooperAsMainThread(); mFeatureFlags = new FakeFeatureFlags(); mFeatureFlags.set(FP_LISTEN_OCCLUDING_APPS, false); when(mSecureSettings.getUriFor(anyString())).thenReturn(mURI); Loading Loading @@ -1429,6 +1434,23 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isEqualTo(true); } @Test public void testOccludingAppFingerprintListeningState_featureFlagEnabled() { mFeatureFlags.set(FP_LISTEN_OCCLUDING_APPS, true); // GIVEN keyguard isn't visible (app occluding) mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON); mKeyguardUpdateMonitor.setKeyguardShowing(true, true); when(mStrongAuthTracker.hasUserAuthenticatedSinceBoot()).thenReturn(true); // THEN we SHOULD listen for non-UDFPS fingerprint assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(false)).isEqualTo(true); // THEN we should listen for udfps (hiding of mechanism to actually auth is // controlled by UdfpsKeyguardViewController) assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isEqualTo(true); } @Test public void testOccludingAppFingerprintListeningState() { // GIVEN keyguard isn't visible (app occluding) Loading Loading @@ -3126,7 +3148,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mDreamManager, mDevicePolicyManager, mSensorPrivacyManager, mTelephonyManager, mPackageManager, mFaceManager, mFingerprintManager, mBiometricManager, mFaceWakeUpTriggersConfig, mDevicePostureController, Optional.of(mInteractiveToAuthProvider)); Optional.of(mInteractiveToAuthProvider), mFeatureFlags); setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker); } Loading