From 4e31619041c951b0236935c37613778e4a77538d Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 18 May 2023 20:30:42 +0000 Subject: [PATCH] Run fingerprint over occluding apps when featureFlag enabled Bug: 283260970 Test: manual Test: KeyguardUpdateMonitorTest Change-Id: I27b939b92088e120c6191d869432f327847faf00 --- .../keyguard/KeyguardUpdateMonitor.java | 14 +++++++++-- .../keyguard/KeyguardUpdateMonitorTest.java | 24 ++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 0f0ebed01e826..967ef32d78ae6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -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; @@ -379,6 +381,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 @@ -2285,7 +2288,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Nullable BiometricManager biometricManager, FaceWakeUpTriggersConfig faceWakeUpTriggersConfig, DevicePostureController devicePostureController, - Optional interactiveToAuthProvider) { + Optional interactiveToAuthProvider, + FeatureFlags featureFlags) { mContext = context; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; @@ -2317,6 +2321,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( @@ -3004,7 +3009,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. diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 2f72cb95db988..469d017450175 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -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; @@ -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; @@ -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; @@ -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); @@ -1411,6 +1416,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) @@ -3108,7 +3130,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); }