diff options
author | 2016-01-12 01:39:26 +0000 | |
---|---|---|
committer | 2016-01-12 01:39:26 +0000 | |
commit | f2c9628cac0240b9a39b8eadddf4c0528cd45c2d (patch) | |
tree | 4d6f991324eb7029d3536ec7f887e65cd61e4abf | |
parent | fadc86666f25e3d773be01c746bfae17a860cd6a (diff) | |
parent | 2a88fc31cf16b419fdd23c9841ffdbfe7af9d966 (diff) |
Merge "Apply scroll to windows added to a non-resizeble task that's docked"
5 files changed, 21 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 51787b066859..a9025bda2fbc 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -393,7 +393,7 @@ class DisplayContent { } mTouchExcludeRegion.op(mTmpRect, Region.Op.DIFFERENCE); } - if (task.isDockedInEffect() && !task.isResizeable()) { + if (task.isTwoFingerScrollMode()) { stack.getBounds(mTmpRect); mNonResizeableRegion.op(mTmpRect, Region.Op.UNION); break; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 47a4936b144f..6bb3e20727e8 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -571,6 +571,10 @@ class Task implements DimLayer.DimLayerUser { return inDockedWorkspace() || isResizeableByDockedStack(); } + boolean isTwoFingerScrollMode() { + return isDockedInEffect() && !isResizeable(); + } + WindowState getTopVisibleAppMainWindow() { final AppWindowToken token = getTopVisibleAppToken(); return token != null ? token.findMainWindow() : null; diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 369cc6524d56..e75780f6a095 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -130,7 +130,7 @@ public class TaskStack implements DimLayer.DimLayerUser { Configuration config = configs.get(task.mTaskId); if (config != null) { Rect bounds = taskBounds.get(task.mTaskId); - if (!task.isResizeable() && task.isDockedInEffect()) { + if (task.isTwoFingerScrollMode()) { // This is a non-resizeable task that's docked (or side-by-side to the docked // stack). It might have been scrolled previously, and after the stack resizing, // it might no longer fully cover the stack area. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index b96cbfbd7017..685df25910d6 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1990,6 +1990,10 @@ public class WindowManagerService extends IWindowManager.Stub } } + // If the window is being added to a task that's docked but non-resizeable, + // we need to update this new window's scroll position when it's added. + win.applyScrollIfNeeded(); + if (type == TYPE_DOCK_DIVIDER) { getDefaultDisplayContentLocked().getDockedDividerController().setWindow(win); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index b7fd60f1c201..058fa67a5e4a 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1458,15 +1458,24 @@ final class WindowState implements WindowManagerPolicy.WindowState { } boolean inDockedWorkspace() { - Task task = getTask(); + final Task task = getTask(); return task != null && task.inDockedWorkspace(); } boolean isDockedInEffect() { - Task task = getTask(); + final Task task = getTask(); return task != null && task.isDockedInEffect(); } + void applyScrollIfNeeded() { + final Task task = getTask(); + if (task != null && task.isTwoFingerScrollMode()) { + task.getDimBounds(mTmpRect); + mXOffset = mTmpRect.left; + mYOffset = mTmpRect.top; + } + } + int getTouchableRegion(Region region, int flags) { final boolean modal = (flags & (FLAG_NOT_TOUCH_MODAL | FLAG_NOT_FOCUSABLE)) == 0; if (modal && mAppToken != null) { |