From 9cd991309e64f2168940f9d550b9220e82b7bb63 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 24 Apr 2019 17:41:35 +0200 Subject: [PATCH] Assign layer to bounds animation layer Test: AppWindowTokenAnimationTests Fixes: 130139437 Change-Id: Id68eabdacb569bcca292dace00b7e524fef9f0da --- .../java/com/android/server/wm/AppWindowToken.java | 9 ++++++--- .../server/wm/AppWindowTokenAnimationTests.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index a53f85daaa25d..56cfe5833cb55 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -144,7 +144,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree /** * Value to increment the z-layer when boosting a layer during animations. BOOST in l33tsp34k. */ - private static final int Z_BOOST_BASE = 800570000; + @VisibleForTesting static final int Z_BOOST_BASE = 800570000; // Non-null only for application tokens. final IApplicationToken appToken; @@ -293,7 +293,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree private boolean mFreezingScreen; /** Whether this token should be boosted at the top of all app window tokens. */ - private boolean mNeedsZBoost; + @VisibleForTesting boolean mNeedsZBoost; private Letterbox mLetterbox; private final Point mTmpPoint = new Point(); @@ -2693,7 +2693,9 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (mNeedsZBoost) { layer += Z_BOOST_BASE; } - leash.setLayer(layer); + if (!mNeedsAnimationBoundsLayer) { + leash.setLayer(layer); + } final DisplayContent dc = getDisplayContent(); dc.assignStackOrdering(); @@ -2730,6 +2732,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree // Crop to stack bounds. t.setWindowCrop(mAnimationBoundsLayer, mTmpRect); + t.setLayer(mAnimationBoundsLayer, layer); // Reparent leash to animation bounds layer. t.reparent(leash, mAnimationBoundsLayer); diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java index db04f1159150b..623559e412565 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java @@ -25,6 +25,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.intThat; import android.platform.test.annotations.Presubmit; import android.view.SurfaceControl; @@ -74,6 +75,16 @@ public class AppWindowTokenAnimationTests extends WindowTestsBase { eq(mToken.mAnimationBoundsLayer)); } + @Test + public void clipAfterAnim_boundsLayerZBoosted() { + mToken.mNeedsAnimationBoundsLayer = true; + mToken.mNeedsZBoost = true; + + mToken.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */); + verify(mTransaction).setLayer(eq(mToken.mAnimationBoundsLayer), + intThat(layer -> layer >= AppWindowToken.Z_BOOST_BASE)); + } + @Test public void clipAfterAnim_boundsLayerIsDestroyed() { mToken.mNeedsAnimationBoundsLayer = true;