Merge "Report pending change to wallpaper when being visible" into tm-qpr-dev

This commit is contained in:
Riddle Hsu
2023-03-09 16:41:47 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 1 deletions

View File

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

View File

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