Merge "Ensure process config override tracks the correct activity." into rvc-dev

This commit is contained in:
Darryl Johnson
2020-03-15 17:59:33 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 2 deletions

View File

@@ -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;

View File

@@ -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.