summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Bryce Lee <brycelee@google.com> 2017-08-17 09:16:03 -0700
committer Bryce Lee <brycelee@google.com> 2017-08-17 11:07:41 -0700
commit8104e7a258a9d3f230980eae7da05694320f746f (patch)
treec9be0ce596fb27c38899e906918883a8c694f5b6
parentc3e7f875b41f78de26d07f6c8ab8fe78747886c0 (diff)
Only update reported configuration when triggered from AM side.
Previously we were updating the last reported Configuration whenever it was reported to WM. However, the original intention of last reported Configuration was reporting from AM side to the ActivityRecord, not AM to WM. Updating this value in the latter case leads to scenarios where we may update the Configuration too soon, compromising any logic relying on comparing against the truly last reported value. This changelist removes call points other than messaging from the AM side which change this value. It also consolidates all changes to the method ActivityRecord#setLastReportedConfiguration to better track where the value is being set. Change-Id: I958daf6cd2f2163637f8b7e567a0f3e2be540b7d Fixes: 63813517 Test: go/wm-smoke Test: cts/hostsidetests/services/activityandwindowmanager/util/run-test CtsServicesHostTestCases android.server.cts.ActivityManagerAppConfigurationTests
-rw-r--r--services/core/java/com/android/server/am/ActivityRecord.java20
-rw-r--r--services/core/java/com/android/server/am/TaskRecord.java1
2 files changed, 6 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 6b1f7585dde6..74bdf6f3dae4 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -947,8 +947,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// the user leaves that mode.
mLastReportedMultiWindowMode = !task.mFullscreen;
mLastReportedPictureInPictureMode = (task.getStackId() == PINNED_STACK_ID);
-
- onOverrideConfigurationSent();
}
void removeWindowContainer() {
@@ -2212,15 +2210,12 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
* a new merged configuration is sent to the client for this activity.
*/
void setLastReportedConfiguration(@NonNull MergedConfiguration config) {
- mLastReportedConfiguration.setTo(config);
+ setLastReportedConfiguration(config.getGlobalConfiguration(),
+ config.getOverrideConfiguration());
}
- /** Call when override config was sent to the Window Manager to update internal records. */
- // TODO(b/36505427): Why do we set last reported based on sending the config to WM? Seems like
- // we should only set this when we actually report to the activity which is what the method
- // setLastReportedMergedOverrideConfiguration() does. Investigate if this is really needed.
- void onOverrideConfigurationSent() {
- mLastReportedConfiguration.setOverrideConfiguration(getMergedOverrideConfiguration());
+ void setLastReportedConfiguration(Configuration global, Configuration override) {
+ mLastReportedConfiguration.setConfiguration(global, override);
}
@Override
@@ -2234,9 +2229,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
return;
}
mWindowContainerController.onOverrideConfigurationChanged(newConfig, mBounds);
- // TODO(b/36505427): Can we consolidate the call points of onOverrideConfigurationSent()
- // to just use this method instead?
- onOverrideConfigurationSent();
}
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
@@ -2423,8 +2415,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
// Update last reported values.
final Configuration newMergedOverrideConfig = getMergedOverrideConfiguration();
- mLastReportedConfiguration.setConfiguration(service.getGlobalConfiguration(),
- newMergedOverrideConfig);
+
+ setLastReportedConfiguration(service.getGlobalConfiguration(), newMergedOverrideConfig);
if (changes == 0 && !forceNewConfig) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 88d894449185..61d9a007d25f 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -1293,7 +1293,6 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta
// created controller for the activity we are starting yet.
mWindowContainerController.positionChildAt(appController, index);
}
- r.onOverrideConfigurationSent();
// Make sure the list of display UID whitelists is updated
// now that this record is in a new task.