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