diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 84e62d44d61bd..7da580ec2e7f3 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1451,13 +1451,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 @@ -1490,6 +1484,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 ba2da06efab4a..142bfa1ef9710 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1231,6 +1231,9 @@ class Task extends TaskFragment { adjustBoundsForDisplayChangeIfNeeded(getDisplayContent()); mRootWindowContainer.updateUIDsPresentOnDisplay(); + + // Ensure all animations are finished at same time in split-screen mode. + forAllActivities(ActivityRecord::updateAnimatingActivityRegistry); } @Override