diff options
author | Anthony Lee <anthonylee@google.com> | 2015-01-22 07:56:19 -0800 |
---|---|---|
committer | Natiq Ahmed <mnatiq@codeaurora.org> | 2015-03-13 15:00:45 +0530 |
commit | 698f9a627e5f538db8bf95f4b1992ff6beb9bbf7 (patch) | |
tree | 168ae58fa5284af9933e465290e0c6fc4ce04966 | |
parent | afa3a54bdbfd986ca85a6c888b63954fe75fd69e (diff) | |
download | android_packages_apps_Dialer-698f9a627e5f538db8bf95f4b1992ff6beb9bbf7.tar.gz android_packages_apps_Dialer-698f9a627e5f538db8bf95f4b1992ff6beb9bbf7.tar.bz2 android_packages_apps_Dialer-698f9a627e5f538db8bf95f4b1992ff6beb9bbf7.zip |
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
-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 26f888f5f..62e7dce08 100644 --- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java +++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java @@ -449,7 +449,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 4572404fc..03613d017 100644 --- a/src/com/android/dialer/list/SpeedDialFragment.java +++ b/src/com/android/dialer/list/SpeedDialFragment.java @@ -317,6 +317,12 @@ public class SpeedDialFragment extends AnalyticsFragment implements OnItemClickL 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: " @@ -325,7 +331,6 @@ public class SpeedDialFragment extends AnalyticsFragment implements OnItemClickL mItemIdTopMap.put(itemId, child.getTop()); mItemIdLeftMap.put(itemId, child.getLeft()); } - mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight); } @@ -353,6 +358,13 @@ public class SpeedDialFragment extends AnalyticsFragment implements OnItemClickL 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)) { |