Loading services/core/java/com/android/server/wm/WindowContainer.java +6 −2 Original line number Diff line number Diff line Loading @@ -2304,14 +2304,18 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } } void resetSurfacePositionForAnimationLeash(Transaction t) { t.setPosition(mSurfaceControl, 0, 0); mLastSurfacePosition.set(0, 0); } @Override public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) { mLastLayer = -1; reassignLayer(t); // Leash is now responsible for position, so set our position to 0. t.setPosition(mSurfaceControl, 0, 0); mLastSurfacePosition.set(0, 0); resetSurfacePositionForAnimationLeash(t); } @Override Loading services/core/java/com/android/server/wm/WindowState.java +0 −10 Original line number Diff line number Diff line Loading @@ -5249,16 +5249,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP super.prepareSurfaces(); } @Override public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) { super.onAnimationLeashCreated(t, leash); } @Override public void onAnimationLeashLost(Transaction t) { super.onAnimationLeashLost(t); } @Override @VisibleForTesting void updateSurfacePosition(Transaction t) { Loading services/core/java/com/android/server/wm/WindowToken.java +9 −0 Original line number Diff line number Diff line Loading @@ -632,6 +632,15 @@ class WindowToken extends WindowContainer<WindowState> { } } @Override void resetSurfacePositionForAnimationLeash(SurfaceControl.Transaction t) { // Keep the transformed position to animate because the surface will show in different // rotation than the animator of leash. if (!isFixedRotationTransforming()) { super.resetSurfacePositionForAnimationLeash(t); } } /** * Gives a chance to this {@link WindowToken} to adjust the {@link * android.view.WindowManager.LayoutParams} of its windows. Loading services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1324,7 +1324,7 @@ public class ActivityRecordTests extends ActivityTestsBase { display.rotateInDifferentOrientationIfNeeded(mActivity); display.mFixedRotationLaunchingApp = mActivity; displayRotation.updateRotationUnchecked(false /* forceUpdate */); displayRotation.updateRotationUnchecked(true /* forceUpdate */); assertTrue(displayRotation.isRotatingSeamlessly()); Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ import android.view.ISystemGestureExclusionListener; import android.view.IWindowManager; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceControl.Transaction; import android.view.ViewRootImpl; import android.view.WindowManager; import android.view.test.InsetsModeSession; Loading Loading @@ -1040,6 +1041,12 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals(config90.orientation, app.getConfiguration().orientation); assertEquals(config90.windowConfiguration.getBounds(), app.getBounds()); // Make wallaper laid out with the fixed rotation transform. final WindowToken wallpaperToken = mWallpaperWindow.mToken; wallpaperToken.linkFixedRotationTransform(app); mWallpaperWindow.mLayoutNeeded = true; performLayout(mDisplayContent); // Force the negative offset to verify it can be updated. mWallpaperWindow.mWinAnimator.mXOffset = mWallpaperWindow.mWinAnimator.mYOffset = -1; assertTrue(mDisplayContent.mWallpaperController.updateWallpaperOffset(mWallpaperWindow, Loading @@ -1047,6 +1054,13 @@ public class DisplayContentTests extends WindowTestsBase { assertThat(mWallpaperWindow.mWinAnimator.mXOffset).isGreaterThan(-1); assertThat(mWallpaperWindow.mWinAnimator.mYOffset).isGreaterThan(-1); // The wallpaper need to animate with transformed position, so its surface position should // not be reset. final Transaction t = wallpaperToken.getPendingTransaction(); spyOn(t); mWallpaperWindow.mToken.onAnimationLeashCreated(t, null /* leash */); verify(t, never()).setPosition(any(), eq(0), eq(0)); mDisplayContent.mAppTransition.notifyAppTransitionFinishedLocked(app.token); // The animation in old rotation should be cancelled. Loading Loading
services/core/java/com/android/server/wm/WindowContainer.java +6 −2 Original line number Diff line number Diff line Loading @@ -2304,14 +2304,18 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } } void resetSurfacePositionForAnimationLeash(Transaction t) { t.setPosition(mSurfaceControl, 0, 0); mLastSurfacePosition.set(0, 0); } @Override public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) { mLastLayer = -1; reassignLayer(t); // Leash is now responsible for position, so set our position to 0. t.setPosition(mSurfaceControl, 0, 0); mLastSurfacePosition.set(0, 0); resetSurfacePositionForAnimationLeash(t); } @Override Loading
services/core/java/com/android/server/wm/WindowState.java +0 −10 Original line number Diff line number Diff line Loading @@ -5249,16 +5249,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP super.prepareSurfaces(); } @Override public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) { super.onAnimationLeashCreated(t, leash); } @Override public void onAnimationLeashLost(Transaction t) { super.onAnimationLeashLost(t); } @Override @VisibleForTesting void updateSurfacePosition(Transaction t) { Loading
services/core/java/com/android/server/wm/WindowToken.java +9 −0 Original line number Diff line number Diff line Loading @@ -632,6 +632,15 @@ class WindowToken extends WindowContainer<WindowState> { } } @Override void resetSurfacePositionForAnimationLeash(SurfaceControl.Transaction t) { // Keep the transformed position to animate because the surface will show in different // rotation than the animator of leash. if (!isFixedRotationTransforming()) { super.resetSurfacePositionForAnimationLeash(t); } } /** * Gives a chance to this {@link WindowToken} to adjust the {@link * android.view.WindowManager.LayoutParams} of its windows. Loading
services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1324,7 +1324,7 @@ public class ActivityRecordTests extends ActivityTestsBase { display.rotateInDifferentOrientationIfNeeded(mActivity); display.mFixedRotationLaunchingApp = mActivity; displayRotation.updateRotationUnchecked(false /* forceUpdate */); displayRotation.updateRotationUnchecked(true /* forceUpdate */); assertTrue(displayRotation.isRotatingSeamlessly()); Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ import android.view.ISystemGestureExclusionListener; import android.view.IWindowManager; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceControl.Transaction; import android.view.ViewRootImpl; import android.view.WindowManager; import android.view.test.InsetsModeSession; Loading Loading @@ -1040,6 +1041,12 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals(config90.orientation, app.getConfiguration().orientation); assertEquals(config90.windowConfiguration.getBounds(), app.getBounds()); // Make wallaper laid out with the fixed rotation transform. final WindowToken wallpaperToken = mWallpaperWindow.mToken; wallpaperToken.linkFixedRotationTransform(app); mWallpaperWindow.mLayoutNeeded = true; performLayout(mDisplayContent); // Force the negative offset to verify it can be updated. mWallpaperWindow.mWinAnimator.mXOffset = mWallpaperWindow.mWinAnimator.mYOffset = -1; assertTrue(mDisplayContent.mWallpaperController.updateWallpaperOffset(mWallpaperWindow, Loading @@ -1047,6 +1054,13 @@ public class DisplayContentTests extends WindowTestsBase { assertThat(mWallpaperWindow.mWinAnimator.mXOffset).isGreaterThan(-1); assertThat(mWallpaperWindow.mWinAnimator.mYOffset).isGreaterThan(-1); // The wallpaper need to animate with transformed position, so its surface position should // not be reset. final Transaction t = wallpaperToken.getPendingTransaction(); spyOn(t); mWallpaperWindow.mToken.onAnimationLeashCreated(t, null /* leash */); verify(t, never()).setPosition(any(), eq(0), eq(0)); mDisplayContent.mAppTransition.notifyAppTransitionFinishedLocked(app.token); // The animation in old rotation should be cancelled. Loading