From 1951b0b366f20ae86a0fee2e4eade8a34a3572a2 Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 6 Apr 2021 11:47:23 -0400 Subject: [PATCH] Add falsing checks to udfps affordance Check falsing manager to determine whether taps on the DisabledUdfps affordances should be used. Update logic for showing DisabledUdfps controller and UdfpsKeyguardView so that they don't show when QS is expanded. Show DisabledUdfps view on tap and on long press. Test: manual Bug: 184290268 Bug: 183910378 Change-Id: I677062b0990ac450589e29e293f7c9de41296dd5 --- .../keyguard/DisabledUdfpsController.java | 69 +++++++++++-------- .../UdfpsAnimationViewController.java | 3 - .../systemui/biometrics/UdfpsController.java | 9 ++- .../UdfpsKeyguardViewController.java | 6 +- .../systemui/classifier/Classifier.java | 6 +- .../classifier/DistanceClassifier.java | 4 +- .../systemui/classifier/TypeClassifier.java | 5 ++ .../NotificationPanelViewController.java | 7 +- .../phone/StatusBarKeyguardViewManager.java | 8 +++ .../biometrics/UdfpsControllerTest.java | 6 +- 10 files changed, 87 insertions(+), 36 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java index 15312ad9dfd17..c9dea46c2f955 100644 --- a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java +++ b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java @@ -18,11 +18,12 @@ package com.android.keyguard; import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT; +import static com.android.systemui.classifier.Classifier.DISABLED_UDFPS_AFFORDANCE; + import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.hardware.biometrics.BiometricSourceType; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -33,7 +34,9 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.ViewController; @@ -53,14 +56,16 @@ public class DisabledUdfpsController extends ViewController i @NonNull private final KeyguardViewController mKeyguardViewController; @NonNull private final StatusBarStateController mStatusBarStateController; @NonNull private final KeyguardStateController mKeyguardStateController; + @NonNull private final FalsingManager mFalsingManager; @NonNull private final Drawable mButton; @NonNull private final Drawable mUnlockIcon; private boolean mIsDozing; private boolean mIsBouncerShowing; - private boolean mIsKeyguardShowing; private boolean mRunningFPS; private boolean mCanDismissLockScreen; + private boolean mQsExpanded; + private int mStatusBarState; private boolean mShowButton; private boolean mShowUnlockIcon; @@ -71,16 +76,19 @@ public class DisabledUdfpsController extends ViewController i @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, @NonNull AuthController authController, @NonNull KeyguardViewController keyguardViewController, - @NonNull KeyguardStateController keyguardStateController + @NonNull KeyguardStateController keyguardStateController, + @NonNull FalsingManager falsingManager ) { super(view); - mView.setOnTouchListener(mOnTouchListener); + mView.setOnClickListener(v -> onAffordanceClick()); + mView.setOnLongClickListener(v -> onAffordanceClick()); mView.setSensorProperties(authController.getUdfpsProps().get(0)); mStatusBarStateController = statusBarStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardViewController = keyguardViewController; mKeyguardStateController = keyguardStateController; + mFalsingManager = falsingManager; final Context context = view.getContext(); mButton = context.getResources().getDrawable( @@ -94,10 +102,10 @@ public class DisabledUdfpsController extends ViewController i @Override protected void onViewAttached() { mIsBouncerShowing = mKeyguardViewController.isBouncerShowing(); - mIsKeyguardShowing = mKeyguardStateController.isShowing(); mIsDozing = mStatusBarStateController.isDozing(); mRunningFPS = mKeyguardUpdateMonitor.isFingerprintDetectionRunning(); mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen(); + mStatusBarState = mStatusBarStateController.getState(); mUnlockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(), R.attr.wallpaperTextColorAccent)); updateVisibility(); @@ -114,6 +122,15 @@ public class DisabledUdfpsController extends ViewController i mKeyguardStateController.removeCallback(mKeyguardStateCallback); } + private boolean onAffordanceClick() { + if (mFalsingManager.isFalseTouch(DISABLED_UDFPS_AFFORDANCE)) { + return false; + } + mView.setVisibility(View.INVISIBLE); + mKeyguardViewController.showBouncer(/* scrim */ true); + return true; + } + /** * Call when this controller is no longer needed. This will remove the view from its parent. */ @@ -123,6 +140,14 @@ public class DisabledUdfpsController extends ViewController i } } + /** + * Set whether qs is expanded. When QS is expanded, don't show a DisabledUdfps affordance. + */ + public void setQsExpanded(boolean expanded) { + mQsExpanded = expanded; + updateVisibility(); + } + private void updateVisibility() { mShowButton = !mCanDismissLockScreen && !mRunningFPS && isLockScreen(); mShowUnlockIcon = mCanDismissLockScreen && isLockScreen(); @@ -139,7 +164,10 @@ public class DisabledUdfpsController extends ViewController i } private boolean isLockScreen() { - return mIsKeyguardShowing && !mIsDozing && !mIsBouncerShowing; + return !mIsDozing + && !mIsBouncerShowing + && !mQsExpanded + && mStatusBarState == StatusBarState.KEYGUARD; } @Override @@ -148,20 +176,13 @@ public class DisabledUdfpsController extends ViewController i pw.println(" mShowBouncerButton: " + mShowButton); pw.println(" mShowUnlockIcon: " + mShowUnlockIcon); pw.println(" mIsDozing: " + mIsDozing); - pw.println(" mIsKeyguardShowing: " + mIsKeyguardShowing); pw.println(" mIsBouncerShowing: " + mIsBouncerShowing); pw.println(" mRunningFPS: " + mRunningFPS); pw.println(" mCanDismissLockScreen: " + mCanDismissLockScreen); + pw.println(" mStatusBarState: " + StatusBarState.toShortString(mStatusBarState)); + pw.println(" mQsExpanded: " + mQsExpanded); } - private final View.OnTouchListener mOnTouchListener = new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - mKeyguardViewController.showBouncer(/* scrim */ true); - return true; - } - }; - private StatusBarStateController.StateListener mStatusBarStateListener = new StatusBarStateController.StateListener() { @Override @@ -169,6 +190,12 @@ public class DisabledUdfpsController extends ViewController i mIsDozing = isDozing; updateVisibility(); } + + @Override + public void onStateChanged(int statusBarState) { + mStatusBarState = statusBarState; + updateVisibility(); + } }; private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = @@ -192,22 +219,10 @@ public class DisabledUdfpsController extends ViewController i private final KeyguardStateController.Callback mKeyguardStateCallback = new KeyguardStateController.Callback() { - @Override - public void onKeyguardShowingChanged() { - updateIsKeyguardShowing(); - updateVisibility(); - } - @Override public void onUnlockedChanged() { - updateIsKeyguardShowing(); mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen(); updateVisibility(); } - - private void updateIsKeyguardShowing() { - mIsKeyguardShowing = mKeyguardStateController.isShowing() - && !mKeyguardStateController.isKeyguardGoingAway(); - } }; } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java index f4993f46bf1db..d9e1b501e1e11 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java @@ -23,7 +23,6 @@ import android.graphics.RectF; import com.android.systemui.Dumpable; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; -import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.util.ViewController; @@ -47,7 +46,6 @@ abstract class UdfpsAnimationViewController @NonNull final DumpManager mDumpManger; private boolean mNotificationShadeExpanded; - private int mStatusBarState; protected UdfpsAnimationViewController( T view, @@ -86,7 +84,6 @@ abstract class UdfpsAnimationViewController @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState)); pw.println("mNotificationShadeExpanded=" + mNotificationShadeExpanded); pw.println("shouldPauseAuth()=" + shouldPauseAuth()); pw.println("isPauseAuth=" + mView.isPauseAuth()); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index d5312d863ae36..405151d6b39d8 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -18,6 +18,7 @@ package com.android.systemui.biometrics; import static com.android.internal.util.Preconditions.checkArgument; import static com.android.internal.util.Preconditions.checkNotNull; +import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION; import android.annotation.NonNull; import android.annotation.Nullable; @@ -53,6 +54,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.DozeReceiver; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; @@ -91,6 +93,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback { @NonNull private final DumpManager mDumpManager; @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardViewMediator mKeyguardViewMediator; + @NonNull private FalsingManager mFalsingManager; // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // sensors, this, in addition to a lot of the code here, will be updated. @VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps; @@ -291,6 +294,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback { Log.v(TAG, "onTouch | finger up"); onFingerUp(); } + mFalsingManager.isFalseTouch(UDFPS_AUTHENTICATION); + break; default: @@ -311,7 +316,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback { @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager, @NonNull DumpManager dumpManager, @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, - @NonNull KeyguardViewMediator keyguardViewMediator) { + @NonNull KeyguardViewMediator keyguardViewMediator, + @NonNull FalsingManager falsingManager) { mContext = context; mInflater = inflater; // The fingerprint manager is queried for UDFPS before this class is constructed, so the @@ -325,6 +331,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback { mDumpManager = dumpManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardViewMediator = keyguardViewMediator; + mFalsingManager = falsingManager; mSensorProps = findFirstUdfps(); // At least one UDFPS sensor exists diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java index dc0c685bf01ee..35678e6773d5e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java @@ -91,6 +91,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController