Merge "Unset activity type for process level configuration"

This commit is contained in:
Louis Chang
2020-08-12 09:59:29 +00:00
committed by Android (Google) Code Review
2 changed files with 33 additions and 4 deletions

View File

@@ -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;
@@ -1291,12 +1290,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() {

View File

@@ -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();
}