From f12c7b7aa613e813f7706d81463eba87cc97dc4c Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Sat, 8 Oct 2022 01:37:49 +0000 Subject: [PATCH] Only consider to keep activity config if invisible requested Otherwise unlike activity always has a valid initial config, wallpaper may get an empty config (frame) if it is initializing when invisible. Bug: 251371010 Test: atest WindowManagerServiceTests#testRelayoutExitingWindow Change-Id: I41c1b350d56657b5e93456f8e57b788696747d92 --- services/core/java/com/android/server/wm/WindowState.java | 4 ++-- .../com/android/server/wm/WindowManagerServiceTests.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f61bccfab5842..c161a9b26f596 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3869,8 +3869,8 @@ class WindowState extends WindowContainer implements WindowManagerP // configuration update when the window has requested to be hidden. Doing so can lead to // the client erroneously accepting a configuration that would have otherwise caused an // activity restart. We instead hand back the last reported {@link MergedConfiguration}. - if (useLatestConfig || (relayoutVisible && (!shouldCheckTokenVisibleRequested() - || mToken.isVisibleRequested()))) { + if (useLatestConfig || (relayoutVisible && (mActivityRecord == null + || mActivityRecord.mVisibleRequested))) { final Configuration globalConfig = getProcessGlobalConfiguration(); final Configuration overrideConfig = getMergedOverrideConfiguration(); outMergedConfiguration.setConfiguration(globalConfig, overrideConfig); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java index 5c1c193fb6126..b0d7ed660837b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java @@ -215,6 +215,12 @@ public class WindowManagerServiceTests extends WindowTestsBase { mWm.relayoutWindow(win.mSession, win.mClient, win.mAttrs, w, h, View.VISIBLE, 0, 0, 0, outFrames, outConfig, outSurfaceControl, outInsetsState, outControls, outBundle); assertEquals(0, outConfig.getMergedConfiguration().densityDpi); + // Non activity window can still get the last config. + win.mActivityRecord = null; + win.fillClientWindowFramesAndConfiguration(outFrames, outConfig, + false /* useLatestConfig */, true /* relayoutVisible */); + assertEquals(win.getConfiguration().densityDpi, + outConfig.getMergedConfiguration().densityDpi); } @Test