diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 308df2f4e9a00..bbea094ba2e3f 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1343,13 +1343,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } final Task rootTask = getRootTask(); - // If we reparent, make sure to remove ourselves from the old animation registry. - if (mAnimatingActivityRegistry != null) { - mAnimatingActivityRegistry.notifyFinished(this); - } - mAnimatingActivityRegistry = rootTask != null - ? rootTask.getAnimatingActivityRegistry() - : null; + updateAnimatingActivityRegistry(); if (task == mLastParentBeforePip) { // Activity's reparented back from pip, clear the links once established @@ -1373,6 +1367,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } + void updateAnimatingActivityRegistry() { + final Task rootTask = getRootTask(); + final AnimatingActivityRegistry registry = rootTask != null + ? rootTask.getAnimatingActivityRegistry() + : null; + + // If we reparent, make sure to remove ourselves from the old animation registry. + if (mAnimatingActivityRegistry != null && mAnimatingActivityRegistry != registry) { + mAnimatingActivityRegistry.notifyFinished(this); + } + + mAnimatingActivityRegistry = registry; + } + /** * Sets {@link #mLastParentBeforePip} to the current parent Task, it's caller's job to ensure * {@link #getTask()} is set before this is called. diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 516be553d5f85..963485554b5ee 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1464,6 +1464,9 @@ class Task extends WindowContainer { adjustBoundsForDisplayChangeIfNeeded(getDisplayContent()); mRootWindowContainer.updateUIDsPresentOnDisplay(); + + // Ensure all animations are finished at same time in split-screen mode. + forAllActivities(ActivityRecord::updateAnimatingActivityRegistry); } void cleanUpActivityReferences(ActivityRecord r) {