Loading services/core/java/com/android/server/wm/WallpaperWindowToken.java +6 −5 Original line number Diff line number Diff line Loading @@ -123,19 +123,20 @@ class WallpaperWindowToken extends WindowToken { } final WallpaperController wallpaperController = mDisplayContent.mWallpaperController; if (visible) { final WindowState wallpaperTarget = wallpaperController.getWallpaperTarget(); if (visible && wallpaperTarget != null) { final RecentsAnimationController recentsAnimationController = mWmService.getRecentsAnimationController(); if (wallpaperTarget != null && recentsAnimationController != null if (recentsAnimationController != null && recentsAnimationController.isAnimatingTask(wallpaperTarget.getTask())) { // If the Recents animation is running, and the wallpaper target is the animating // task we want the wallpaper to be rotated in the same orientation as the // RecentsAnimation's target (e.g the launcher) recentsAnimationController.linkFixedRotationTransformIfNeeded(this); } else if (wallpaperTarget != null } else if ((wallpaperTarget.mActivityRecord == null // Ignore invisible activity because it may be moving to background. || wallpaperTarget.mActivityRecord.mVisibleRequested) && wallpaperTarget.mToken.hasFixedRotationTransform()) { // If the wallpaper target has a fixed rotation, we want the wallpaper to follow its // rotation Loading services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,29 @@ public class WallpaperControllerTests extends WindowTestsBase { assertEquals(WINDOWING_MODE_FULLSCREEN, token.getWindowingMode()); } @Test public void testFixedRotationRecentsAnimatingTask() { final RecentsAnimationController recentsController = mock(RecentsAnimationController.class); doReturn(true).when(recentsController).isWallpaperVisible(eq(mAppWindow)); mWm.setRecentsAnimationController(recentsController); mAppWindow.mActivityRecord.applyFixedRotationTransform(mDisplayContent.getDisplayInfo(), mDisplayContent.mDisplayFrames, mDisplayContent.getConfiguration()); mAppWindow.mActivityRecord.mVisibleRequested = true; mDisplayContent.mWallpaperController.adjustWallpaperWindows(); assertEquals(mAppWindow, mDisplayContent.mWallpaperController.getWallpaperTarget()); // Wallpaper should link the transform of its target. assertTrue(mAppWindow.mActivityRecord.hasFixedRotationTransform()); mAppWindow.mActivityRecord.finishFixedRotationTransform(); // Invisible requested activity should not share its rotation transform. mAppWindow.mActivityRecord.mVisibleRequested = false; mDisplayContent.mWallpaperController.adjustWallpaperWindows(); assertFalse(mAppWindow.mActivityRecord.hasFixedRotationTransform()); } private WindowState createWallpaperTargetWindow(DisplayContent dc) { final ActivityRecord homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) .setStack(dc.getDefaultTaskDisplayArea().getRootHomeTask()) Loading Loading
services/core/java/com/android/server/wm/WallpaperWindowToken.java +6 −5 Original line number Diff line number Diff line Loading @@ -123,19 +123,20 @@ class WallpaperWindowToken extends WindowToken { } final WallpaperController wallpaperController = mDisplayContent.mWallpaperController; if (visible) { final WindowState wallpaperTarget = wallpaperController.getWallpaperTarget(); if (visible && wallpaperTarget != null) { final RecentsAnimationController recentsAnimationController = mWmService.getRecentsAnimationController(); if (wallpaperTarget != null && recentsAnimationController != null if (recentsAnimationController != null && recentsAnimationController.isAnimatingTask(wallpaperTarget.getTask())) { // If the Recents animation is running, and the wallpaper target is the animating // task we want the wallpaper to be rotated in the same orientation as the // RecentsAnimation's target (e.g the launcher) recentsAnimationController.linkFixedRotationTransformIfNeeded(this); } else if (wallpaperTarget != null } else if ((wallpaperTarget.mActivityRecord == null // Ignore invisible activity because it may be moving to background. || wallpaperTarget.mActivityRecord.mVisibleRequested) && wallpaperTarget.mToken.hasFixedRotationTransform()) { // If the wallpaper target has a fixed rotation, we want the wallpaper to follow its // rotation Loading
services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,29 @@ public class WallpaperControllerTests extends WindowTestsBase { assertEquals(WINDOWING_MODE_FULLSCREEN, token.getWindowingMode()); } @Test public void testFixedRotationRecentsAnimatingTask() { final RecentsAnimationController recentsController = mock(RecentsAnimationController.class); doReturn(true).when(recentsController).isWallpaperVisible(eq(mAppWindow)); mWm.setRecentsAnimationController(recentsController); mAppWindow.mActivityRecord.applyFixedRotationTransform(mDisplayContent.getDisplayInfo(), mDisplayContent.mDisplayFrames, mDisplayContent.getConfiguration()); mAppWindow.mActivityRecord.mVisibleRequested = true; mDisplayContent.mWallpaperController.adjustWallpaperWindows(); assertEquals(mAppWindow, mDisplayContent.mWallpaperController.getWallpaperTarget()); // Wallpaper should link the transform of its target. assertTrue(mAppWindow.mActivityRecord.hasFixedRotationTransform()); mAppWindow.mActivityRecord.finishFixedRotationTransform(); // Invisible requested activity should not share its rotation transform. mAppWindow.mActivityRecord.mVisibleRequested = false; mDisplayContent.mWallpaperController.adjustWallpaperWindows(); assertFalse(mAppWindow.mActivityRecord.hasFixedRotationTransform()); } private WindowState createWallpaperTargetWindow(DisplayContent dc) { final ActivityRecord homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) .setStack(dc.getDefaultTaskDisplayArea().getRootHomeTask()) Loading