Loading services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -4577,7 +4577,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP void requestUpdateWallpaperIfNeeded() { final DisplayContent dc = getDisplayContent(); if (dc != null && hasWallpaper()) { if (dc != null && ((mIsWallpaper && !mLastConfigReportedToClient) || hasWallpaper())) { dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER; dc.setLayoutNeeded(); mWmService.mWindowPlacerLocked.requestTraversal(); Loading services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +25 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import android.graphics.Rect; import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import android.util.MergedConfiguration; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.Gravity; Loading @@ -61,6 +62,7 @@ import android.view.RoundedCorners; import android.view.Surface; import android.view.SurfaceControl; import android.view.WindowManager; import android.window.ClientWindowFrames; import androidx.test.filters.SmallTest; Loading Loading @@ -337,6 +339,29 @@ public class WallpaperControllerTests extends WindowTestsBase { assertEquals(appWin, mDisplayContent.mWallpaperController.getWallpaperTarget()); } @Test public void testWallpaperReportConfigChange() { final WindowState wallpaperWindow = createWallpaperWindow(mDisplayContent); createWallpaperTargetWindow(mDisplayContent); final WallpaperWindowToken wallpaperToken = wallpaperWindow.mToken.asWallpaperToken(); makeWindowVisible(wallpaperWindow); wallpaperWindow.mLayoutSeq = mDisplayContent.mLayoutSeq; // Assume the token was invisible and the latest config was reported. wallpaperToken.commitVisibility(false); wallpaperWindow.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), new MergedConfiguration(), true /* useLatestConfig */, false /* relayoutVisible */); assertTrue(wallpaperWindow.isLastConfigReportedToClient()); final Rect bounds = wallpaperToken.getBounds(); wallpaperToken.setBounds(new Rect(0, 0, bounds.width() / 2, bounds.height() / 2)); assertFalse(wallpaperWindow.isLastConfigReportedToClient()); // If there is a pending config change when changing to visible, it should tell the client // to redraw by WindowState#reportResized. wallpaperToken.commitVisibility(true); waitUntilHandlersIdle(); assertTrue(wallpaperWindow.isLastConfigReportedToClient()); } @Test public void testWallpaperTokenVisibility() { final DisplayContent dc = mWm.mRoot.getDefaultDisplay(); Loading Loading
services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -4577,7 +4577,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP void requestUpdateWallpaperIfNeeded() { final DisplayContent dc = getDisplayContent(); if (dc != null && hasWallpaper()) { if (dc != null && ((mIsWallpaper && !mLastConfigReportedToClient) || hasWallpaper())) { dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER; dc.setLayoutNeeded(); mWmService.mWindowPlacerLocked.requestTraversal(); Loading
services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +25 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import android.graphics.Rect; import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import android.util.MergedConfiguration; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.Gravity; Loading @@ -61,6 +62,7 @@ import android.view.RoundedCorners; import android.view.Surface; import android.view.SurfaceControl; import android.view.WindowManager; import android.window.ClientWindowFrames; import androidx.test.filters.SmallTest; Loading Loading @@ -337,6 +339,29 @@ public class WallpaperControllerTests extends WindowTestsBase { assertEquals(appWin, mDisplayContent.mWallpaperController.getWallpaperTarget()); } @Test public void testWallpaperReportConfigChange() { final WindowState wallpaperWindow = createWallpaperWindow(mDisplayContent); createWallpaperTargetWindow(mDisplayContent); final WallpaperWindowToken wallpaperToken = wallpaperWindow.mToken.asWallpaperToken(); makeWindowVisible(wallpaperWindow); wallpaperWindow.mLayoutSeq = mDisplayContent.mLayoutSeq; // Assume the token was invisible and the latest config was reported. wallpaperToken.commitVisibility(false); wallpaperWindow.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), new MergedConfiguration(), true /* useLatestConfig */, false /* relayoutVisible */); assertTrue(wallpaperWindow.isLastConfigReportedToClient()); final Rect bounds = wallpaperToken.getBounds(); wallpaperToken.setBounds(new Rect(0, 0, bounds.width() / 2, bounds.height() / 2)); assertFalse(wallpaperWindow.isLastConfigReportedToClient()); // If there is a pending config change when changing to visible, it should tell the client // to redraw by WindowState#reportResized. wallpaperToken.commitVisibility(true); waitUntilHandlersIdle(); assertTrue(wallpaperWindow.isLastConfigReportedToClient()); } @Test public void testWallpaperTokenVisibility() { final DisplayContent dc = mWm.mRoot.getDefaultDisplay(); Loading