diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index c2cfe0b7bd927..26c04f9487ef8 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1349,13 +1349,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 @@ -1380,6 +1374,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 c068fd1a5f6e3..cae4f22f913f1 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) {