Merge "Only link rotation transform of visible activity to wallpaper" into rvc-dev

This commit is contained in:
Riddle Hsu
2020-05-08 12:48:35 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 5 deletions

View File

@@ -123,19 +123,20 @@ class WallpaperWindowToken extends WindowToken {
}
final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
final WindowState wallpaperTarget = wallpaperController.getWallpaperTarget();
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

View File

@@ -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())