Fix WindowContextTests

Previously, window token assigns last config to mLastReportedConfiguration
directly, which makes it share the same reference with getConfiguration(),
and blocks all config changes request to clients.

This CL uses Configuration#setTo instead.

fixes: 152227175
Bug: 150251036
Test: atest WindowContextTests

Change-Id: I44143aa558f223eb301e28f2e9110bfd66eac636
This commit is contained in:
Charles Chen
2020-03-27 16:42:29 +08:00
parent 1a46294fdb
commit 7ba8e26c87
2 changed files with 8 additions and 7 deletions

View File

@@ -67,13 +67,11 @@ public class WindowTokenClient extends IWindowToken.Stub {
}
final int currentDisplayId = context.getDisplayId();
final boolean displayChanged = newDisplayId != currentDisplayId;
final Configuration config = new Configuration(context.getResources()
.getConfiguration());
final boolean configChanged = config.isOtherSeqNewer(newConfig)
&& config.updateFrom(newConfig) != 0;
final Configuration config = context.getResources().getConfiguration();
final boolean configChanged = config.diff(newConfig) != 0;
if (displayChanged || configChanged) {
// TODO(ag/9789103): update resource manager logic to track non-activity tokens
mResourcesManager.updateResourcesForActivity(this, config, newDisplayId,
mResourcesManager.updateResourcesForActivity(this, newConfig, newDisplayId,
displayChanged);
}
if (displayChanged) {

View File

@@ -422,14 +422,17 @@ class WindowToken extends WindowContainer<WindowState> {
if (!shouldReportToClient()) {
return;
}
if (mLastReportedConfig == null) {
mLastReportedConfig = new Configuration();
}
final Configuration config = getConfiguration();
final int displayId = getDisplayContent().getDisplayId();
if (config.equals(mLastReportedConfig) && displayId == mLastReportedDisplay) {
if (config.diff(mLastReportedConfig) == 0 && displayId == mLastReportedDisplay) {
// No changes since last reported time.
return;
}
mLastReportedConfig = config;
mLastReportedConfig.setTo(config);
mLastReportedDisplay = displayId;
IWindowToken windowTokenClient = IWindowToken.Stub.asInterface(token);