diff options
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 1 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenWindowCreator.java | 14 |
2 files changed, 10 insertions, 5 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 2d7ed46fe64a..54589d2e84f5 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4758,6 +4758,7 @@ public final class ActivityThread extends ClientTransactionHandler // frame. final SurfaceControl.Transaction transaction = new SurfaceControl.Transaction(); transaction.hide(startingWindowLeash); + startingWindowLeash.release(); view.syncTransferSurfaceOnDraw(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenWindowCreator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenWindowCreator.java index cc962acf1182..caed194c5fd8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenWindowCreator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenWindowCreator.java @@ -368,8 +368,12 @@ class SplashscreenWindowCreator extends AbsSplashWindowCreator { mStartingWindowRecordManager.addRecord(taskId, tView); } - private void removeWindowInner(@NonNull View decorView, boolean hideView) { + private void removeWindowInner(@NonNull View decorView, StartingWindowRemovalInfo info, + boolean hideView) { requestTopUi(false); + if (info.windowAnimationLeash != null && info.windowAnimationLeash.isValid()) { + info.windowAnimationLeash.release(); + } if (decorView.getParent() == null) { Slog.w(TAG, "This root view has no parent, never been added to a ViewRootImpl?"); return; @@ -452,22 +456,22 @@ class SplashscreenWindowCreator extends AbsSplashWindowCreator { if (mSplashView == null) { // shouldn't happen, the app window may be drawn earlier than starting window? Slog.e(TAG, "Found empty splash screen, remove!"); - removeWindowInner(mRootView, false); + removeWindowInner(mRootView, info, false); return true; } if (immediately || mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) { - removeWindowInner(mRootView, false); + removeWindowInner(mRootView, info, false); } else { if (info.playRevealAnimation) { mSplashscreenContentDrawer.applyExitAnimation(mSplashView, info.windowAnimationLeash, info.mainFrame, - () -> removeWindowInner(mRootView, true), + () -> removeWindowInner(mRootView, info, true), mCreateTime, info.roundedCornerRadius); } else { // the SplashScreenView has been copied to client, hide the view to skip // default exit animation - removeWindowInner(mRootView, true); + removeWindowInner(mRootView, info, true); } } return true; |