From 6f13342ffd3f968de9ff86b988621cc91d94adff Mon Sep 17 00:00:00 2001 From: Patrick Dubroy Date: Thu, 24 Feb 2011 12:16:12 -0800 Subject: Fix 3482911: NPE in CustomizePagedView.resetCheckedItem Also fixes an issue where quick swipes on an item could cause it to animate in from (0, 0) sometimes. Change-Id: Ie3312389bcb5109f4b26ec518a29b4aa88161377 --- src/com/android/launcher2/CustomizePagedView.java | 16 ++++++++-------- src/com/android/launcher2/DragView.java | 8 ++++++++ src/com/android/launcher2/PagedView.java | 10 +--------- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java index 2f2cb24ab..2b54e3f3c 100644 --- a/src/com/android/launcher2/CustomizePagedView.java +++ b/src/com/android/launcher2/CustomizePagedView.java @@ -337,14 +337,15 @@ public class CustomizePagedView extends PagedViewWithDraggableItems /** * Similar to resetCheckedGrandchildren, but allows us to specify that it's not animated. - * NOTE: This assumes that only a single item can be checked. */ private void resetCheckedItem(boolean animated) { - Checkable checkable = getCheckedGrandchildren().get(0); - if (checkable instanceof PagedViewWidget) { - ((PagedViewWidget) checkable).setChecked(false, animated); - } else { - ((PagedViewIcon) checkable).setChecked(false, animated); + final Checkable checkable = getSingleCheckedGrandchild(); + if (checkable != null) { + if (checkable instanceof PagedViewWidget) { + ((PagedViewWidget) checkable).setChecked(false, animated); + } else { + ((PagedViewIcon) checkable).setChecked(false, animated); + } } } @@ -353,8 +354,7 @@ public class CustomizePagedView extends PagedViewWithDraggableItems // Create a view, identical to the drag view, that is only used for animating the // item onto the home screen (or back to its original position, if the drop failed). - final int[] pos = new int[2]; - mDragController.getDragView().getLocationOnScreen(pos); + final int[] pos = mDragController.getDragView().getPosition(null); final View animView = dragLayer.createDragView(mDragBitmap, pos[0], pos[1]); animView.setVisibility(View.VISIBLE); diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java index c0776a9f2..45620b90b 100644 --- a/src/com/android/launcher2/DragView.java +++ b/src/com/android/launcher2/DragView.java @@ -245,5 +245,13 @@ public class DragView extends View { void remove() { mWindowManager.removeView(this); } + + int[] getPosition(int[] result) { + WindowManager.LayoutParams lp = mLayoutParams; + if (result == null) result = new int[2]; + result[0] = lp.x; + result[1] = lp.y; + return result; + } } diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index 41521041d..66383cb6b 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -1420,7 +1420,7 @@ public abstract class PagedView extends ViewGroup { * Otherwise, returns null. */ protected Checkable getSingleCheckedGrandchild() { - if (mChoiceMode == CHOICE_MODE_SINGLE) { + if (mChoiceMode != CHOICE_MODE_MULTIPLE) { final int childCount = getChildCount(); for (int i = 0; i < childCount; ++i) { Page layout = (Page) getChildAt(i); @@ -1436,14 +1436,6 @@ public abstract class PagedView extends ViewGroup { return null; } - public Object getChosenItem() { - View checkedView = (View) getSingleCheckedGrandchild(); - if (checkedView != null) { - return checkedView.getTag(); - } - return null; - } - protected void resetCheckedGrandchildren() { // loop through children, and set all of their children to _not_ be checked final ArrayList checked = getCheckedGrandchildren(); -- cgit v1.2.3