Merge "Call KeyguardViewMediator#hideWithAnimation on the main thread" into sc-dev am: 0d0d1ae649

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14881283

Change-Id: I534df7366505da8a6e594d3f1e57e43e8f44fe0e
This commit is contained in:
TreeHugger Robot
2021-06-08 17:54:28 +00:00
committed by Automerger Merge Worker
2 changed files with 14 additions and 4 deletions

View File

@@ -1651,14 +1651,19 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
Trace.endSection(); Trace.endSection();
} }
/** Hide the keyguard and let {@code runner} handle the animation. */ /**
* Hide the keyguard and let {@code runner} handle the animation.
*
* This method should typically be called after {@link ViewMediatorCallback#keyguardDonePending}
* was called, when we are ready to hide the keyguard.
*/
public void hideWithAnimation(IRemoteAnimationRunner runner) { public void hideWithAnimation(IRemoteAnimationRunner runner) {
if (!mShowing) { if (!mKeyguardDonePending) {
return; return;
} }
mKeyguardExitAnimationRunner = runner; mKeyguardExitAnimationRunner = runner;
hideLocked(); mViewMediatorCallback.readyForKeyguardDone();
} }
/** /**

View File

@@ -2118,7 +2118,12 @@ public class StatusBar extends SystemUI implements DemoMode,
return; return;
} }
mKeyguardViewMediator.hideWithAnimation(runner); // We post to the main thread for 2 reasons:
// 1. KeyguardViewMediator is not thread-safe.
// 2. To ensure that ViewMediatorCallback#keyguardDonePending is called before
// ViewMediatorCallback#readyForKeyguardDone. The wrong order could occur when doing
// dismissKeyguardThenExecute { hideKeyguardWithAnimation(runner) }.
mMainThreadHandler.post(() -> mKeyguardViewMediator.hideWithAnimation(runner));
} }
@Override @Override