From d9c20d2b639bfd39d7ed61738852a97b8bd75907 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Fri, 2 Jul 2021 11:50:12 +0800 Subject: [PATCH] Fix ui_mode change have not schedule configuration change to client Fix the symptom that a visible activity will not receive configuration change or relaunch after application night mode changed. Bug: 192406882 Test: atest WindowProcessControllerTests Change-Id: Ic4d14cda0ca9984f67d076c6afa89cb0a9ea2a5a --- .../android/server/wm/WindowProcessController.java | 4 +++- .../server/wm/WindowProcessControllerTests.java | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 1c57aef8a5af5..1364c72e6275c 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -812,7 +812,9 @@ public class WindowProcessController extends ConfigurationContainer= 0; --i) { final ActivityRecord r = mActivities.get(i); - r.setOverrideNightMode(nightMode); + if (r.setOverrideNightMode(nightMode) && r.mVisibleRequested) { + r.ensureActivityConfiguration(0 /* globalChanges */, true /* preserveWindow */); + } } } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index f848ce5e5579e..ed18d26f84487 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -28,6 +28,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -359,6 +361,15 @@ public class WindowProcessControllerTests extends WindowTestsBase { return new ActivityBuilder(mAtm).setCreateTask(true).setUseProcess(wpc).build(); } + @Test + public void testTopActivityUiModeChangeScheduleConfigChange() { + final ActivityRecord activity = createActivityRecord(mWpc); + activity.mVisibleRequested = true; + doReturn(true).when(activity).setOverrideNightMode(anyInt()); + mWpc.updateNightModeForAllActivities(Configuration.UI_MODE_NIGHT_YES); + verify(activity).ensureActivityConfiguration(anyInt(), anyBoolean()); + } + @Test public void testTopActivityDisplayAreaMatchesTopMostActivity_noActivities() { assertNull(mWpc.getTopActivityDisplayArea());