Merge "Fix transfer splash screen view been called twice from onDraw" into sc-v2-dev am: 0c6450141f

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

Change-Id: If8a3b2bddc7583da65673258ae2fe1c64ab840a2
This commit is contained in:
Wei Sheng Shih
2022-01-10 17:02:47 +00:00
committed by Automerger Merge Worker

View File

@@ -4177,15 +4177,20 @@ public final class ActivityThread extends ClientTransactionHandler
view.requestLayout(); view.requestLayout();
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() { view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
private boolean mHandled = false;
@Override @Override
public void onDraw() { public void onDraw() {
if (mHandled) {
return;
}
mHandled = true;
// Transfer the splash screen view from shell to client. // Transfer the splash screen view from shell to client.
// Call syncTransferSplashscreenViewTransaction at the first onDraw so we can ensure // Call syncTransferSplashscreenViewTransaction at the first onDraw so we can ensure
// the client view is ready to show and we can use applyTransactionOnDraw to make // the client view is ready to show and we can use applyTransactionOnDraw to make
// all transitions happen at the same frame. // all transitions happen at the same frame.
syncTransferSplashscreenViewTransaction( syncTransferSplashscreenViewTransaction(
view, r.token, decorView, startingWindowLeash); view, r.token, decorView, startingWindowLeash);
view.postOnAnimation(() -> view.getViewTreeObserver().removeOnDrawListener(this)); view.post(() -> view.getViewTreeObserver().removeOnDrawListener(this));
} }
}); });
} }