summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorwilsonshih <wilsonshih@google.com>2022-01-05 20:18:02 +0800
committerwilsonshih <wilsonshih@google.com>2022-01-10 18:23:20 +0800
commit4ee97aa498372b586e100d33a33d16cea7a58058 (patch)
treed37b6ce8162b540dae4ce401e848dcaa78b0957b /core
parentcfba62de35eb96ce722174054fb64a07446b1056 (diff)
Fix transfer splash screen view been called twice from onDraw
postOnAnimation is not robust enough from remove the onDrawListener before next traversal, add a flag to to ensure that transfer splash screen view only been called once. Bug: 204125440 Test: atest SplashscreenTests Test: verify SplashScreenTests and SplashscreenParametrizedTest pass Change-Id: Id0e6d57b901b2dae45f5aa77e5571f9cf81b6e29
Diffstat (limited to 'core')
-rw-r--r--core/java/android/app/ActivityThread.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 57ad989d01c8..131bfd337b18 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4178,15 +4178,20 @@ public final class ActivityThread extends ClientTransactionHandler
view.requestLayout();
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
+ private boolean mHandled = false;
@Override
public void onDraw() {
+ if (mHandled) {
+ return;
+ }
+ mHandled = true;
// Transfer the splash screen view from shell to client.
// Call syncTransferSplashscreenViewTransaction at the first onDraw so we can ensure
// the client view is ready to show and we can use applyTransactionOnDraw to make
// all transitions happen at the same frame.
syncTransferSplashscreenViewTransaction(
view, r.token, decorView, startingWindowLeash);
- view.postOnAnimation(() -> view.getViewTreeObserver().removeOnDrawListener(this));
+ view.post(() -> view.getViewTreeObserver().removeOnDrawListener(this));
}
});
}