am 67ceb111: am 7c35a8e9: Merge "Fix crasher due to IndexOutOfBoundsException" into lmp-mr1-dev

* commit '67ceb111e606192883f34441832f6c1b203f910a':
  Fix crasher due to IndexOutOfBoundsException
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 3f67012..e957c83 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -431,7 +431,7 @@
      * @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 a420316..63f1f34 100644
--- a/src/com/android/dialer/list/SpeedDialFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -312,6 +312,12 @@
         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 @@
             mItemIdTopMap.put(itemId, child.getTop());
             mItemIdLeftMap.put(itemId, child.getLeft());
         }
-
         mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
     }
 
@@ -348,6 +353,13 @@
                     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)) {