Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9c20d2b authored by wilsonshih's avatar wilsonshih
Browse files

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
parent c5532b03
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -812,7 +812,9 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
    void updateNightModeForAllActivities(int nightMode) {
        for (int i = mActivities.size() - 1; i >= 0; --i) {
            final ActivityRecord r = mActivities.get(i);
            r.setOverrideNightMode(nightMode);
            if (r.setOverrideNightMode(nightMode) && r.mVisibleRequested) {
                r.ensureActivityConfiguration(0 /* globalChanges */, true /* preserveWindow */);
            }
        }
    }

+11 −0
Original line number Diff line number Diff line
@@ -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());