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

Commit ae3df890 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Merge cherrypicks of [14669877, 14667805, 14667806] into sc-d1-release

Change-Id: I6a0856ca31a5ef4f21f60de3fa91d86b9da2c049
parents 76637179 cfd0176f
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -2143,9 +2143,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        final boolean shouldListenUdfpsState = !isUdfps
                || (!getUserCanSkipBouncer(getCurrentUser())
                    && !isEncryptedOrLockdown(getCurrentUser())
                    && mStrongAuthTracker.hasUserAuthenticatedSinceBoot()
                    && !userNeedsStrongAuth()
                    && userDoesNotHaveTrust);

        return shouldListenKeyguardState && shouldListenUserState && shouldListenBouncerState
                && shouldListenUdfpsState;
    }
@@ -3270,7 +3269,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            pw.println("    disabled(DPM)=" + isFingerprintDisabled(userId));
            pw.println("    possible=" + isUnlockWithFingerprintPossible(userId));
            pw.println("    listening: actual=" + mFingerprintRunningState
                    + " expected=" + (shouldListenForFingerprint(false) ? 1 : 0));
                    + " expected=" + (shouldListenForFingerprint(isUdfpsEnrolled()) ? 1 : 0));
            pw.println("    strongAuthFlags=" + Integer.toHexString(strongAuthFlags));
            pw.println("    trustManaged=" + getUserTrustIsManaged(userId));
            pw.println("    udfpsEnrolled=" + isUdfpsEnrolled());
+47 −11
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -48,6 +49,7 @@ import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.concurrency.DelayableExecutor;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -70,6 +72,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    @NonNull private final AuthController mAuthController;
    @NonNull private final AccessibilityManager mAccessibilityManager;
    @NonNull private final ConfigurationController mConfigurationController;
    @NonNull private final DelayableExecutor mExecutor;

    private boolean mHasUdfpsOrFaceAuthFeatures;
    private boolean mUdfpsEnrolled;
@@ -90,6 +93,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    private int mStatusBarState;
    private boolean mIsKeyguardShowing;
    private boolean mUserUnlockedWithBiometric;
    private Runnable mCancelDelayedUpdateVisibilityRunnable;

    private boolean mShowButton;
    private boolean mShowUnlockIcon;
@@ -106,7 +110,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
            @NonNull AuthController authController,
            @NonNull DumpManager dumpManager,
            @NonNull AccessibilityManager accessibilityManager,
            @NonNull ConfigurationController configurationController
            @NonNull ConfigurationController configurationController,
            @NonNull @Main DelayableExecutor executor
    ) {
        super(view);
        mStatusBarStateController = statusBarStateController;
@@ -117,6 +122,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
        mFalsingManager = falsingManager;
        mAccessibilityManager = accessibilityManager;
        mConfigurationController = configurationController;
        mExecutor = executor;

        final Context context = view.getContext();
        mButton = context.getResources().getDrawable(
@@ -202,6 +208,11 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
        mKeyguardStateController.removeCallback(mKeyguardStateCallback);
        mAccessibilityManager.removeTouchExplorationStateChangeListener(
                mTouchExplorationStateChangeListener);

        if (mCancelDelayedUpdateVisibilityRunnable != null) {
            mCancelDelayedUpdateVisibilityRunnable.run();
            mCancelDelayedUpdateVisibilityRunnable = null;
        }
    }

    public float getTop() {
@@ -213,8 +224,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
            return false;
        }

        // pre-emptively set to false to hide view
        mIsKeyguardShowing = false;
        // pre-emptively set to true to hide view
        mIsBouncerShowing = true;
        updateVisibility();
        mKeyguardViewController.showBouncer(/* scrim */ true);
        return true;
@@ -229,6 +240,11 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    }

    private void updateVisibility() {
        if (mCancelDelayedUpdateVisibilityRunnable != null) {
            mCancelDelayedUpdateVisibilityRunnable.run();
            mCancelDelayedUpdateVisibilityRunnable = null;
        }

        if (!mIsKeyguardShowing || (!mUdfpsEnrolled && !mFaceAuthEnrolled)) {
            mView.setVisibility(View.INVISIBLE);
            return;
@@ -318,13 +334,13 @@ public class LockIconViewController extends ViewController<LockIconView> impleme

    @Override
    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
        pw.println("  mShowBouncerButton: " + mShowButton);
        pw.println("  mShowUnlockIcon: " + mShowUnlockIcon);
        pw.println("  mShowLockIcon: " + mShowLockIcon);
        pw.println("mHasUdfpsOrFaceAuthFeatures: " + mHasUdfpsOrFaceAuthFeatures);
        pw.println("mUdfpsEnrolled: " + mUdfpsEnrolled);
        pw.println("mFaceAuthEnrolled: " + mFaceAuthEnrolled);
        pw.println("mIsKeyguardShowing: " + mIsKeyguardShowing);
        pw.println(" mShowBouncerButton: " + mShowButton);
        pw.println(" mShowUnlockIcon: " + mShowUnlockIcon);
        pw.println(" mShowLockIcon: " + mShowLockIcon);
        pw.println("  mIsDozing: " + mIsDozing);
        pw.println("  mIsBouncerShowing: " + mIsBouncerShowing);
        pw.println("  mUserUnlockedWithBiometric: " + mUserUnlockedWithBiometric);
@@ -351,6 +367,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme

    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
                public void onKeyguardVisibilityChanged(boolean showing) {
                    // reset mIsBouncerShowing state in case it was preemptively set
                    // onAffordanceClick
                    mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
                    updateVisibility();
                }

                @Override
                public void onKeyguardBouncerChanged(boolean bouncer) {
                    mIsBouncerShowing = bouncer;
@@ -366,9 +390,21 @@ public class LockIconViewController extends ViewController<LockIconView> impleme

                    if (biometricSourceType == FINGERPRINT) {
                        mRunningFPS = running;
                        if (!mRunningFPS) {
                            if (mCancelDelayedUpdateVisibilityRunnable != null) {
                                mCancelDelayedUpdateVisibilityRunnable.run();
                            }

                            // For some devices, auth is cancelled immediately on screen off but
                            // before dozing state is set. We want to avoid briefly showing the
                            // button in this case, so we delay updating the visibility by 50ms.
                            mCancelDelayedUpdateVisibilityRunnable =
                                    mExecutor.executeDelayed(() -> updateVisibility(), 50);
                        } else {
                            updateVisibility();
                        }
                    }
                }
            };

    private final KeyguardStateController.Callback mKeyguardStateCallback =
+10 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.settingslib.Utils
import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.commandline.Command
import com.android.systemui.statusbar.commandline.CommandRegistry
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent.StatusBarScope
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.ViewController
@@ -45,6 +46,7 @@ class AuthRippleController @Inject constructor(
    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
    private val commandRegistry: CommandRegistry,
    private val notificationShadeWindowController: NotificationShadeWindowController,
    private val bypassController: KeyguardBypassController,
    rippleView: AuthRippleView?
) : ViewController<AuthRippleView>(rippleView) {
    private var fingerprintSensorLocation: PointF? = null
@@ -69,12 +71,20 @@ class AuthRippleController @Inject constructor(
    }

    private fun showRipple(biometricSourceType: BiometricSourceType?) {
        if (!keyguardUpdateMonitor.isKeyguardVisible ||
            keyguardUpdateMonitor.userNeedsStrongAuth()) {
            return
        }

        if (biometricSourceType == BiometricSourceType.FINGERPRINT &&
            fingerprintSensorLocation != null) {
            mView.setSensorLocation(fingerprintSensorLocation!!)
            showRipple()
        } else if (biometricSourceType == BiometricSourceType.FACE &&
            faceSensorLocation != null) {
            if (!bypassController.canBypass()) {
                return
            }
            mView.setSensorLocation(faceSensorLocation!!)
            showRipple()
        }
+13 −22
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
    @NonNull private final KeyguardViewMediator mKeyguardViewMediator;
    @NonNull private final UdfpsController mUdfpsController;

    @Nullable private Runnable mCancelRunnable;
    @Nullable private Runnable mCancelDelayedHintRunnable;
    private boolean mShowingUdfpsBouncer;
    private boolean mUdfpsRequested;
    private boolean mQsExpanded;
@@ -64,7 +64,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
    private boolean mHintShown;
    private boolean mTransitioningFromHome;
    private int mStatusBarState;
    private boolean mKeyguardIsVisible;

    /**
     * hidden amount of pin/pattern/password bouncer
@@ -111,7 +110,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        mUdfpsRequested = false;
        mStatusBarState = mStatusBarStateController.getState();
        mQsExpanded = mKeyguardViewManager.isQsExpanded();
        mKeyguardIsVisible = mKeyguardUpdateMonitor.isKeyguardVisible();
        mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN;
        updateAlpha();
        updatePauseAuth();
@@ -131,9 +129,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        mTransitioningFromHome = false;
        mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false);

        if (mCancelRunnable != null) {
            mCancelRunnable.run();
            mCancelRunnable = null;
        if (mCancelDelayedHintRunnable != null) {
            mCancelDelayedHintRunnable.run();
            mCancelDelayedHintRunnable = null;
        }
    }

@@ -145,7 +143,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome);
        pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState));
        pw.println("mQsExpanded=" + mQsExpanded);
        pw.println("mKeyguardVisible=" + mKeyguardIsVisible);
        pw.println("mIsBouncerVisible=" + mIsBouncerVisible);
        pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount);
        pw.println("mAlpha=" + mView.getAlpha());
@@ -205,11 +202,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
            return true;
        }

        if (!mKeyguardIsVisible) {
            return true;
        }

        if (mInputBouncerHiddenAmount < .4f) {
        if (mInputBouncerHiddenAmount < .4f || mIsBouncerVisible) {
            return true;
        }

@@ -240,9 +233,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
    }

    private void cancelDelayedHint() {
        if (mCancelRunnable != null) {
            mCancelRunnable.run();
            mCancelRunnable = null;
        if (mCancelDelayedHintRunnable != null) {
            mCancelDelayedHintRunnable.run();
            mCancelDelayedHintRunnable = null;
        }
    }

@@ -252,9 +245,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
        }

        // show udfps hint a few seconds after face auth started running
        if (!mFaceDetectRunning && running && !mHintShown && mCancelRunnable == null) {
        if (!mFaceDetectRunning && running && !mHintShown && mCancelDelayedHintRunnable == null) {
            // Face detect started running, show udfps hint after a delay
            mCancelRunnable = mExecutor.executeDelayed(() -> showHint(false),
            mCancelDelayedHintRunnable = mExecutor.executeDelayed(() -> showHint(false),
                    AFTER_FACE_AUTH_HINT_DELAY);
        }

@@ -328,11 +321,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
                        cancelDelayedHint();
                    }
                }

                public void onKeyguardVisibilityChangedRaw(boolean showing) {
                    mKeyguardIsVisible = showing;
                    updatePauseAuth();
                }
            };

    private final StatusBarKeyguardViewManager.AlternateAuthInterceptor mAlternateAuthInterceptor =
@@ -385,6 +373,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
                @Override
                public void onBouncerVisibilityChanged() {
                    mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing();
                    if (!mIsBouncerVisible) {
                        mInputBouncerHiddenAmount = 1f;
                    }
                    updatePauseAuth();
                }

+10 −4
Original line number Diff line number Diff line
@@ -3669,7 +3669,9 @@ public class StatusBar extends SystemUI implements DemoMode,
    public boolean onBackPressed() {
        boolean isScrimmedBouncer = mScrimController.getState() == ScrimState.BOUNCER_SCRIMMED;
        if (mStatusBarKeyguardViewManager.onBackPressed(isScrimmedBouncer /* hideImmediately */)) {
            if (!isScrimmedBouncer) {
            if (isScrimmedBouncer) {
                mStatusBarStateController.setLeaveOpenOnKeyguardHide(false);
            } else {
                mNotificationPanelViewController.expandWithoutQs();
            }
            return true;
@@ -3704,9 +3706,13 @@ public class StatusBar extends SystemUI implements DemoMode,
    }

    private void showBouncerIfKeyguard() {
        if ((mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED)
                && !mKeyguardViewMediator.isHiding()) {
        if (!mKeyguardViewMediator.isHiding()) {
            if (mState == StatusBarState.KEYGUARD
                    && !mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()) {
                mStatusBarKeyguardViewManager.showGenericBouncer(true /* scrimmed */);
            } else if (mState == StatusBarState.SHADE_LOCKED) {
                mStatusBarKeyguardViewManager.showBouncer(true /* scrimmed */);
            }
        }
    }

Loading