Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1951b0b3 authored by Beverly's avatar Beverly
Browse files

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
parent 764d2816
Loading
Loading
Loading
Loading
+42 −27
Original line number Original line Diff line number Diff line
@@ -18,11 +18,12 @@ package com.android.keyguard;


import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;


import static com.android.systemui.classifier.Classifier.DISABLED_UDFPS_AFFORDANCE;

import android.content.Context;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
import android.graphics.drawable.InsetDrawable;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.BiometricSourceType;
import android.view.MotionEvent;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;


@@ -33,7 +34,9 @@ import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.ViewController;


@@ -53,14 +56,16 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
    @NonNull private final KeyguardViewController mKeyguardViewController;
    @NonNull private final KeyguardViewController mKeyguardViewController;
    @NonNull private final StatusBarStateController mStatusBarStateController;
    @NonNull private final StatusBarStateController mStatusBarStateController;
    @NonNull private final KeyguardStateController mKeyguardStateController;
    @NonNull private final KeyguardStateController mKeyguardStateController;
    @NonNull private final FalsingManager mFalsingManager;
    @NonNull private final Drawable mButton;
    @NonNull private final Drawable mButton;
    @NonNull private final Drawable mUnlockIcon;
    @NonNull private final Drawable mUnlockIcon;


    private boolean mIsDozing;
    private boolean mIsDozing;
    private boolean mIsBouncerShowing;
    private boolean mIsBouncerShowing;
    private boolean mIsKeyguardShowing;
    private boolean mRunningFPS;
    private boolean mRunningFPS;
    private boolean mCanDismissLockScreen;
    private boolean mCanDismissLockScreen;
    private boolean mQsExpanded;
    private int mStatusBarState;


    private boolean mShowButton;
    private boolean mShowButton;
    private boolean mShowUnlockIcon;
    private boolean mShowUnlockIcon;
@@ -71,16 +76,19 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
            @NonNull AuthController authController,
            @NonNull AuthController authController,
            @NonNull KeyguardViewController keyguardViewController,
            @NonNull KeyguardViewController keyguardViewController,
            @NonNull KeyguardStateController keyguardStateController
            @NonNull KeyguardStateController keyguardStateController,
            @NonNull FalsingManager falsingManager
    ) {
    ) {
        super(view);
        super(view);
        mView.setOnTouchListener(mOnTouchListener);
        mView.setOnClickListener(v -> onAffordanceClick());
        mView.setOnLongClickListener(v -> onAffordanceClick());
        mView.setSensorProperties(authController.getUdfpsProps().get(0));
        mView.setSensorProperties(authController.getUdfpsProps().get(0));


        mStatusBarStateController = statusBarStateController;
        mStatusBarStateController = statusBarStateController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardViewController = keyguardViewController;
        mKeyguardViewController = keyguardViewController;
        mKeyguardStateController = keyguardStateController;
        mKeyguardStateController = keyguardStateController;
        mFalsingManager = falsingManager;


        final Context context = view.getContext();
        final Context context = view.getContext();
        mButton = context.getResources().getDrawable(
        mButton = context.getResources().getDrawable(
@@ -94,10 +102,10 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
    @Override
    @Override
    protected void onViewAttached() {
    protected void onViewAttached() {
        mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
        mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
        mIsKeyguardShowing = mKeyguardStateController.isShowing();
        mIsDozing = mStatusBarStateController.isDozing();
        mIsDozing = mStatusBarStateController.isDozing();
        mRunningFPS = mKeyguardUpdateMonitor.isFingerprintDetectionRunning();
        mRunningFPS = mKeyguardUpdateMonitor.isFingerprintDetectionRunning();
        mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
        mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
        mStatusBarState = mStatusBarStateController.getState();
        mUnlockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(),
        mUnlockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(),
                R.attr.wallpaperTextColorAccent));
                R.attr.wallpaperTextColorAccent));
        updateVisibility();
        updateVisibility();
@@ -114,6 +122,15 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
        mKeyguardStateController.removeCallback(mKeyguardStateCallback);
        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.
     * 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<DisabledUdfpsView> 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() {
    private void updateVisibility() {
        mShowButton = !mCanDismissLockScreen && !mRunningFPS && isLockScreen();
        mShowButton = !mCanDismissLockScreen && !mRunningFPS && isLockScreen();
        mShowUnlockIcon = mCanDismissLockScreen && isLockScreen();
        mShowUnlockIcon = mCanDismissLockScreen && isLockScreen();
@@ -139,7 +164,10 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
    }
    }


    private boolean isLockScreen() {
    private boolean isLockScreen() {
        return mIsKeyguardShowing && !mIsDozing && !mIsBouncerShowing;
        return !mIsDozing
                && !mIsBouncerShowing
                && !mQsExpanded
                && mStatusBarState == StatusBarState.KEYGUARD;
    }
    }


    @Override
    @Override
@@ -148,20 +176,13 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
        pw.println("  mShowBouncerButton: " + mShowButton);
        pw.println("  mShowBouncerButton: " + mShowButton);
        pw.println("  mShowUnlockIcon: " + mShowUnlockIcon);
        pw.println("  mShowUnlockIcon: " + mShowUnlockIcon);
        pw.println("  mIsDozing: " + mIsDozing);
        pw.println("  mIsDozing: " + mIsDozing);
        pw.println("  mIsKeyguardShowing: " + mIsKeyguardShowing);
        pw.println("  mIsBouncerShowing: " + mIsBouncerShowing);
        pw.println("  mIsBouncerShowing: " + mIsBouncerShowing);
        pw.println("  mRunningFPS: " + mRunningFPS);
        pw.println("  mRunningFPS: " + mRunningFPS);
        pw.println("  mCanDismissLockScreen: " + mCanDismissLockScreen);
        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 =
    private StatusBarStateController.StateListener mStatusBarStateListener =
            new StatusBarStateController.StateListener() {
            new StatusBarStateController.StateListener() {
                @Override
                @Override
@@ -169,6 +190,12 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
                    mIsDozing = isDozing;
                    mIsDozing = isDozing;
                    updateVisibility();
                    updateVisibility();
                }
                }

                @Override
                public void onStateChanged(int statusBarState) {
                    mStatusBarState = statusBarState;
                    updateVisibility();
                }
            };
            };


    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
@@ -192,22 +219,10 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i


    private final KeyguardStateController.Callback mKeyguardStateCallback =
    private final KeyguardStateController.Callback mKeyguardStateCallback =
            new KeyguardStateController.Callback() {
            new KeyguardStateController.Callback() {
        @Override
        public void onKeyguardShowingChanged() {
            updateIsKeyguardShowing();
            updateVisibility();
        }

        @Override
        @Override
        public void onUnlockedChanged() {
        public void onUnlockedChanged() {
            updateIsKeyguardShowing();
            mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
            mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
            updateVisibility();
            updateVisibility();
        }
        }

        private void updateIsKeyguardShowing() {
            mIsKeyguardShowing = mKeyguardStateController.isShowing()
                    && !mKeyguardStateController.isKeyguardGoingAway();
        }
    };
    };
}
}
+0 −3
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import android.graphics.RectF;
import com.android.systemui.Dumpable;
import com.android.systemui.Dumpable;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.ViewController;


@@ -47,7 +46,6 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
    @NonNull final DumpManager mDumpManger;
    @NonNull final DumpManager mDumpManger;


    private boolean mNotificationShadeExpanded;
    private boolean mNotificationShadeExpanded;
    private int mStatusBarState;


    protected UdfpsAnimationViewController(
    protected UdfpsAnimationViewController(
            T view,
            T view,
@@ -86,7 +84,6 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>


    @Override
    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState));
        pw.println("mNotificationShadeExpanded=" + mNotificationShadeExpanded);
        pw.println("mNotificationShadeExpanded=" + mNotificationShadeExpanded);
        pw.println("shouldPauseAuth()=" + shouldPauseAuth());
        pw.println("shouldPauseAuth()=" + shouldPauseAuth());
        pw.println("isPauseAuth=" + mView.isPauseAuth());
        pw.println("isPauseAuth=" + mView.isPauseAuth());
+8 −1
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.biometrics;


import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
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.doze.DozeReceiver;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
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 DumpManager mDumpManager;
    @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @NonNull private final KeyguardViewMediator mKeyguardViewMediator;
    @NonNull private final KeyguardViewMediator mKeyguardViewMediator;
    @NonNull private FalsingManager mFalsingManager;
    // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
    // 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.
    // sensors, this, in addition to a lot of the code here, will be updated.
    @VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps;
    @VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps;
@@ -291,6 +294,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
                    Log.v(TAG, "onTouch | finger up");
                    Log.v(TAG, "onTouch | finger up");
                    onFingerUp();
                    onFingerUp();
                }
                }
                mFalsingManager.isFalseTouch(UDFPS_AUTHENTICATION);

                break;
                break;


            default:
            default:
@@ -311,7 +316,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
            @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
            @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
            @NonNull DumpManager dumpManager,
            @NonNull DumpManager dumpManager,
            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
            @NonNull KeyguardViewMediator keyguardViewMediator) {
            @NonNull KeyguardViewMediator keyguardViewMediator,
            @NonNull FalsingManager falsingManager) {
        mContext = context;
        mContext = context;
        mInflater = inflater;
        mInflater = inflater;
        // The fingerprint manager is queried for UDFPS before this class is constructed, so the
        // 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;
        mDumpManager = dumpManager;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardViewMediator = keyguardViewMediator;
        mKeyguardViewMediator = keyguardViewMediator;
        mFalsingManager = falsingManager;


        mSensorProps = findFirstUdfps();
        mSensorProps = findFirstUdfps();
        // At least one UDFPS sensor exists
        // At least one UDFPS sensor exists
+5 −1
Original line number Original line Diff line number Diff line
@@ -91,6 +91,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        mStatusBarStateController.addCallback(mStateListener);
        mStatusBarStateController.addCallback(mStateListener);
        mStateListener.onDozeAmountChanged(dozeAmount, dozeAmount);
        mStateListener.onDozeAmountChanged(dozeAmount, dozeAmount);
        mStateListener.onStateChanged(mStatusBarStateController.getState());
        mStateListener.onStateChanged(mStatusBarStateController.getState());
        mAlternateAuthInterceptor.setQsExpanded(mKeyguardViewManager.isQsExpanded());
        mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor);
        mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor);
    }
    }


@@ -117,6 +118,8 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        pw.println("mShowBouncer=" + mShowBouncer);
        pw.println("mShowBouncer=" + mShowBouncer);
        pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
        pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
        pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome);
        pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome);
        pw.println("mStatusBarState" + StatusBarState.toShortString(mStatusBarState));
        pw.println("mQsExpanded=" + mQsExpanded);
    }
    }


    /**
    /**
@@ -215,6 +218,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        public void onStateChanged(int statusBarState) {
        public void onStateChanged(int statusBarState) {
            mStatusBarState = statusBarState;
            mStatusBarState = statusBarState;
            mView.setStatusBarState(statusBarState);
            mView.setStatusBarState(statusBarState);
            updatePauseAuth();
        }
        }
    };
    };


@@ -283,7 +287,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud


                @Override
                @Override
                public void dump(PrintWriter pw) {
                public void dump(PrintWriter pw) {
                    pw.print(getTag());
                    pw.println(getTag());
                }
                }
            };
            };
}
}
+5 −1
Original line number Original line Diff line number Diff line
@@ -38,6 +38,8 @@ public abstract class Classifier {
    public static final int BOUNCER_UNLOCK = 8;
    public static final int BOUNCER_UNLOCK = 8;
    public static final int PULSE_EXPAND = 9;
    public static final int PULSE_EXPAND = 9;
    public static final int BRIGHTNESS_SLIDER = 10;
    public static final int BRIGHTNESS_SLIDER = 10;
    public static final int UDFPS_AUTHENTICATION = 11;
    public static final int DISABLED_UDFPS_AFFORDANCE = 12;


    @IntDef({
    @IntDef({
            QUICK_SETTINGS,
            QUICK_SETTINGS,
@@ -50,7 +52,9 @@ public abstract class Classifier {
            GENERIC,
            GENERIC,
            BOUNCER_UNLOCK,
            BOUNCER_UNLOCK,
            PULSE_EXPAND,
            PULSE_EXPAND,
            BRIGHTNESS_SLIDER
            BRIGHTNESS_SLIDER,
            UDFPS_AUTHENTICATION,
            DISABLED_UDFPS_AFFORDANCE
    })
    })
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface InteractionType {}
    public @interface InteractionType {}
Loading