diff options
author | Anthony Lee <anthonylee@google.com> | 2015-01-22 07:56:19 -0800 |
---|---|---|
committer | Anthony Lee <anthonylee@google.com> | 2015-01-22 08:57:32 -0800 |
commit | e48124fa2d295c68cdb95f962ef8bd6d35a7c145 (patch) | |
tree | 150990e26216bfeaf1f6093571cdddd3d9768c4a /src | |
parent | 1eb16ea1adca302ff19f64d6ae55e586194a6127 (diff) |
Fix crasher due to IndexOutOfBoundsException
Make sure that we check for the index to exist in the list before
we query for it. The problem is that the index is grabbed from the
listview but then applied to the contact entry arraylist. It is
possible that these two are out of temporarily out of sync. This check
will make sure that we do not throw an exception in those cases.
Bug: 19103509
Change-Id: Iba620ec859866b9f8bfc2614a17b1b1a11037230
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/dialer/list/PhoneFavoritesTileAdapter.java | 2 | ||||
-rw-r--r-- | src/com/android/dialer/list/SpeedDialFragment.java | 14 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java index 3f670127f..e957c8321 100644 --- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java +++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java @@ -431,7 +431,7 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements * @param itemIndex Position of the contact in {@link #mContactEntries}. * @return True if the given index is valid for {@link #mContactEntries}. */ - private boolean isIndexInBound(int itemIndex) { + public boolean isIndexInBound(int itemIndex) { return itemIndex >= 0 && itemIndex < mContactEntries.size(); } diff --git a/src/com/android/dialer/list/SpeedDialFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java index a42031677..63f1f34c6 100644 --- a/src/com/android/dialer/list/SpeedDialFragment.java +++ b/src/com/android/dialer/list/SpeedDialFragment.java @@ -312,6 +312,12 @@ public class SpeedDialFragment extends Fragment implements OnItemClickListener, for (int i = 0; i < mListView.getChildCount(); i++) { final View child = mListView.getChildAt(i); final int position = firstVisiblePosition + i; + // Since we are getting the position from mListView and then querying + // mContactTileAdapter, its very possible that things are out of sync + // and we might index out of bounds. Let's make sure that this doesn't happen. + if (!mContactTileAdapter.isIndexInBound(position)) { + continue; + } final long itemId = mContactTileAdapter.getItemId(position); if (DEBUG) { Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: " @@ -320,7 +326,6 @@ public class SpeedDialFragment extends Fragment implements OnItemClickListener, mItemIdTopMap.put(itemId, child.getTop()); mItemIdLeftMap.put(itemId, child.getLeft()); } - mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight); } @@ -348,6 +353,13 @@ public class SpeedDialFragment extends Fragment implements OnItemClickListener, final View child = mListView.getChildAt(i); int position = firstVisiblePosition + i; + // Since we are getting the position from mListView and then querying + // mContactTileAdapter, its very possible that things are out of sync + // and we might index out of bounds. Let's make sure that this doesn't happen. + if (!mContactTileAdapter.isIndexInBound(position)) { + continue; + } + final long itemId = mContactTileAdapter.getItemId(position); if (containsId(idsInPlace, itemId)) { |