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

Commit 2c8ae2d8 authored by Darryl L Johnson's avatar Darryl L Johnson Committed by Darryl Johnson
Browse files

Ensure process config override tracks the correct activity.

WPC would change the activity used to override the process config
or remove the override altogether if an activity that isn't the current
activity is destroyed and removed from WPC.

Test: ActivityRecordTests

Fixes: 151186991
Change-Id: Ic5b12c796abcc16b0c205d83ab38c4e114f9ff81
parent 60a4479b
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -1058,7 +1058,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
    }
    }


    private void registerActivityConfigurationListener(ActivityRecord activityRecord) {
    private void registerActivityConfigurationListener(ActivityRecord activityRecord) {
        if (activityRecord == null) {
        if (activityRecord == null || activityRecord.containsListener(this)) {
            return;
            return;
        }
        }
        // A process can only register to one activityRecord to listen to the override configuration
        // A process can only register to one activityRecord to listen to the override configuration
@@ -1093,7 +1093,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio


        for (int i = mActivities.size() - 1; i >= 0; i--) {
        for (int i = mActivities.size() - 1; i >= 0; i--) {
            final ActivityRecord activityRecord = mActivities.get(i);
            final ActivityRecord activityRecord = mActivities.get(i);
            if (!activityRecord.finishing && !activityRecord.containsListener(this)) {
            if (!activityRecord.finishing) {
                // Eligible activity is found, update listener.
                // Eligible activity is found, update listener.
                registerActivityConfigurationListener(activityRecord);
                registerActivityConfigurationListener(activityRecord);
                return;
                return;
+34 −0
Original line number Original line Diff line number Diff line
@@ -1332,6 +1332,40 @@ public class ActivityRecordTests extends ActivityTestsBase {
        assertNotEquals(initialConf, wpc.getRequestedOverrideConfiguration());
        assertNotEquals(initialConf, wpc.getRequestedOverrideConfiguration());
    }
    }


    @Test
    public void testActivityDestroyDoesntChangeProcessOverride() {
        final ActivityRecord firstActivity =
                createActivityOnDisplay(true /* defaultDisplay */, null /* process */);
        final WindowProcessController wpc = firstActivity.app;
        assertTrue(wpc.registeredForActivityConfigChanges());
        assertEquals(0, firstActivity.getMergedOverrideConfiguration()
                .diff(wpc.getRequestedOverrideConfiguration()));

        final ActivityRecord secondActivity =
                createActivityOnDisplay(false /* defaultDisplay */, wpc);
        assertTrue(wpc.registeredForActivityConfigChanges());
        assertEquals(0, secondActivity.getMergedOverrideConfiguration()
                .diff(wpc.getRequestedOverrideConfiguration()));

        final ActivityRecord thirdActivity =
                createActivityOnDisplay(false /* defaultDisplay */, wpc);
        assertTrue(wpc.registeredForActivityConfigChanges());
        assertEquals(0, thirdActivity.getMergedOverrideConfiguration()
                .diff(wpc.getRequestedOverrideConfiguration()));

        secondActivity.destroyImmediately(true, "");

        assertTrue(wpc.registeredForActivityConfigChanges());
        assertEquals(0, thirdActivity.getMergedOverrideConfiguration()
                .diff(wpc.getRequestedOverrideConfiguration()));

        firstActivity.destroyImmediately(true, "");

        assertTrue(wpc.registeredForActivityConfigChanges());
        assertEquals(0, thirdActivity.getMergedOverrideConfiguration()
                .diff(wpc.getRequestedOverrideConfiguration()));
    }

    /**
    /**
     * Creates an activity on display. For non-default display request it will also create a new
     * Creates an activity on display. For non-default display request it will also create a new
     * display with custom DisplayInfo.
     * display with custom DisplayInfo.