summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2021-04-21 10:02:03 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-21 10:02:03 +0000
commit1aae6246a379a534181ce24c12c5cdb50f5741fa (patch)
tree8cbc8ff425a4c73da4e81592a704407695805d0c
parentdb45defb94a53e63c12a800df1983b6a4da35c18 (diff)
parent1c04f614c14bce2e07d505867a3ddb4182664e00 (diff)
Merge "Check animating accurately when assigning mAnimatingExit from relayout" into sc-dev
-rw-r--r--services/core/java/com/android/server/wm/FadeRotationAnimationController.java7
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java12
4 files changed, 25 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/wm/FadeRotationAnimationController.java b/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
index b14d4a1e4b5a..644256a071ff 100644
--- a/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
+++ b/services/core/java/com/android/server/wm/FadeRotationAnimationController.java
@@ -66,9 +66,14 @@ public class FadeRotationAnimationController extends FadeAnimationController {
} else {
mNavBarToken = null;
}
+ // Do not fade notification shade when running fixed rotation (not frozen) because it may
+ // need to animate with the launching app.
+ final WindowState notificationShade = mFrozenTimeoutRunnable == null
+ ? displayPolicy.getNotificationShade() : null;
displayContent.forAllWindows(w -> {
if (w.mActivityRecord == null && w.mHasSurface && !w.mForceSeamlesslyRotate
- && !w.mIsWallpaper && !w.mIsImWindow && w != navigationBar) {
+ && !w.mIsWallpaper && !w.mIsImWindow && w != navigationBar
+ && w != notificationShade) {
mTargetWindowTokens.add(w.mToken);
}
}, true /* traverseTopToBottom */);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 2707b4d1d0fe..12c9b972cecc 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2519,7 +2519,8 @@ public class WindowManagerService extends IWindowManager.Stub
} else if (win.isWinVisibleLw() && winAnimator.applyAnimationLocked(transit, false)) {
focusMayChange = true;
win.mAnimatingExit = true;
- } else if (win.mDisplayContent.okToAnimate() && win.isAnimating(TRANSITION | PARENTS)) {
+ } else if (win.mDisplayContent.okToAnimate() && win.isAnimating(TRANSITION | PARENTS,
+ WindowState.EXIT_ANIMATING_TYPES)) {
// Currently in a hide animation... turn this into
// an exit.
win.mAnimatingExit = true;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 2a0aca4d06b7..83f74cd49b59 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -132,6 +132,7 @@ import static com.android.server.wm.MoveAnimationSpecProto.FROM;
import static com.android.server.wm.MoveAnimationSpecProto.TO;
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.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
@@ -517,6 +518,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
*/
boolean mSurfacePlacementNeeded;
+ /**
+ * The animation types that will call {@link #onExitAnimationDone} so {@link #mAnimatingExit}
+ * is guaranteed to be cleared.
+ */
+ static final int EXIT_ANIMATING_TYPES = ANIMATION_TYPE_APP_TRANSITION
+ | ANIMATION_TYPE_WINDOW_ANIMATION | ANIMATION_TYPE_RECENTS;
+
/** Currently running an exit animation? */
boolean mAnimatingExit;
@@ -2456,8 +2464,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
mWmService.mAccessibilityController.onWindowTransition(this, transit);
}
}
- final boolean isAnimating = mAnimatingExit || isAnimating(TRANSITION | PARENTS,
- ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION)
+ final boolean isAnimating = mAnimatingExit
+ || isAnimating(TRANSITION | PARENTS, EXIT_ANIMATING_TYPES)
&& (mActivityRecord == null || !mActivityRecord.isWaitingForTransitionStart());
final boolean lastWindowIsStartingWindow = startingWindow && mActivityRecord != null
&& mActivityRecord.isLastWindow(this);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 2f5235249168..4dbb2de283f5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -1292,7 +1292,8 @@ public class DisplayContentTests extends WindowTestsBase {
assertNull(displayContent.getFadeRotationAnimationController());
}
- @UseTestDisplay(addWindows = { W_ACTIVITY, W_WALLPAPER, W_STATUS_BAR, W_NAVIGATION_BAR })
+ @UseTestDisplay(addWindows = { W_ACTIVITY, W_WALLPAPER, W_STATUS_BAR, W_NAVIGATION_BAR,
+ W_NOTIFICATION_SHADE })
@Test
public void testApplyTopFixedRotationTransform() {
final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
@@ -1300,6 +1301,7 @@ public class DisplayContentTests extends WindowTestsBase {
doReturn(false).when(displayPolicy).navigationBarCanMove();
displayPolicy.addWindowLw(mStatusBarWindow, mStatusBarWindow.mAttrs);
displayPolicy.addWindowLw(mNavBarWindow, mNavBarWindow.mAttrs);
+ displayPolicy.addWindowLw(mNotificationShadeWindow, mNotificationShadeWindow.mAttrs);
makeWindowVisible(mStatusBarWindow, mNavBarWindow);
final Configuration config90 = new Configuration();
mDisplayContent.computeScreenConfiguration(config90, ROTATION_90);
@@ -1324,10 +1326,10 @@ public class DisplayContentTests extends WindowTestsBase {
false /* forceUpdate */));
assertNotNull(mDisplayContent.getFadeRotationAnimationController());
- assertTrue(mStatusBarWindow.getParent().isAnimating(WindowContainer.AnimationFlags.PARENTS,
- ANIMATION_TYPE_FIXED_TRANSFORM));
- assertTrue(mNavBarWindow.getParent().isAnimating(WindowContainer.AnimationFlags.PARENTS,
- ANIMATION_TYPE_FIXED_TRANSFORM));
+ assertTrue(mStatusBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
+ assertTrue(mNavBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
+ // Notification shade may have its own view animation in real case so do not fade out it.
+ assertFalse(mNotificationShadeWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
// If the visibility of insets state is changed, the rotated state should be updated too.
final InsetsState rotatedState = app.getFixedRotationTransformInsetsState();