Unset activity type for process level configuration
The process level configuration was updated and was scheduled to the client when home activity started, in which as home activity type. This may cause inconsistency when a standard type activity is started in the same home process. Bug: 162030251 Test: atest WindowProcessControllerTests Change-Id: I1b3b9a1a9cd164f784142fcacb365240d3522221
This commit is contained in:
@@ -196,7 +196,6 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
|
||||
private final Configuration mLastReportedConfiguration = new Configuration();
|
||||
// Configuration that is waiting to be dispatched to the process.
|
||||
private Configuration mPendingConfiguration;
|
||||
private final Configuration mNewOverrideConfig = new Configuration();
|
||||
// Registered display id as a listener to override config change
|
||||
private int mDisplayId;
|
||||
private ActivityRecord mConfigActivityRecord;
|
||||
@@ -1288,12 +1287,27 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
|
||||
updateConfiguration();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedOverrideConfigurationChanged(Configuration overrideConfiguration) {
|
||||
super.onRequestedOverrideConfigurationChanged(
|
||||
sanitizeProcessConfiguration(overrideConfiguration));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMergedOverrideConfigurationChanged(Configuration mergedOverrideConfig) {
|
||||
super.onRequestedOverrideConfigurationChanged(
|
||||
sanitizeProcessConfiguration(mergedOverrideConfig));
|
||||
}
|
||||
|
||||
private static Configuration sanitizeProcessConfiguration(Configuration config) {
|
||||
// Make sure that we don't accidentally override the activity type.
|
||||
mNewOverrideConfig.setTo(mergedOverrideConfig);
|
||||
mNewOverrideConfig.windowConfiguration.setActivityType(ACTIVITY_TYPE_UNDEFINED);
|
||||
super.onRequestedOverrideConfigurationChanged(mNewOverrideConfig);
|
||||
if (config.windowConfiguration.getActivityType() != ACTIVITY_TYPE_UNDEFINED) {
|
||||
final Configuration sanitizedConfig = new Configuration(config);
|
||||
sanitizedConfig.windowConfiguration.setActivityType(ACTIVITY_TYPE_UNDEFINED);
|
||||
return sanitizedConfig;
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
private void updateConfiguration() {
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
|
||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
||||
import static android.view.Display.INVALID_DISPLAY;
|
||||
@@ -253,6 +255,19 @@ public class WindowProcessControllerTests extends WindowTestsBase {
|
||||
assertFalse(mWpc.registeredForActivityConfigChanges());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProcessLevelConfiguration() {
|
||||
Configuration config = new Configuration();
|
||||
config.windowConfiguration.setActivityType(ACTIVITY_TYPE_HOME);
|
||||
mWpc.onRequestedOverrideConfigurationChanged(config);
|
||||
assertEquals(ACTIVITY_TYPE_HOME, config.windowConfiguration.getActivityType());
|
||||
assertEquals(ACTIVITY_TYPE_UNDEFINED, mWpc.getActivityType());
|
||||
|
||||
mWpc.onMergedOverrideConfigurationChanged(config);
|
||||
assertEquals(ACTIVITY_TYPE_HOME, config.windowConfiguration.getActivityType());
|
||||
assertEquals(ACTIVITY_TYPE_UNDEFINED, mWpc.getActivityType());
|
||||
}
|
||||
|
||||
private TestDisplayContent createTestDisplayContentInContainer() {
|
||||
return new TestDisplayContent.Builder(mAtm, 1000, 1500).build();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user