From fc56377178facb133e5e4f759f51be9ea2642c82 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Wed, 4 May 2016 13:34:30 -0700 Subject: [PATCH] Fix View leakage from mPreSortedChildren bug:28553824 Change-Id: I62bfa3dcb121792dff7d00be1f4b018a99c96e1d --- core/java/android/view/ViewGroup.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 3f7bbdf24e97e..b316cca1140b3 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -1718,11 +1718,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (isTransformedTouchPointInView(x, y, child, point)) { final PointerIcon pointerIcon = child.getPointerIcon(event, point.x, point.y); if (pointerIcon != null) { + if (preorderedList != null) preorderedList.clear(); return pointerIcon; } break; } } + if (preorderedList != null) preorderedList.clear(); } // The pointer is not a child or the child has no preferences, returning the default @@ -3028,6 +3030,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final ViewStructure cstructure = structure.newChild(i); child.dispatchProvideStructure(cstructure); } + if (preorderedList != null) preorderedList.clear(); } } } @@ -3619,6 +3622,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (mPreSortedChildren == null) { mPreSortedChildren = new ArrayList<>(childrenCount); } else { + // callers should clear, so clear shouldn't be necessary, but for safety... + mPreSortedChildren.clear(); mPreSortedChildren.ensureCapacity(childrenCount); }