From 5ebc885b6f05183e92710a34e78939089a531926 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Thu, 9 Apr 2020 13:43:52 +0800 Subject: [PATCH] Prevent wallpaper be affected by windowing mode. Keep the windowing mode of WallpaperWindowToken as fullscreen. Bug: 151472924 Test: atest WallpaperControllerTests Change-Id: Idd9e25fc592b90abf14526ea61396fa46020abf9 --- .../server/wm/WallpaperWindowToken.java | 2 ++ .../server/wm/WallpaperControllerTests.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java index 203ca25ecf6e0..5f3c63352015d 100644 --- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java +++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS; @@ -45,6 +46,7 @@ class WallpaperWindowToken extends WindowToken { DisplayContent dc, boolean ownerCanManageAppTokens) { super(service, token, TYPE_WALLPAPER, explicit, dc, ownerCanManageAppTokens); dc.mWallpaperController.addWallpaperToken(this); + setWindowingMode(WINDOWING_MODE_FULLSCREEN); } @Override diff --git a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java index a4f1487dde1e1..520ac19b89a86 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java @@ -16,6 +16,9 @@ package com.android.server.wm; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; @@ -251,6 +254,22 @@ public class WallpaperControllerTests extends WindowTestsBase { assertEquals(otherWindowInitialZoom, wallpaperWindow.mWallpaperZoomOut, .01f); } + /** + * Tests that the windowing mode of the wallpaper window must always be fullscreen. + */ + @Test + public void testWallpaperTokenWindowingMode() { + final DisplayContent dc = mWm.mRoot.getDefaultDisplay(); + final WallpaperWindowToken token = new WallpaperWindowToken(mWm, mock(IBinder.class), + true, dc, true /* ownerCanManageAppTokens */); + + // The wallpaper should have requested override fullscreen windowing mode, so the + // configuration (windowing mode) propagation from display won't change it. + dc.setWindowingMode(WINDOWING_MODE_FREEFORM); + assertEquals(WINDOWING_MODE_FULLSCREEN, token.getWindowingMode()); + dc.setWindowingMode(WINDOWING_MODE_UNDEFINED); + assertEquals(WINDOWING_MODE_FULLSCREEN, token.getWindowingMode()); + } private WindowState createWallpaperTargetWindow(DisplayContent dc) { final ActivityRecord homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService)