diff options
| author | 2016-04-22 19:52:16 +0000 | |
|---|---|---|
| committer | 2016-04-22 19:52:16 +0000 | |
| commit | 3cd052d38cfa3f113b7d0e842b3e5aafc9667e5f (patch) | |
| tree | a3036210391730b0594c4bf7e554e131f595af1b | |
| parent | 6ce373a4c867e52f02f0bba68a5e6a50e8c18b28 (diff) | |
| parent | 10f4f44efe0eeb47ea63471c221d7a765f55e3ae (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.java | 24 |
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(); |