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