Loading services/core/java/com/android/server/wm/DisplayContent.java +2 −2 Original line number Diff line number Diff line Loading @@ -3973,7 +3973,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp boolean nonAppImeTargetAnimatingExit = mImeLayeringTarget.mAnimatingExit && mImeLayeringTarget.mAttrs.type != TYPE_BASE_APPLICATION && mImeLayeringTarget.isSelfAnimating(0, ANIMATION_TYPE_WINDOW_ANIMATION); if (mImeLayeringTarget.inAppOrRecentsTransition() || nonAppImeTargetAnimatingExit) { if (mImeLayeringTarget.inTransitionSelfOrParent() || nonAppImeTargetAnimatingExit) { showImeScreenshot(); } } Loading Loading @@ -4167,7 +4167,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp void removeImeScreenshotIfPossible() { if (mImeLayeringTarget == null || mImeLayeringTarget.mAttrs.type != TYPE_APPLICATION_STARTING && !mImeLayeringTarget.inAppOrRecentsTransition()) { && !mImeLayeringTarget.inTransitionSelfOrParent()) { removeImeSurfaceImmediately(); } } Loading services/core/java/com/android/server/wm/TransitionController.java +6 −2 Original line number Diff line number Diff line Loading @@ -243,9 +243,13 @@ class TransitionController { return isCollecting() || isPlaying(); } /** @return {@code true} if wc is in a participant subtree */ /** @return {@code true} if a transition is running in a participant subtree of wc */ boolean inTransition(@NonNull WindowContainer wc) { if (isCollecting(wc)) return true; if (isCollecting()) { for (WindowContainer p = wc; p != null; p = p.getParent()) { if (isCollecting(p)) return true; } } for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) { for (WindowContainer p = wc; p != null; p = p.getParent()) { if (mPlayingTransitions.get(i).mParticipants.contains(p)) { Loading services/core/java/com/android/server/wm/WindowContainer.java +0 −22 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.USER_ID; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; 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; Loading Loading @@ -1175,27 +1174,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return mTransitionController.inTransition(this); } boolean inAppOrRecentsTransition() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(PARENTS | TRANSITION, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS); } for (WindowContainer p = this; p != null; p = p.getParent()) { if (mTransitionController.isCollecting(p)) { return true; } } if (inTransition() || mTransitionController.inRecentsTransition(this)) return true; for (int i = mChildren.size() - 1; i >= 0; --i) { WindowContainer child = mChildren.get(i); if (child.inAppOrRecentsTransition()) { return true; } } return false; } boolean isExitAnimationRunningSelfOrChild() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES); Loading services/core/java/com/android/server/wm/WindowState.java +13 −1 Original line number Diff line number Diff line Loading @@ -4984,7 +4984,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } boolean isExitAnimationRunningSelfOrParent() { return inAppOrRecentsTransition() return inTransitionSelfOrParent() || isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION); } Loading @@ -4992,6 +4992,18 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION); } /** * @return {@code true} if self or the parent container of the window is in transition. * (e.g. The app or recents transition) */ boolean inTransitionSelfOrParent() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(PARENTS | TRANSITION, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS); } return mTransitionController.inTransition(this); } private boolean shouldFinishAnimatingExit() { // Exit animation might be applied soon. if (inTransition()) { Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1984,7 +1984,7 @@ public class DisplayContentTests extends WindowTestsBase { appWin2.setHasSurface(true); assertTrue(appWin2.canBeImeTarget()); doReturn(true).when(appWin1).isClosing(); doReturn(true).when(appWin1).inAppOrRecentsTransition(); doReturn(true).when(appWin1).inTransitionSelfOrParent(); // Test step 3: Verify appWin2 will be the next IME target and the IME snapshot surface will // be attached and shown on the display at this time. Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +2 −2 Original line number Diff line number Diff line Loading @@ -3973,7 +3973,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp boolean nonAppImeTargetAnimatingExit = mImeLayeringTarget.mAnimatingExit && mImeLayeringTarget.mAttrs.type != TYPE_BASE_APPLICATION && mImeLayeringTarget.isSelfAnimating(0, ANIMATION_TYPE_WINDOW_ANIMATION); if (mImeLayeringTarget.inAppOrRecentsTransition() || nonAppImeTargetAnimatingExit) { if (mImeLayeringTarget.inTransitionSelfOrParent() || nonAppImeTargetAnimatingExit) { showImeScreenshot(); } } Loading Loading @@ -4167,7 +4167,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp void removeImeScreenshotIfPossible() { if (mImeLayeringTarget == null || mImeLayeringTarget.mAttrs.type != TYPE_APPLICATION_STARTING && !mImeLayeringTarget.inAppOrRecentsTransition()) { && !mImeLayeringTarget.inTransitionSelfOrParent()) { removeImeSurfaceImmediately(); } } Loading
services/core/java/com/android/server/wm/TransitionController.java +6 −2 Original line number Diff line number Diff line Loading @@ -243,9 +243,13 @@ class TransitionController { return isCollecting() || isPlaying(); } /** @return {@code true} if wc is in a participant subtree */ /** @return {@code true} if a transition is running in a participant subtree of wc */ boolean inTransition(@NonNull WindowContainer wc) { if (isCollecting(wc)) return true; if (isCollecting()) { for (WindowContainer p = wc; p != null; p = p.getParent()) { if (isCollecting(p)) return true; } } for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) { for (WindowContainer p = wc; p != null; p = p.getParent()) { if (mPlayingTransitions.get(i).mParticipants.contains(p)) { Loading
services/core/java/com/android/server/wm/WindowContainer.java +0 −22 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.USER_ID; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; 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; Loading Loading @@ -1175,27 +1174,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return mTransitionController.inTransition(this); } boolean inAppOrRecentsTransition() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(PARENTS | TRANSITION, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS); } for (WindowContainer p = this; p != null; p = p.getParent()) { if (mTransitionController.isCollecting(p)) { return true; } } if (inTransition() || mTransitionController.inRecentsTransition(this)) return true; for (int i = mChildren.size() - 1; i >= 0; --i) { WindowContainer child = mChildren.get(i); if (child.inAppOrRecentsTransition()) { return true; } } return false; } boolean isExitAnimationRunningSelfOrChild() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES); Loading
services/core/java/com/android/server/wm/WindowState.java +13 −1 Original line number Diff line number Diff line Loading @@ -4984,7 +4984,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } boolean isExitAnimationRunningSelfOrParent() { return inAppOrRecentsTransition() return inTransitionSelfOrParent() || isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION); } Loading @@ -4992,6 +4992,18 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION); } /** * @return {@code true} if self or the parent container of the window is in transition. * (e.g. The app or recents transition) */ boolean inTransitionSelfOrParent() { if (!mTransitionController.isShellTransitionsEnabled()) { return isAnimating(PARENTS | TRANSITION, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS); } return mTransitionController.inTransition(this); } private boolean shouldFinishAnimatingExit() { // Exit animation might be applied soon. if (inTransition()) { Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1984,7 +1984,7 @@ public class DisplayContentTests extends WindowTestsBase { appWin2.setHasSurface(true); assertTrue(appWin2.canBeImeTarget()); doReturn(true).when(appWin1).isClosing(); doReturn(true).when(appWin1).inAppOrRecentsTransition(); doReturn(true).when(appWin1).inTransitionSelfOrParent(); // Test step 3: Verify appWin2 will be the next IME target and the IME snapshot surface will // be attached and shown on the display at this time. Loading