diff options
author | 2017-03-02 23:39:56 +0000 | |
---|---|---|
committer | 2017-03-02 23:39:56 +0000 | |
commit | dbdd9fc08f96c8d465adc5d17da5e089d9b0773b (patch) | |
tree | fc112250d5ee954bc6c1a247ef4a9be8a68b7115 | |
parent | 0d8ff25fabae95d5ffc826adbb68b4036d41af41 (diff) |
Revert "Compute merged configuration changes"
This reverts commit 0d8ff25fabae95d5ffc826adbb68b4036d41af41.
Reason for revert: Original CL caused b/35911519
Change-Id: Ice82b04dd00068d10f88c0d248bf95877e12cda3
-rw-r--r-- | services/core/java/com/android/server/am/ActivityRecord.java | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index fa7dd28eb856..10055c8d98f7 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -2019,12 +2019,6 @@ final class ActivityRecord implements AppWindowContainerListener { // Okay we now are going to make this activity have the new config. // But then we need to figure out how it needs to deal with that. - - // Find changes between last reported merged configuration and the current one. This is used - // to decide whether to relaunch an activity or just report a configuration change. - final int changes = getTaskConfigurationChanges(mTmpConfig1); - - // Update last reported values. final Configuration newGlobalConfig = service.getGlobalConfiguration(); final Configuration newTaskMergedOverrideConfig = task.getMergedOverrideConfiguration(); mTmpConfig1.setTo(mLastReportedConfiguration); @@ -2032,6 +2026,9 @@ final class ActivityRecord implements AppWindowContainerListener { mLastReportedConfiguration.setTo(newGlobalConfig); mLastReportedOverrideConfiguration.setTo(newTaskMergedOverrideConfig); + int taskChanges = getTaskConfigurationChanges(this, newTaskMergedOverrideConfig, + mTmpConfig2); + final int changes = mTmpConfig1.diff(newGlobalConfig) | taskChanges; if (changes == 0 && !forceNewConfig) { if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Configuration no differences in " + this); @@ -2046,7 +2043,8 @@ final class ActivityRecord implements AppWindowContainerListener { } if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, - "Configuration changes for " + this + ", allChanges=" + "Configuration changes for " + this + " ; taskChanges=" + + Configuration.configurationDiffToString(taskChanges) + ", allChanges=" + Configuration.configurationDiffToString(changes)); // If the activity isn't currently running, just leave the new configuration and it will @@ -2144,27 +2142,40 @@ final class ActivityRecord implements AppWindowContainerListener { return (changes&(~configChanged)) != 0; } - private int getTaskConfigurationChanges(Configuration newTaskConfig) { + private static int getTaskConfigurationChanges(ActivityRecord record, Configuration taskConfig, + Configuration oldTaskOverride) { + // If we went from full-screen to non-full-screen, make sure to use the correct + // configuration task diff, so the diff stays as small as possible. + if (Configuration.EMPTY.equals(oldTaskOverride) + && !Configuration.EMPTY.equals(taskConfig)) { + oldTaskOverride = record.task.extractOverrideConfig(record.mLastReportedConfiguration); + } + + // Conversely, do the same when going the other direction. + if (Configuration.EMPTY.equals(taskConfig) + && !Configuration.EMPTY.equals(oldTaskOverride)) { + taskConfig = record.task.extractOverrideConfig(record.mLastReportedConfiguration); + } + // Determine what has changed. May be nothing, if this is a config that has come back from // the app after going idle. In that case we just want to leave the official config object // now in the activity and do nothing else. - final Configuration oldTaskConfig = task.getConfiguration(); - int taskChanges = oldTaskConfig.diff(newTaskConfig, true /* skipUndefined */); + int taskChanges = oldTaskOverride.diff(taskConfig, true /* skipUndefined */); // We don't want to use size changes if they don't cross boundaries that are important to // the app. if ((taskChanges & CONFIG_SCREEN_SIZE) != 0) { - final boolean crosses = crossesHorizontalSizeThreshold(oldTaskConfig.screenWidthDp, - newTaskConfig.screenWidthDp) - || crossesVerticalSizeThreshold(oldTaskConfig.screenHeightDp, - newTaskConfig.screenHeightDp); + final boolean crosses = record.crossesHorizontalSizeThreshold( + oldTaskOverride.screenWidthDp, taskConfig.screenWidthDp) + || record.crossesVerticalSizeThreshold( + oldTaskOverride.screenHeightDp, taskConfig.screenHeightDp); if (!crosses) { taskChanges &= ~CONFIG_SCREEN_SIZE; } } if ((taskChanges & CONFIG_SMALLEST_SCREEN_SIZE) != 0) { - final int oldSmallest = oldTaskConfig.smallestScreenWidthDp; - final int newSmallest = newTaskConfig.smallestScreenWidthDp; - if (!crossesSmallestSizeThreshold(oldSmallest, newSmallest)) { + final int oldSmallest = oldTaskOverride.smallestScreenWidthDp; + final int newSmallest = taskConfig.smallestScreenWidthDp; + if (!record.crossesSmallestSizeThreshold(oldSmallest, newSmallest)) { taskChanges &= ~CONFIG_SMALLEST_SCREEN_SIZE; } } |