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

Commit 151be9dc authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Fix camera race condition

Centralize deffered camera launch on wakefulness events
since there aren't any guarantees that screen and wakefulness
will happen in order.

Fixes: 123762288
Test: double tap power multiple times (from LS and AOD)
Change-Id: I031802877953d9c77fc17118612d0b26fca387b5
parent 04cb6d1c
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -504,7 +504,7 @@ public class StatusBar extends SystemUI implements DemoMode,

    private Runnable mLaunchTransitionEndRunnable;
    private NotificationEntry mDraggedDownEntry;
    private boolean mLaunchCameraOnScreenTurningOn;
    private boolean mLaunchCameraWhenFinishedWaking;
    private boolean mLaunchCameraOnFinishedGoingToSleep;
    private int mLastCameraLaunchSource;
    protected PowerManager.WakeLock mGestureWakeLock;
@@ -3606,7 +3606,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        public void onFinishedGoingToSleep() {
            mNotificationPanel.onAffordanceLaunchEnded();
            releaseGestureWakeLock();
            mLaunchCameraOnScreenTurningOn = false;
            mLaunchCameraWhenFinishedWaking = false;
            mDeviceInteractive = false;
            mWakeUpComingFromTouch = false;
            mWakeUpTouchLocation = null;
@@ -3651,6 +3651,11 @@ public class StatusBar extends SystemUI implements DemoMode,
        @Override
        public void onFinishedWakingUp() {
            mWakeUpCoordinator.setWakingUp(false);
            if (mLaunchCameraWhenFinishedWaking) {
                mNotificationPanel.launchCamera(false /* animate */, mLastCameraLaunchSource);
                mLaunchCameraWhenFinishedWaking = false;
            }
            updateScrimController();
        }
    };

@@ -3671,13 +3676,6 @@ public class StatusBar extends SystemUI implements DemoMode,
        public void onScreenTurningOn() {
            mFalsingManager.onScreenTurningOn();
            mNotificationPanel.onScreenTurningOn();

            if (mLaunchCameraOnScreenTurningOn) {
                mNotificationPanel.launchCamera(false, mLastCameraLaunchSource);
                mLaunchCameraOnScreenTurningOn = false;
            }

            updateScrimController();
        }

        @Override
@@ -3772,7 +3770,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                // comes on.
                mGestureWakeLock.acquire(LAUNCH_TRANSITION_TIMEOUT_MS + 1000L);
            }
            if (isScreenTurningOnOrOn()) {
            if (isWakingUpOrAwake()) {
                if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Launching camera");
                if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
                    mStatusBarKeyguardViewManager.reset(true /* hide */);
@@ -3785,7 +3783,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                // incorrectly get notified because of the screen on event (which resumes and pauses
                // some activities)
                if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Deferring until screen turns on");
                mLaunchCameraOnScreenTurningOn = true;
                mLaunchCameraWhenFinishedWaking = true;
            }
        }
    }
@@ -3810,9 +3808,9 @@ public class StatusBar extends SystemUI implements DemoMode,
                == WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP;
    }

    private boolean isScreenTurningOnOrOn() {
        return mScreenLifecycle.getScreenState() == ScreenLifecycle.SCREEN_TURNING_ON
                || mScreenLifecycle.getScreenState() == ScreenLifecycle.SCREEN_ON;
    private boolean isWakingUpOrAwake() {
        return mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_AWAKE
                || mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_WAKING;
    }

    public void notifyBiometricAuthModeChanged() {
@@ -3844,7 +3842,7 @@ public class StatusBar extends SystemUI implements DemoMode,
            ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming()
                    ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
            mScrimController.transitionTo(state);
        } else if (isInLaunchTransition() || mLaunchCameraOnScreenTurningOn
        } else if (isInLaunchTransition() || mLaunchCameraWhenFinishedWaking
                || launchingAffordanceWithPreview) {
            mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
        } else if (mBrightnessMirrorVisible) {