From 7ba8e26c87ff1fee827204dc076071590a657f8e Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Fri, 27 Mar 2020 16:42:29 +0800 Subject: [PATCH] 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 --- core/java/android/app/WindowTokenClient.java | 8 +++----- services/core/java/com/android/server/wm/WindowToken.java | 7 +++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/WindowTokenClient.java b/core/java/android/app/WindowTokenClient.java index 301960ec53f9e..b5d103959818d 100644 --- a/core/java/android/app/WindowTokenClient.java +++ b/core/java/android/app/WindowTokenClient.java @@ -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) { diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index 5976b48db7644..353cae0445df4 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -422,14 +422,17 @@ class WindowToken extends WindowContainer { 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);