diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index be01173415a57..66357d5ac13a9 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -61,6 +61,7 @@ import static android.provider.Settings.Secure.USER_SETUP_COMPLETE; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.SurfaceControl.METADATA_TASK_ID; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FLAG_APP_CRASHED; @@ -1670,6 +1671,14 @@ class Task extends WindowContainer { return isUidPresent; } + ActivityRecord topActivityContainsStartingWindow() { + if (getParent() == null) { + return null; + } + return getActivity((r) -> r.getWindow(window -> + window.getBaseType() == TYPE_APPLICATION_STARTING) != null); + } + ActivityRecord topActivityWithStartingWindow() { if (getParent() == null) { return null; diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index a4c8db6f208fc..cc8ee60ec8ba8 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -38,7 +38,6 @@ import android.os.Binder; import android.os.IBinder; import android.os.Parcel; import android.os.RemoteException; -import android.os.SystemProperties; import android.util.Slog; import android.util.proto.ProtoOutputStream; import android.view.SurfaceControl; @@ -76,9 +75,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { private static final int REPORT_CONFIGS = CONTROLLABLE_CONFIGS; private static final int REPORT_WINDOW_CONFIGS = CONTROLLABLE_WINDOW_CONFIGS; - private static final boolean DEBUG_ENABLE_REVEAL_ANIMATION = - SystemProperties.getBoolean("persist.debug.enable_reveal_animation", false); - // The set of modes that are currently supports // TODO: Remove once the task organizer can support all modes @VisibleForTesting @@ -187,8 +183,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { SurfaceControl windowAnimationLeash = null; Rect mainFrame = null; final boolean playShiftUpAnimation = !task.inMultiWindowMode(); - if (prepareAnimation && playShiftUpAnimation && DEBUG_ENABLE_REVEAL_ANIMATION) { - final ActivityRecord topActivity = task.topActivityWithStartingWindow(); + if (prepareAnimation && playShiftUpAnimation) { + final ActivityRecord topActivity = task.topActivityContainsStartingWindow(); if (topActivity != null) { final WindowState mainWindow = topActivity.findMainWindow(false/* includeStartingApp */); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 540035fb6c976..2421d1636319e 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2412,14 +2412,14 @@ class WindowState extends WindowContainer implements WindowManagerP } if (startingWindow && StartingSurfaceController.DEBUG_ENABLE_SHELL_DRAWER) { - // cancel the remove starting window animation on shell + // Cancel the remove starting window animation on shell. The main window might changed + // during animating, checking for all windows would be safer. if (mActivityRecord != null) { - final WindowState mainWindow = - mActivityRecord.findMainWindow(false/* includeStartingApp */); - if (mainWindow != null && mainWindow.isSelfAnimating(0 /* flags */, - ANIMATION_TYPE_STARTING_REVEAL)) { - mainWindow.cancelAnimation(); - } + mActivityRecord.forAllWindows(w -> { + if (w.isSelfAnimating(0, ANIMATION_TYPE_STARTING_REVEAL)) { + w.cancelAnimation(); + } + }, true); } }