diff options
author | Jorim Jaggi <jjaggi@google.com> | 2016-02-09 01:56:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-02-09 01:56:23 +0000 |
commit | 93f04f89202d269fbb38c6f2ffacc3fa01728bbc (patch) | |
tree | e4eda10b0156915842568fbe80790a0f91a4823d | |
parent | c5c898640fd79562a3f278dbe825b39b0b65c7f7 (diff) | |
parent | 81ba11eccbc2519338782100c13cf4a5909ad6be (diff) |
Merge "Put dismiss end target at navigation bar" into nyc-dev
5 files changed, 36 insertions, 8 deletions
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 6e38b3268683..947906bf4403 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -460,6 +460,11 @@ public interface WindowManagerPolicy { /** Unregister a system listener for touch events */ void unregisterPointerEventListener(PointerEventListener listener); + + /** + * @return The content insets of the docked divider window. + */ + int getDockedDividerInsetsLw(); } public interface PointerEventListener { diff --git a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java index 597c5225f89f..84d0fc70b1ca 100644 --- a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java +++ b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java @@ -136,8 +136,7 @@ public class DividerSnapAlgorithm { / (mFirstSplitTarget.position - getStartInset()); } else if (position > mLastSplitTarget.position) { return (float) (position - mLastSplitTarget.position) - / (mDismissEndTarget.position - getEndInset() - - mLastSplitTarget.position - mDividerSize); + / (mDismissEndTarget.position - mLastSplitTarget.position - mDividerSize); } return 0f; } @@ -222,7 +221,8 @@ public class DividerSnapAlgorithm { addMiddleTarget(isHorizontalDivision); break; } - mTargets.add(new SnapTarget(dividerMax, SnapTarget.FLAG_DISMISS_END, 0.35f)); + int navBarSize = isHorizontalDivision ? mInsets.bottom : mInsets.right; + mTargets.add(new SnapTarget(dividerMax - navBarSize, SnapTarget.FLAG_DISMISS_END, 0.35f)); } private void addFixedDivisionTargets(boolean isHorizontalDivision) { diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index a92cc31659e6..c046ba610b3a 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2645,11 +2645,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } } else if (win.getAttrs().type == TYPE_DOCK_DIVIDER) { - if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) { - return R.anim.fade_in; - } else if (transit == TRANSIT_EXIT) { - return R.anim.fade_out; - } + return selectDockedDividerAnimationLw(win, transit); } if (transit == TRANSIT_PREVIEW_DONE) { @@ -2669,6 +2665,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { return 0; } + private int selectDockedDividerAnimationLw(WindowState win, int transit) { + int insets = mWindowManagerFuncs.getDockedDividerInsetsLw(); + + // If the divider is behind the navigation bar, don't animate. + if (mNavigationBar != null + && (win.getFrameLw().top + insets >= mNavigationBar.getFrameLw().top + || win.getFrameLw().left + insets >= mNavigationBar.getFrameLw().left)) { + return 0; + } + if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) { + return R.anim.fade_in; + } else if (transit == TRANSIT_EXIT) { + return R.anim.fade_out; + } else { + return 0; + } + } + @Override public void selectRotationAnimationLw(int anim[]) { if (PRINT_ANIM) Slog.i(TAG, "selectRotationAnimation mTopFullscreen=" diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 72953183a173..412a45500157 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -72,6 +72,10 @@ public class DockedStackDividerController implements DimLayerUser { return mDividerWindowWidth - 2 * mDividerInsets; } + int getContentInsets() { + return mDividerInsets; + } + void setResizing(boolean resizing) { mResizing = resizing; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1b041cb751f1..d1ffaa07ed13 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -9619,6 +9619,11 @@ public class WindowManagerService extends IWindowManager.Stub && !appWindow.mTask.inFreeformWorkspace(); } + @Override + public int getDockedDividerInsetsLw() { + return getDefaultDisplayContentLocked().getDockedDividerController().getContentInsets(); + } + void dumpPolicyLocked(PrintWriter pw, String[] args, boolean dumpAll) { pw.println("WINDOW MANAGER POLICY STATE (dumpsys window policy)"); mPolicy.dump(" ", pw, args); |