Merge "Fix race condition between lockNow() and updateLockscreenTimeout" into rvc-dev

This commit is contained in:
TreeHugger Robot
2021-06-09 19:31:09 +00:00
committed by Android (Google) Code Review

View File

@@ -607,6 +607,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private int mPowerButtonSuppressionDelayMillis = POWER_BUTTON_SUPPRESSION_DELAY_DEFAULT_MILLIS; private int mPowerButtonSuppressionDelayMillis = POWER_BUTTON_SUPPRESSION_DELAY_DEFAULT_MILLIS;
private boolean mLockNowPending = false;
private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3; private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3;
private static final int MSG_DISPATCH_MEDIA_KEY_REPEAT_WITH_WAKE_LOCK = 4; private static final int MSG_DISPATCH_MEDIA_KEY_REPEAT_WITH_WAKE_LOCK = 4;
private static final int MSG_KEYGUARD_DRAWN_COMPLETE = 5; private static final int MSG_KEYGUARD_DRAWN_COMPLETE = 5;
@@ -4923,6 +4925,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mKeyguardDelegate.doKeyguardTimeout(options); mKeyguardDelegate.doKeyguardTimeout(options);
} }
mLockScreenTimerActive = false; mLockScreenTimerActive = false;
mLockNowPending = false;
options = null; options = null;
} }
} }
@@ -4932,7 +4935,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
} }
ScreenLockTimeout mScreenLockTimeout = new ScreenLockTimeout(); final ScreenLockTimeout mScreenLockTimeout = new ScreenLockTimeout();
@Override @Override
public void lockNow(Bundle options) { public void lockNow(Bundle options) {
@@ -4944,6 +4947,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mScreenLockTimeout.setLockOptions(options); mScreenLockTimeout.setLockOptions(options);
} }
mHandler.post(mScreenLockTimeout); mHandler.post(mScreenLockTimeout);
synchronized (mScreenLockTimeout) {
mLockNowPending = true;
}
} }
// TODO (b/113840485): Move this logic to DisplayPolicy when lockscreen supports multi-display. // TODO (b/113840485): Move this logic to DisplayPolicy when lockscreen supports multi-display.
@@ -4959,6 +4965,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private void updateLockScreenTimeout() { private void updateLockScreenTimeout() {
synchronized (mScreenLockTimeout) { synchronized (mScreenLockTimeout) {
if (mLockNowPending) {
Log.w(TAG, "lockNow pending, ignore updating lockscreen timeout");
return;
}
final boolean enable = !mAllowLockscreenWhenOnDisplays.isEmpty() final boolean enable = !mAllowLockscreenWhenOnDisplays.isEmpty()
&& mDefaultDisplayPolicy.isAwake() && mDefaultDisplayPolicy.isAwake()
&& mKeyguardDelegate != null && mKeyguardDelegate.isSecure(mCurrentUserId); && mKeyguardDelegate != null && mKeyguardDelegate.isSecure(mCurrentUserId);