Merge "Reconfigure display info. after configuration changes." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
10f4f44efe
@@ -846,6 +846,13 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
// since they won't be notified through the app window animator.
|
// since they won't be notified through the app window animator.
|
||||||
final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>();
|
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. */
|
/** Listener to notify activity manager about app transitions. */
|
||||||
private final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier
|
private final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier
|
||||||
= new WindowManagerInternal.AppTransitionListener() {
|
= new WindowManagerInternal.AppTransitionListener() {
|
||||||
@@ -3694,7 +3701,19 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
|
|
||||||
private int[] onConfigurationChanged() {
|
private int[] onConfigurationChanged() {
|
||||||
mPolicy.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();
|
mChangedStackList.clear();
|
||||||
for (int stackNdx = mStackIdToStack.size() - 1; stackNdx >= 0; stackNdx--) {
|
for (int stackNdx = mStackIdToStack.size() - 1; stackNdx >= 0; stackNdx--) {
|
||||||
final TaskStack stack = mStackIdToStack.valueAt(stackNdx);
|
final TaskStack stack = mStackIdToStack.valueAt(stackNdx);
|
||||||
@@ -8852,6 +8871,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
mWaitingForConfig = true;
|
mWaitingForConfig = true;
|
||||||
startFreezingDisplayLocked(false, 0, 0);
|
startFreezingDisplayLocked(false, 0, 0);
|
||||||
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
|
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
|
||||||
|
if (!mReconfigureOnConfigurationChanged.contains(displayContent)) {
|
||||||
|
mReconfigureOnConfigurationChanged.add(displayContent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mWindowPlacerLocked.performSurfacePlacement();
|
mWindowPlacerLocked.performSurfacePlacement();
|
||||||
|
|||||||
Reference in New Issue
Block a user