diff options
| -rw-r--r-- | core/java/android/view/ViewGroup.java | 16 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/FloatingActionMode.java | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 3f7bbdf24e97..6cf8cd16f187 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -5473,6 +5473,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager @Override public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { + return getChildVisibleRect(child, r, offset, false); + } + + /** + * @hide + */ + public boolean getChildVisibleRect( + View child, Rect r, android.graphics.Point offset, boolean forceParentCheck) { // It doesn't make a whole lot of sense to call this on a view that isn't attached, // but for some simple tests it can be useful. If we don't have attach info this // will allocate memory. @@ -5512,20 +5520,22 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager rectIsVisible = rect.intersect(0, 0, width, height); } - if (rectIsVisible && (mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK) { + if ((forceParentCheck || rectIsVisible) + && (mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK) { // Clip to padding. rectIsVisible = rect.intersect(mPaddingLeft, mPaddingTop, width - mPaddingRight, height - mPaddingBottom); } - if (rectIsVisible && mClipBounds != null) { + if ((forceParentCheck || rectIsVisible) && mClipBounds != null) { // Clip to clipBounds. rectIsVisible = rect.intersect(mClipBounds.left, mClipBounds.top, mClipBounds.right, mClipBounds.bottom); } r.set((int) Math.floor(rect.left), (int) Math.floor(rect.top), (int) Math.ceil(rect.right), (int) Math.ceil(rect.bottom)); - if (rectIsVisible && mParent != null) { + + if ((forceParentCheck || rectIsVisible) && mParent != null) { rectIsVisible = mParent.getChildVisibleRect(this, r, offset); } return rectIsVisible; diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java index ccdb024820c8..31ab26fe4eaf 100644 --- a/core/java/com/android/internal/view/FloatingActionMode.java +++ b/core/java/com/android/internal/view/FloatingActionMode.java @@ -173,7 +173,8 @@ public class FloatingActionMode extends ActionMode { final ViewParent parent = mOriginatingView.getParent(); if (parent instanceof ViewGroup) { ((ViewGroup) parent).getChildVisibleRect( - mOriginatingView, mContentRectOnScreen, null /* offset */); + mOriginatingView, mContentRectOnScreen, + null /* offset */, true /* forceParentCheck */); mContentRectOnScreen.offset(mRootViewPositionOnScreen[0], mRootViewPositionOnScreen[1]); } else { mContentRectOnScreen.offset(mViewPositionOnScreen[0], mViewPositionOnScreen[1]); |