From 2d783ce2f4b2e507bead0d723f0edcdf902dbd46 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 7 Apr 2014 14:11:48 -0700 Subject: Fix pre sdk-18 compatibility (crash in dispatchDraw) issue 13801679 Change-Id: I25b997179fd8eb7cdec6fc48d81533fb1c3094ce --- src/com/android/launcher3/DragLayer.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java index bbf8c8c10..cd51c96e1 100644 --- a/src/com/android/launcher3/DragLayer.java +++ b/src/com/android/launcher3/DragLayer.java @@ -75,6 +75,7 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang private View mOverlayView; private int mTopViewIndex; + private int mChildCountOnLastUpdate = -1; /** * Used to create a new DragLayer from XML. @@ -736,13 +737,7 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang mDropAnim.cancel(); } if (mDropView != null) { - final DragView dropView = mDropView; - post(new Runnable() { - @Override - public void run() { - mDragController.onDeferredEndDrag(dropView); - } - }); + mDragController.onDeferredEndDrag(mDropView); } mDropView = null; invalidate(); @@ -802,10 +797,19 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang mTopViewIndex = i; } } + mChildCountOnLastUpdate = childCount; } @Override protected int getChildDrawingOrder(int childCount, int i) { + if (mChildCountOnLastUpdate != childCount) { + // between platform versions 17 and 18, behavior for onChildViewRemoved / Added changed. + // Pre-18, the child was not added / removed by the time of those callbacks. We need to + // force update our representation of things here to avoid crashing on pre-18 devices + // in certain instances. + updateChildIndices(); + } + // i represents the current draw iteration if (mTopViewIndex == -1) { // in general we do nothing -- cgit v1.2.3