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
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user