summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wale Ogunwale <ogunwale@google.com> 2016-04-22 19:52:16 +0000
committer android-build-merger <android-build-merger@google.com> 2016-04-22 19:52:16 +0000
commit3cd052d38cfa3f113b7d0e842b3e5aafc9667e5f (patch)
treea3036210391730b0594c4bf7e554e131f595af1b
parent6ce373a4c867e52f02f0bba68a5e6a50e8c18b28 (diff)
parent10f4f44efe0eeb47ea63471c221d7a765f55e3ae (diff)
Merge "Reconfigure display info. after configuration changes." into nyc-dev
am: 10f4f44 * commit '10f4f44efe0eeb47ea63471c221d7a765f55e3ae': Reconfigure display info. after configuration changes. Change-Id: Ie301b0c3cdd5b40c6e9f559b30770fe046145f43
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index ff6363285229..044828b2ec3a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -846,6 +846,13 @@ public class WindowManagerService extends IWindowManager.Stub
// since they won't be notified through the app window animator.
final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>();
+ // List of displays to reconfigure after configuration changes.
+ // Some of the information reported for a display is dependent on resources to do the right
+ // calculations. For example, {@link DisplayInfo#smallestNominalAppWidth} and company are
+ // dependent on the height and width of the status and nav bar which change depending on the
+ // current configuration.
+ private final DisplayContentList mReconfigureOnConfigurationChanged = new DisplayContentList();
+
/** Listener to notify activity manager about app transitions. */
private final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier
= new WindowManagerInternal.AppTransitionListener() {
@@ -3694,7 +3701,19 @@ public class WindowManagerService extends IWindowManager.Stub
private int[] onConfigurationChanged() {
mPolicy.onConfigurationChanged();
- getDefaultDisplayContentLocked().getDockedDividerController().onConfigurationChanged();
+
+ final DisplayContent defaultDisplayContent = getDefaultDisplayContentLocked();
+ if (!mReconfigureOnConfigurationChanged.contains(defaultDisplayContent)) {
+ // The default display size information is heavily dependent on the resources in the
+ // current configuration, so we need to reconfigure it everytime the configuration
+ // changes. See {@link PhoneWindowManager#setInitialDisplaySize}...sigh...
+ mReconfigureOnConfigurationChanged.add(defaultDisplayContent);
+ }
+ for (int i = mReconfigureOnConfigurationChanged.size() - 1; i >= 0; i--) {
+ reconfigureDisplayLocked(mReconfigureOnConfigurationChanged.remove(i));
+ }
+
+ defaultDisplayContent.getDockedDividerController().onConfigurationChanged();
mChangedStackList.clear();
for (int stackNdx = mStackIdToStack.size() - 1; stackNdx >= 0; stackNdx--) {
final TaskStack stack = mStackIdToStack.valueAt(stackNdx);
@@ -8852,6 +8871,9 @@ public class WindowManagerService extends IWindowManager.Stub
mWaitingForConfig = true;
startFreezingDisplayLocked(false, 0, 0);
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
+ if (!mReconfigureOnConfigurationChanged.contains(displayContent)) {
+ mReconfigureOnConfigurationChanged.add(displayContent);
+ }
}
mWindowPlacerLocked.performSurfacePlacement();