diff options
5 files changed, 18 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 0ad8782cea4f..4dd8221167a9 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2252,6 +2252,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } final WindowManagerPolicy.StartingSurface surface; + final StartingData startingData = mStartingData; if (mStartingData != null) { surface = mStartingSurface; mStartingData = null; @@ -2278,7 +2279,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final Runnable removeSurface = () -> { ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Removing startingView=%s", surface); try { - surface.remove(prepareAnimation); + surface.remove(prepareAnimation && startingData.needRevealAnimation()); } catch (Exception e) { Slog.w(TAG_WM, "Exception when removing starting window", e); } diff --git a/services/core/java/com/android/server/wm/SnapshotStartingData.java b/services/core/java/com/android/server/wm/SnapshotStartingData.java index 66ae0eb9b48f..b6cf91a584a9 100644 --- a/services/core/java/com/android/server/wm/SnapshotStartingData.java +++ b/services/core/java/com/android/server/wm/SnapshotStartingData.java @@ -41,6 +41,11 @@ class SnapshotStartingData extends StartingData { } @Override + boolean needRevealAnimation() { + return false; + } + + @Override boolean hasImeSurface() { return mSnapshot.hasImeSurface(); } diff --git a/services/core/java/com/android/server/wm/SplashScreenStartingData.java b/services/core/java/com/android/server/wm/SplashScreenStartingData.java index 185a317271ff..c659c05dceda 100644 --- a/services/core/java/com/android/server/wm/SplashScreenStartingData.java +++ b/services/core/java/com/android/server/wm/SplashScreenStartingData.java @@ -58,4 +58,9 @@ class SplashScreenStartingData extends StartingData { mLogo, mWindowFlags, mMergedOverrideConfiguration, activity.getDisplayContent().getDisplayId()); } + + @Override + boolean needRevealAnimation() { + return true; + } } diff --git a/services/core/java/com/android/server/wm/StartingData.java b/services/core/java/com/android/server/wm/StartingData.java index 3f9c93bbcfbe..c671e3835abc 100644 --- a/services/core/java/com/android/server/wm/StartingData.java +++ b/services/core/java/com/android/server/wm/StartingData.java @@ -47,6 +47,11 @@ public abstract class StartingData { */ abstract StartingSurface createStartingSurface(ActivityRecord activity); + /** + * @return Whether to apply reveal animation when exiting the starting window. + */ + abstract boolean needRevealAnimation(); + /** @see android.window.TaskSnapshot#hasImeSurface() */ boolean hasImeSurface() { return false; diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 3a2ca80f2e12..abcb34c2e8d9 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -197,6 +197,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { ANIMATION_TYPE_STARTING_REVEAL); windowAnimationLeash = adaptor.mAnimationLeash; mainFrame = mainWindow.getRelativeFrame(); + t.setPosition(windowAnimationLeash, mainFrame.left, mainFrame.top); } } } |