diff options
| author | 2015-09-30 21:44:37 +0000 | |
|---|---|---|
| committer | 2015-09-30 21:44:37 +0000 | |
| commit | 6f81ff67fc2ce9def41f11bee11cc4563b0bcba5 (patch) | |
| tree | eea526acd7693bf5212f15663a60b52dcd38793c | |
| parent | 5482018a314e54a3acd8cddc2fc82724d20f7bb4 (diff) | |
| parent | e95b0aef6d259ff9322bd9a34e36e61737844eee (diff) | |
Merge "Improve visibility and layering of dock divider."
5 files changed, 34 insertions, 30 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index dbc3970cf4cf..c265000f13f5 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2105,6 +2105,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_WALLPAPER: // wallpaper is at the bottom, though the window manager may move it. return 2; + case TYPE_DOCK_DIVIDER: + return 2; case TYPE_PHONE: return 3; case TYPE_SEARCH_BAR: @@ -2135,56 +2137,54 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_INPUT_METHOD_DIALOG: // on-screen keyboards and other such input method user interfaces go here. return 13; - case TYPE_DOCK_DIVIDER: - return 14; case TYPE_KEYGUARD_SCRIM: // the safety window that shows behind keyguard while keyguard is starting - return 15; + return 14; case TYPE_STATUS_BAR_SUB_PANEL: - return 16; + return 15; case TYPE_STATUS_BAR: - return 17; + return 16; case TYPE_STATUS_BAR_PANEL: - return 18; + return 17; case TYPE_KEYGUARD_DIALOG: - return 19; + return 18; case TYPE_VOLUME_OVERLAY: // the on-screen volume indicator and controller shown when the user // changes the device volume - return 20; + return 19; case TYPE_SYSTEM_OVERLAY: // the on-screen volume indicator and controller shown when the user // changes the device volume - return 21; + return 20; case TYPE_NAVIGATION_BAR: // the navigation bar, if available, shows atop most things - return 22; + return 21; case TYPE_NAVIGATION_BAR_PANEL: // some panels (e.g. search) need to show on top of the navigation bar - return 23; + return 22; case TYPE_SYSTEM_ERROR: // system-level error dialogs - return 24; + return 23; case TYPE_MAGNIFICATION_OVERLAY: // used to highlight the magnified portion of a display - return 25; + return 24; case TYPE_DISPLAY_OVERLAY: // used to simulate secondary display devices - return 26; + return 25; case TYPE_DRAG: // the drag layer: input for drag-and-drop is associated with this window, // which sits above all other focusable windows - return 27; + return 26; case TYPE_ACCESSIBILITY_OVERLAY: // overlay put by accessibility services to intercept user interaction - return 28; + return 27; case TYPE_SECURE_SYSTEM_OVERLAY: - return 29; + return 28; case TYPE_BOOT_PROGRESS: - return 30; + return 29; case TYPE_POINTER: // the (mouse) pointer layer - return 31; + return 30; } Log.e(TAG, "Unknown window type: " + type); return 2; diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index a64cda60ec1b..cc51d204e98d 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1032,6 +1032,7 @@ public class AppTransition implements Dump { 0, top - containingFrame.top, 0); set.addAnimation(translate); set.setDuration(DEFAULT_APP_TRANSITION_DURATION); + set.setZAdjustment(Animation.ZORDER_TOP); return set; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 6d0d85f6e3e9..74572cfcdee2 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -222,6 +222,7 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean HIDE_STACK_CRAWLS = true; static final int LAYOUT_REPEAT_THRESHOLD = 4; + static final boolean PROFILE_ORIENTATION = false; static final boolean localLOGV = DEBUG; @@ -4399,7 +4400,6 @@ public class WindowManagerService extends IWindowManager.Stub mInputMonitor.setUpdateInputWindowsNeededLw(); mWindowPlacerLocked.performSurfacePlacement(); mInputMonitor.updateInputWindowsLw(false /*force*/); - //dump(); } @@ -4484,10 +4484,6 @@ public class WindowManagerService extends IWindowManager.Stub } stack.attachDisplayContent(displayContent); displayContent.attachStack(stack, onTop); - if (stack.mStackId == DOCKED_STACK_ID) { - mH.obtainMessage(H.UPDATE_DOCKED_STACK_DIVIDER, - displayContent).sendToTarget(); - } moveStackWindowsLocked(displayContent); final WindowList windows = displayContent.getWindowList(); for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { @@ -4510,11 +4506,6 @@ public class WindowManagerService extends IWindowManager.Stub void detachStackLocked(DisplayContent displayContent, TaskStack stack) { displayContent.detachStack(stack); stack.detachDisplay(); - // We can't directly remove the divider, because only the WM thread can do these operations - // and we can be on AM thread. - if (stack.mStackId == DOCKED_STACK_ID) { - mH.obtainMessage(H.UPDATE_DOCKED_STACK_DIVIDER, displayContent).sendToTarget(); - } } public void detachStack(int stackId) { @@ -8346,6 +8337,13 @@ public class WindowManagerService extends IWindowManager.Stub } else if (wtoken != null) { winAnimator.mAnimLayer = w.mLayer + wtoken.mAppAnimator.animLayerAdjustment; + if (wtoken.mReplacingWindow && wtoken.mAnimateReplacingWindow) { + // We know that we will be animating a relaunching window in the near future, + // which will receive a z-order increase. We want the replaced window to + // immediately receive the same treatment, e.g. to be above the dock divider. + w.mLayer += TYPE_LAYER_OFFSET; + winAnimator.mAnimLayer += TYPE_LAYER_OFFSET; + } } else { winAnimator.mAnimLayer = w.mLayer; } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index a32b17139bb3..60bf57154bc6 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1405,7 +1405,11 @@ class WindowStateAnimator { private void adjustCropToStackBounds(WindowState w, Rect clipRect) { final AppWindowToken appToken = w.mAppToken; - if (appToken != null && appToken.mCropWindowsToStack) { + // We don't apply the the stack bounds to the window that is being replaced, because it was + // living in a different stack. If we suddenly crop it to the new stack bounds, it might + // get cut off. We don't want it to happen, so we let it ignore the stack bounds until it + // gets removed. The window that will replace it will abide them. + if (appToken != null && appToken.mCropWindowsToStack && !appToken.mReplacingWindow) { TaskStack stack = w.getTask().mStack; stack.getBounds(mTmpStackBounds); final int surfaceX = (int) mSurfaceX; diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index d86a8afe1499..df0a1c9d43d5 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -967,6 +967,7 @@ class WindowSurfacePlacer { } mService.mPolicy.finishLayoutLw(); + mService.mH.obtainMessage(UPDATE_DOCKED_STACK_DIVIDER, displayContent).sendToTarget(); } /** |