From cb66406d33a185fdd181cbdf558abf976b26abc2 Mon Sep 17 00:00:00 2001 From: Abodunrinwa Toki Date: Fri, 13 May 2016 19:26:03 +0100 Subject: [PATCH] Ensure that ViewGroup.getChildVisibleRect(...) is recursive. This change fixes the issue where getChildVisibleRect(View, Rect, Point, boolean) call isn't recursive. The method was introduced in I49550ed4082bcbdcfe4643b962b50f3308092525 Bug: 28514727 Change-Id: Ib6b0fb67ca6c700b44f645319c23b1213a2742d4 --- core/java/android/view/ViewGroup.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 0222d376b44e4..b060fa7b6449b 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -5482,6 +5482,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** + * @param forceParentCheck true to guarantee that this call will propagate to all ancestors, + * false otherwise + * * @hide */ public boolean getChildVisibleRect( @@ -5541,7 +5544,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager (int) Math.ceil(rect.right), (int) Math.ceil(rect.bottom)); if ((forceParentCheck || rectIsVisible) && mParent != null) { - rectIsVisible = mParent.getChildVisibleRect(this, r, offset); + if (mParent instanceof ViewGroup) { + rectIsVisible = ((ViewGroup) mParent) + .getChildVisibleRect(this, r, offset, forceParentCheck); + } else { + rectIsVisible = mParent.getChildVisibleRect(this, r, offset); + } } return rectIsVisible; }