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

Commit c094cbe6 authored by Beverly's avatar Beverly
Browse files

Device always wakes up when the bouncer shows

Else, we can end up stuck on the bouncer in AoD.

Also, remove unnecessay injections into CentralSurfacesImpl.

Fixes: 223747700
Test: Enroll udfps & aod, lock down device, wait
for AOD, longpress lock icon, then repeat, should
never get stuck on the bouncer
Test: atest SystemUITests

Change-Id: Ib79f54a9c25adeaabdf90039bc04a3dea0ad26a2
parent 3fc61e0a
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -650,7 +650,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
                Process.myUid(),
                getContext().getOpPackageName(),
                UdfpsController.EFFECT_CLICK,
                "lock-icon-device-entry",
                "lock-screen-lock-icon-longpress",
                TOUCH_VIBRATION_ATTRIBUTES);

        mKeyguardViewController.showBouncer(/* scrim */ true);
@@ -675,6 +675,12 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    }

    private boolean isActionable() {
        if (mIsBouncerShowing) {
            Log.v(TAG, "lock icon long-press ignored, bouncer already showing.");
            // a long press gestures from AOD may have already triggered the bouncer to show,
            // so this touch is no longer actionable
            return false;
        }
        return mUdfpsSupported || mShowUnlockIcon;
    }

+20 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR
import static android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_KEYGUARD;

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

import android.annotation.NonNull;
@@ -167,11 +168,16 @@ public class UdfpsController implements DozeReceiver {
    private final Set<Callback> mCallbacks = new HashSet<>();

    @VisibleForTesting
    public static final VibrationAttributes VIBRATION_ATTRIBUTES =
    public static final VibrationAttributes UDFPS_VIBRATION_ATTRIBUTES =
            new VibrationAttributes.Builder()
                    // vibration will bypass battery saver mode:
                    .setUsage(VibrationAttributes.USAGE_COMMUNICATION_REQUEST)
                    .build();
    @VisibleForTesting
    public static final VibrationAttributes LOCK_ICON_VIBRATION_ATTRIBUTES =
            new VibrationAttributes.Builder()
                    .setUsage(VibrationAttributes.USAGE_TOUCH)
                    .build();

    // haptic to use for successful device entry
    public static final VibrationEffect EFFECT_CLICK =
@@ -671,7 +677,7 @@ public class UdfpsController implements DozeReceiver {
                    mContext.getOpPackageName(),
                    EFFECT_CLICK,
                    "udfps-onStart-click",
                    VIBRATION_ATTRIBUTES);
                    UDFPS_VIBRATION_ATTRIBUTES);
        }
    }

@@ -748,7 +754,19 @@ public class UdfpsController implements DozeReceiver {
        }

        if (!mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) {
            if (mFalsingManager.isFalseTouch(LOCK_ICON)) {
                Log.v(TAG, "aod lock icon long-press rejected by the falsing manager.");
                return;
            }
            mKeyguardViewManager.showBouncer(true);

            // play the same haptic as the LockIconViewController longpress
            mVibrator.vibrate(
                    Process.myUid(),
                    mContext.getOpPackageName(),
                    UdfpsController.EFFECT_CLICK,
                    "aod-lock-icon-longpress",
                    LOCK_ICON_VIBRATION_ATTRIBUTES);
            return;
        }

+0 −2
Original line number Diff line number Diff line
@@ -560,8 +560,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn

    void setLaunchEmergencyActionOnFinishedWaking(boolean launch);

    void setTopHidesStatusBar(boolean hides);

    QSPanelController getQSPanelController();

    boolean areNotificationAlertsDisabled();
+11 −36
Original line number Diff line number Diff line
@@ -148,7 +148,6 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.demomode.DemoMode;
import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.emergency.EmergencyGesture;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
@@ -198,7 +197,6 @@ import com.android.systemui.statusbar.PowerButtonReveal;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.core.StatusBarInitializer;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
@@ -207,7 +205,6 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
@@ -238,7 +235,6 @@ import com.android.systemui.util.WallpaperController;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.concurrency.MessageRouter;
import com.android.systemui.volume.VolumeComponent;
import com.android.systemui.wmshell.BubblesManager;
import com.android.wm.shell.bubbles.Bubbles;
import com.android.wm.shell.startingsurface.SplashscreenContentDrawer;
import com.android.wm.shell.startingsurface.StartingSurface;
@@ -307,7 +303,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
    }

    private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
    private final DreamOverlayStateController mDreamOverlayStateController;
    private CentralSurfacesCommandQueueCallbacks mCommandQueueCallbacks;
    private float mTransitionToFullShadeProgress = 0f;
    private NotificationListContainer mNotifListContainer;
@@ -404,11 +399,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mLaunchEmergencyActionWhenFinishedWaking = launch;
    }

    @Override
    public void setTopHidesStatusBar(boolean hides) {
        mTopHidesStatusBar = hides;
    }

    @Override
    public QSPanelController getQSPanelController() {
        return mQSPanelController;
@@ -452,7 +442,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
    private BiometricUnlockController mBiometricUnlockController;
    private final LightBarController mLightBarController;
    private final Lazy<LockscreenWallpaper> mLockscreenWallpaperLazy;
    private final LockscreenGestureLogger mLockscreenGestureLogger;
    @Nullable
    protected LockscreenWallpaper mLockscreenWallpaper;
    private final AutoHideController mAutoHideController;
@@ -519,9 +508,6 @@ public class CentralSurfacesImpl extends CoreStartable implements

    private boolean mExpandedVisible;

    private final int[] mAbsPos = new int[2];

    private final NotifShadeEventSource mNotifShadeEventSource;
    protected final NotificationEntryManager mEntryManager;
    private final NotificationGutsManager mGutsManager;
    private final NotificationLogger mNotificationLogger;
@@ -603,7 +589,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
        }
    }

    private Handler mMainHandler;
    private final DelayableExecutor mMainExecutor;

    private int mInteractingWindows;
@@ -637,12 +622,9 @@ public class CentralSurfacesImpl extends CoreStartable implements

    // Fingerprint (as computed by getLoggingFingerprint() of the last logged state.
    private int mLastLoggedStateFingerprint;
    private boolean mTopHidesStatusBar;
    private boolean mStatusBarWindowHidden;
    private boolean mIsLaunchingActivityOverLockscreen;

    private final UserSwitcherController mUserSwitcherController;
    private final NetworkController mNetworkController;
    private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
    protected final BatteryController mBatteryController;
    protected boolean mPanelExpanded;
@@ -662,7 +644,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
    protected NotificationPresenter mPresenter;
    private NotificationActivityStarter mNotificationActivityStarter;
    private final Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy;
    private final Optional<BubblesManager> mBubblesManagerOptional;
    private final Optional<Bubbles> mBubblesOptional;
    private final Bubbles.BubbleExpandListener mBubbleExpandListener;
    private final Optional<StartingSurface> mStartingSurfaceOptional;
@@ -704,7 +685,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
            FalsingManager falsingManager,
            FalsingCollector falsingCollector,
            BroadcastDispatcher broadcastDispatcher,
            NotifShadeEventSource notifShadeEventSource,
            NotificationEntryManager notificationEntryManager,
            NotificationGutsManager notificationGutsManager,
            NotificationLogger notificationLogger,
@@ -719,13 +699,11 @@ public class CentralSurfacesImpl extends CoreStartable implements
            NotificationLockscreenUserManager lockScreenUserManager,
            NotificationRemoteInputManager remoteInputManager,
            UserSwitcherController userSwitcherController,
            NetworkController networkController,
            BatteryController batteryController,
            SysuiColorExtractor colorExtractor,
            ScreenLifecycle screenLifecycle,
            WakefulnessLifecycle wakefulnessLifecycle,
            SysuiStatusBarStateController statusBarStateController,
            Optional<BubblesManager> bubblesManagerOptional,
            Optional<Bubbles> bubblesOptional,
            VisualStabilityManager visualStabilityManager,
            DeviceProvisionedController deviceProvisionedController,
@@ -737,7 +715,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
            DozeParameters dozeParameters,
            ScrimController scrimController,
            Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
            LockscreenGestureLogger lockscreenGestureLogger,
            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
            DozeServiceHost dozeServiceHost,
            PowerManager powerManager,
@@ -770,7 +747,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
            LockscreenShadeTransitionController lockscreenShadeTransitionController,
            FeatureFlags featureFlags,
            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
            @Main Handler mainHandler,
            @Main DelayableExecutor delayableExecutor,
            @Main MessageRouter messageRouter,
            WallpaperManager wallpaperManager,
@@ -779,7 +755,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
            NotifPipelineFlags notifPipelineFlags,
            InteractionJankMonitor jankMonitor,
            DeviceStateManager deviceStateManager,
            DreamOverlayStateController dreamOverlayStateController,
            WiredChargingRippleController wiredChargingRippleController,
            IDreamManager dreamManager) {
        super(context);
@@ -800,7 +775,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mFalsingCollector = falsingCollector;
        mFalsingManager = falsingManager;
        mBroadcastDispatcher = broadcastDispatcher;
        mNotifShadeEventSource = notifShadeEventSource;
        mEntryManager = notificationEntryManager;
        mGutsManager = notificationGutsManager;
        mNotificationLogger = notificationLogger;
@@ -815,13 +789,11 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mLockscreenUserManager = lockScreenUserManager;
        mRemoteInputManager = remoteInputManager;
        mUserSwitcherController = userSwitcherController;
        mNetworkController = networkController;
        mBatteryController = batteryController;
        mColorExtractor = colorExtractor;
        mScreenLifecycle = screenLifecycle;
        mWakefulnessLifecycle = wakefulnessLifecycle;
        mStatusBarStateController = statusBarStateController;
        mBubblesManagerOptional = bubblesManagerOptional;
        mBubblesOptional = bubblesOptional;
        mVisualStabilityManager = visualStabilityManager;
        mDeviceProvisionedController = deviceProvisionedController;
@@ -835,7 +807,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mDozeParameters = dozeParameters;
        mScrimController = scrimController;
        mLockscreenWallpaperLazy = lockscreenWallpaperLazy;
        mLockscreenGestureLogger = lockscreenGestureLogger;
        mScreenPinningRequest = screenPinningRequest;
        mDozeScrimController = dozeScrimController;
        mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
@@ -862,12 +833,10 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
        mFeatureFlags = featureFlags;
        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
        mMainHandler = mainHandler;
        mMainExecutor = delayableExecutor;
        mMessageRouter = messageRouter;
        mWallpaperManager = wallpaperManager;
        mJankMonitor = jankMonitor;
        mDreamOverlayStateController = dreamOverlayStateController;

        mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
        mStartingSurfaceOptional = startingSurfaceOptional;
@@ -1484,12 +1453,16 @@ public class CentralSurfacesImpl extends CoreStartable implements
            mPowerManager.wakeUp(
                    time, PowerManager.WAKE_REASON_GESTURE, "com.android.systemui:" + why);
            mWakeUpComingFromTouch = true;
            where.getLocationInWindow(mTmpInt2);

            // NOTE, the incoming view can sometimes be the entire container... unsure if
            // this location is valuable enough
            if (where != null) {
                where.getLocationInWindow(mTmpInt2);
                mWakeUpTouchLocation = new PointF(mTmpInt2[0] + where.getWidth() / 2,
                        mTmpInt2[1] + where.getHeight() / 2);
            } else {
                mWakeUpTouchLocation = new PointF(-1, -1);
            }
            mFalsingCollector.onScreenOnFromTouch();
        }
    }
@@ -2273,8 +2246,7 @@ public class CentralSurfacesImpl extends CoreStartable implements
    public void updateBubblesVisibility() {
        mBubblesOptional.ifPresent(bubbles -> bubbles.onStatusBarVisibilityChanged(
                mStatusBarMode != MODE_LIGHTS_OUT
                        && mStatusBarMode != MODE_LIGHTS_OUT_TRANSPARENT
                        && !mStatusBarWindowHidden));
                        && mStatusBarMode != MODE_LIGHTS_OUT_TRANSPARENT));
    }

    void checkBarMode(@TransitionMode int mode, @WindowVisibleState int windowState,
@@ -3536,6 +3508,9 @@ public class CentralSurfacesImpl extends CoreStartable implements
        setBouncerShowingForStatusBarComponents(bouncerShowing);
        mStatusBarHideIconsForBouncerManager.setBouncerShowingAndTriggerUpdate(bouncerShowing);
        mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
        if (mBouncerShowing) {
            wakeUpIfDozing(SystemClock.uptimeMillis(), null, "BOUNCER_VISIBLE");
        }
        updateScrimController();
        if (!mBouncerShowing) {
            updatePanelExpansionForKeyguard();
+4 −0
Original line number Diff line number Diff line
@@ -644,6 +644,10 @@ public class KeyguardBouncer {
    public interface BouncerExpansionCallback {
        /**
         * Invoked when the bouncer expansion reaches {@link KeyguardBouncer#EXPANSION_VISIBLE}.
         * This is NOT called each time the bouncer is shown, but rather only when the fully
         * shown amount has changed based on the panel expansion. The bouncer is visibility
         * can still change when the expansion amount hasn't changed.
         * See {@link KeyguardBouncer#isShowing()} for the checks for the bouncer showing state.
         */
        default void onFullyShown() {
        }
Loading