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
This commit is contained in:
committed by
Darryl Johnson
parent
60a4479b55
commit
2c8ae2d835
@@ -1058,7 +1058,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
|
||||
}
|
||||
|
||||
private void registerActivityConfigurationListener(ActivityRecord activityRecord) {
|
||||
if (activityRecord == null) {
|
||||
if (activityRecord == null || activityRecord.containsListener(this)) {
|
||||
return;
|
||||
}
|
||||
// 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--) {
|
||||
final ActivityRecord activityRecord = mActivities.get(i);
|
||||
if (!activityRecord.finishing && !activityRecord.containsListener(this)) {
|
||||
if (!activityRecord.finishing) {
|
||||
// Eligible activity is found, update listener.
|
||||
registerActivityConfigurationListener(activityRecord);
|
||||
return;
|
||||
|
||||
@@ -1332,6 +1332,40 @@ public class ActivityRecordTests extends ActivityTestsBase {
|
||||
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
|
||||
* display with custom DisplayInfo.
|
||||
|
||||
Reference in New Issue
Block a user