diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index a327a426204a1..66064865cf1c0 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -10428,6 +10428,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A @Override boolean isSyncFinished() { + if (task != null && mTransitionController.isTransientHide(task)) { + // The activity keeps visibleRequested but may be hidden later, so no need to wait for + // it to be drawn. + return true; + } if (!super.isSyncFinished()) return false; if (mDisplayContent != null && mDisplayContent.mUnknownAppVisibilityController .isVisibilityUnknown(this)) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index 582d7d81cd4a6..d7bf4b0e02b2f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -1415,6 +1415,8 @@ public class TransitionTests extends WindowTestsBase { final Transition.ChangeInfo activity1ChangeInfo = closeTransition.mChanges.get(activity1); assertNotNull(activity1ChangeInfo); assertTrue(activity1ChangeInfo.hasChanged()); + // No need to wait for the activity in transient hide task. + assertTrue(activity1.isSyncFinished()); activity1.setVisibleRequested(false); activity2.setVisibleRequested(true);