diff options
| author | 2017-02-10 18:43:47 +0000 | |
|---|---|---|
| committer | 2017-02-10 18:43:47 +0000 | |
| commit | 07a6ff69897b93f6552394e71a0d7c110641d6f5 (patch) | |
| tree | 71ac9c88a5488cfbd39e6c367286d024832e1d1b | |
| parent | 90629b8789b95c232d663f6c5a8755bcd4331ddc (diff) | |
| parent | 41023417e7b9b0e79947fd36880e7726902fb1d1 (diff) | |
Merge "Don't scroll popup parent in response to parent scrolling" into nyc-mr2-dev
am: 41023417e7
Change-Id: I4e42386e1f227e2cb48bf37eb05bcf7f81b6d709
| -rw-r--r-- | core/java/android/widget/PopupWindow.java | 24 | 
1 files changed, 15 insertions, 9 deletions
| diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 883fc2308e12..473585857d11 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -223,7 +223,7 @@ public class PopupWindow {                          mDecorView.getLayoutParams();                  updateAboveAnchor(findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, -                        p.width, p.height, mAnchoredGravity)); +                        p.width, p.height, mAnchoredGravity, false));                  update(p.x, p.y, -1, -1, true);              }          } @@ -1227,7 +1227,7 @@ public class PopupWindow {          preparePopup(p);          final boolean aboveAnchor = findDropDownPosition(anchor, p, xoff, yoff, -                p.width, p.height, gravity); +                p.width, p.height, gravity, mAllowScrollingAnchorParent);          updateAboveAnchor(aboveAnchor);          p.accessibilityIdOfAnchor = (anchor != null) ? anchor.getAccessibilityViewId() : -1; @@ -1519,10 +1519,12 @@ public class PopupWindow {       * @param xOffset absolute horizontal offset from the left of the anchor       * @param yOffset absolute vertical offset from the top of the anchor       * @param gravity horizontal gravity specifying popup alignment +     * @param allowScroll whether the anchor view's parent may be scrolled +     *                    when the popup window doesn't fit on screen       * @return true if the popup is translated upwards to fit on screen       */      private boolean findDropDownPosition(View anchor, WindowManager.LayoutParams outParams, -            int xOffset, int yOffset, int width, int height, int gravity) { +            int xOffset, int yOffset, int width, int height, int gravity, boolean allowScroll) {          final int anchorHeight = anchor.getHeight();          final int anchorWidth = anchor.getWidth();          if (mOverlapAnchor) { @@ -1576,7 +1578,7 @@ public class PopupWindow {              final int scrollY = anchor.getScrollY();              final Rect r = new Rect(scrollX, scrollY, scrollX + width + xOffset,                      scrollY + height + anchorHeight + yOffset); -            if (mAllowScrollingAnchorParent && anchor.requestRectangleOnScreen(r, true)) { +            if (allowScroll && anchor.requestRectangleOnScreen(r, true)) {                  // Reset for the new anchor position.                  anchor.getLocationInWindow(drawingLocation);                  outParams.x = drawingLocation[0] + xOffset; @@ -2172,15 +2174,19 @@ public class PopupWindow {          }          final boolean aboveAnchor = findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, -                width, height, gravity); +                width, height, gravity, mAllowScrollingAnchorParent);          updateAboveAnchor(aboveAnchor);          final boolean paramsChanged = oldGravity != p.gravity || oldX != p.x || oldY != p.y                  || oldWidth != p.width || oldHeight != p.height; -        // If width and mWidth were both < 0 then we have a MATCH_PARENT/WRAP_CONTENT case. -        // findDropDownPosition will have resolved this to absolute values, -        // but we don't want to update mWidth/mHeight to these absolute values. -        update(p.x, p.y, width < 0 ? width : p.width, height < 0 ? height : p.height, paramsChanged); + +        // If width and mWidth were both < 0 then we have a MATCH_PARENT or +        // WRAP_CONTENT case. findDropDownPosition will have resolved this to +        // absolute values, but we don't want to update mWidth/mHeight to these +        // absolute values. +        final int newWidth = width < 0 ? width : p.width; +        final int newHeight = height < 0 ? height : p.height; +        update(p.x, p.y, newWidth, newHeight, paramsChanged);      }      /** |