Loading services/core/java/com/android/server/wm/TaskFragment.java +1 −4 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ import static com.android.server.wm.TaskFragmentProto.DISPLAY_ID; import static com.android.server.wm.TaskFragmentProto.MIN_HEIGHT; import static com.android.server.wm.TaskFragmentProto.MIN_WIDTH; import static com.android.server.wm.TaskFragmentProto.WINDOW_CONTAINER; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowContainerChildProto.TASK_FRAGMENT; import android.annotation.IntDef; Loading Loading @@ -2370,8 +2368,7 @@ class TaskFragment extends WindowContainer<WindowContainer> { if (!hasChild()) { return false; } return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES) || inTransition(); return isExitAnimationRunningSelfOrChild() || inTransition(); } @Override Loading services/core/java/com/android/server/wm/WindowContainer.java +17 −0 Original line number Diff line number Diff line Loading @@ -1196,6 +1196,23 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return false; } boolean isExitAnimationRunningSelfOrChild() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES); } if (mTransitionController.isCollecting(this)) { return true; } for (int i = mChildren.size() - 1; i >= 0; --i) { WindowContainer child = mChildren.get(i); if (child.isExitAnimationRunningSelfOrChild()) { return true; } } return false; } void sendAppVisibilityToClients() { for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); Loading services/core/java/com/android/server/wm/WindowManagerService.java +1 −3 Original line number Diff line number Diff line Loading @@ -119,7 +119,6 @@ import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY; Loading Loading @@ -2561,8 +2560,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.isWinVisibleLw() && winAnimator.applyAnimationLocked(transit, false)) { focusMayChange = true; win.mAnimatingExit = true; } else if (win.mDisplayContent.okToAnimate() && win.isAnimating(TRANSITION | PARENTS, WindowState.EXIT_ANIMATING_TYPES)) { } else if (win.mDisplayContent.okToAnimate() && win.isExitAnimationRunningSelfOrParent()) { // Currently in a hide animation... turn this into // an exit. win.mAnimatingExit = true; Loading services/core/java/com/android/server/wm/WindowState.java +13 −4 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITIO import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowContainerChildProto.WINDOW; Loading Loading @@ -2610,8 +2611,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWmService.mAccessibilityController.onWindowTransition(this, transit); } } final boolean isAnimating = mAnimatingExit || isAnimating(TRANSITION | PARENTS, EXIT_ANIMATING_TYPES); final boolean isAnimating = mAnimatingExit || isExitAnimationRunningSelfOrParent(); final boolean lastWindowIsStartingWindow = startingWindow && mActivityRecord != null && mActivityRecord.isLastWindow(this); // We delay the removal of a window if it has a showing surface that can be used to run Loading Loading @@ -4977,6 +4977,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return false; } boolean isExitAnimationRunningSelfOrParent() { return inAppOrRecentsTransition() || isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION); } boolean isExitAnimationRunningSelfOrChild() { return isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION); } private boolean shouldFinishAnimatingExit() { // Exit animation might be applied soon. if (inTransition()) { Loading @@ -4988,7 +4997,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return true; } // Exit animation is running. if (isAnimating(TRANSITION | PARENTS, EXIT_ANIMATING_TYPES)) { if (isExitAnimationRunningSelfOrParent()) { ProtoLog.d(WM_DEBUG_APP_TRANSITIONS, "shouldWaitAnimatingExit: isAnimating: %s", this); return false; Loading Loading @@ -5081,7 +5090,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean handleCompleteDeferredRemoval() { if (mRemoveOnExit && !isSelfAnimating(0 /* flags */, EXIT_ANIMATING_TYPES)) { if (mRemoveOnExit && !isSelfAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION)) { mRemoveOnExit = false; removeImmediately(); } Loading Loading
services/core/java/com/android/server/wm/TaskFragment.java +1 −4 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ import static com.android.server.wm.TaskFragmentProto.DISPLAY_ID; import static com.android.server.wm.TaskFragmentProto.MIN_HEIGHT; import static com.android.server.wm.TaskFragmentProto.MIN_WIDTH; import static com.android.server.wm.TaskFragmentProto.WINDOW_CONTAINER; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowContainerChildProto.TASK_FRAGMENT; import android.annotation.IntDef; Loading Loading @@ -2370,8 +2368,7 @@ class TaskFragment extends WindowContainer<WindowContainer> { if (!hasChild()) { return false; } return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES) || inTransition(); return isExitAnimationRunningSelfOrChild() || inTransition(); } @Override Loading
services/core/java/com/android/server/wm/WindowContainer.java +17 −0 Original line number Diff line number Diff line Loading @@ -1196,6 +1196,23 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return false; } boolean isExitAnimationRunningSelfOrChild() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES); } if (mTransitionController.isCollecting(this)) { return true; } for (int i = mChildren.size() - 1; i >= 0; --i) { WindowContainer child = mChildren.get(i); if (child.isExitAnimationRunningSelfOrChild()) { return true; } } return false; } void sendAppVisibilityToClients() { for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +1 −3 Original line number Diff line number Diff line Loading @@ -119,7 +119,6 @@ import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY; Loading Loading @@ -2561,8 +2560,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.isWinVisibleLw() && winAnimator.applyAnimationLocked(transit, false)) { focusMayChange = true; win.mAnimatingExit = true; } else if (win.mDisplayContent.okToAnimate() && win.isAnimating(TRANSITION | PARENTS, WindowState.EXIT_ANIMATING_TYPES)) { } else if (win.mDisplayContent.okToAnimate() && win.isExitAnimationRunningSelfOrParent()) { // Currently in a hide animation... turn this into // an exit. win.mAnimatingExit = true; Loading
services/core/java/com/android/server/wm/WindowState.java +13 −4 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITIO import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowContainerChildProto.WINDOW; Loading Loading @@ -2610,8 +2611,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWmService.mAccessibilityController.onWindowTransition(this, transit); } } final boolean isAnimating = mAnimatingExit || isAnimating(TRANSITION | PARENTS, EXIT_ANIMATING_TYPES); final boolean isAnimating = mAnimatingExit || isExitAnimationRunningSelfOrParent(); final boolean lastWindowIsStartingWindow = startingWindow && mActivityRecord != null && mActivityRecord.isLastWindow(this); // We delay the removal of a window if it has a showing surface that can be used to run Loading Loading @@ -4977,6 +4977,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return false; } boolean isExitAnimationRunningSelfOrParent() { return inAppOrRecentsTransition() || isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION); } boolean isExitAnimationRunningSelfOrChild() { return isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION); } private boolean shouldFinishAnimatingExit() { // Exit animation might be applied soon. if (inTransition()) { Loading @@ -4988,7 +4997,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return true; } // Exit animation is running. if (isAnimating(TRANSITION | PARENTS, EXIT_ANIMATING_TYPES)) { if (isExitAnimationRunningSelfOrParent()) { ProtoLog.d(WM_DEBUG_APP_TRANSITIONS, "shouldWaitAnimatingExit: isAnimating: %s", this); return false; Loading Loading @@ -5081,7 +5090,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean handleCompleteDeferredRemoval() { if (mRemoveOnExit && !isSelfAnimating(0 /* flags */, EXIT_ANIMATING_TYPES)) { if (mRemoveOnExit && !isSelfAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION)) { mRemoveOnExit = false; removeImmediately(); } Loading