diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index 128cc614fd08e..ee79e6b973deb 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -26,6 +26,7 @@ import android.provider.DeviceConfig; import android.view.MotionEvent; import com.android.internal.annotations.VisibleForTesting; +import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.classifier.brightline.BrightLineFalsingManager; import com.android.systemui.classifier.brightline.FalsingDataProvider; @@ -102,7 +103,8 @@ public class FalsingManagerProxy implements FalsingManager { } else { mInternalFalsingManager = new BrightLineFalsingManager( new FalsingDataProvider(context.getResources().getDisplayMetrics()), - Dependency.get(AsyncSensorManager.class) + Dependency.get(AsyncSensorManager.class), + KeyguardUpdateMonitor.getInstance(context) ); } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java index ce82bbfb1512a..9e0b7025ddf8c 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java @@ -23,11 +23,14 @@ import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.hardware.biometrics.BiometricSourceType; import android.net.Uri; import android.util.Log; import android.view.MotionEvent; import com.android.internal.logging.MetricsLogger; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.classifier.Classifier; import com.android.systemui.plugins.FalsingManager; @@ -47,11 +50,13 @@ public class BrightLineFalsingManager implements FalsingManager { private final SensorManager mSensorManager; private final FalsingDataProvider mDataProvider; + private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private boolean mSessionStarted; private MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; private boolean mShowingAod; private boolean mScreenOn; + private boolean mJustUnlockedWithFace; private final ExecutorService mBackgroundExecutor = Executors.newSingleThreadExecutor(); @@ -68,10 +73,27 @@ public class BrightLineFalsingManager implements FalsingManager { } }; - public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider, - SensorManager sensorManager) { + private final KeyguardUpdateMonitorCallback mKeyguardUpdateCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onBiometricAuthenticated(int userId, + BiometricSourceType biometricSourceType) { + if (userId == KeyguardUpdateMonitor.getCurrentUser() + && biometricSourceType == BiometricSourceType.FACE) { + mJustUnlockedWithFace = true; + } + } + }; + + public BrightLineFalsingManager( + FalsingDataProvider falsingDataProvider, + SensorManager sensorManager, + KeyguardUpdateMonitor keyguardUpdateMonitor) { + mKeyguardUpdateMonitor = keyguardUpdateMonitor; mDataProvider = falsingDataProvider; mSensorManager = sensorManager; + mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback); + mMetricsLogger = new MetricsLogger(); mClassifiers = new ArrayList<>(); DistanceClassifier distanceClassifier = new DistanceClassifier(mDataProvider); @@ -110,6 +132,7 @@ public class BrightLineFalsingManager implements FalsingManager { if (!mSessionStarted && !mShowingAod && mScreenOn) { logDebug("Starting Session"); mSessionStarted = true; + mJustUnlockedWithFace = false; registerSensors(); mClassifiers.forEach(FalsingClassifier::onSessionStarted); } @@ -141,7 +164,7 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseTouch() { - boolean r = mClassifiers.stream().anyMatch(falsingClassifier -> { + boolean r = !mJustUnlockedWithFace && mClassifiers.stream().anyMatch(falsingClassifier -> { boolean result = falsingClassifier.isFalseTouch(); if (result) { logInfo(falsingClassifier.getClass().getName() + ": true"); @@ -335,6 +358,7 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public void cleanup() { unregisterSensors(); + mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback); } static void logDebug(String msg) {