summaryrefslogtreecommitdiff
path: root/core/java/android/widget/RemoteViewsAdapter.java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-04-28 17:10:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-28 17:10:41 +0000
commit6af08c6b7693b4329184c9cccbc474a0b6a9ea5c (patch)
treec9c4aeb680965071f9889b5bf5edefdf91e8876e /core/java/android/widget/RemoteViewsAdapter.java
parent375e21f811a37b5ea191ea1f092c3d11947d1ab0 (diff)
parent6d06825ad8809353785eec2f337a6da65ec187fa (diff)
Merge "Fix for infinite loop in RemoteViewsAdapter"
Diffstat (limited to 'core/java/android/widget/RemoteViewsAdapter.java')
-rw-r--r--core/java/android/widget/RemoteViewsAdapter.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 5eaf20c54f11..ab3406441cce 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -620,7 +620,15 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
// remove based on both its position as well as it's current memory usage, as well
// as whether it was directly requested vs. whether it was preloaded by our caching
// mechanism.
- mIndexRemoteViews.remove(getFarthestPositionFrom(pruneFromPosition, visibleWindow));
+ int trimIndex = getFarthestPositionFrom(pruneFromPosition, visibleWindow);
+
+ // Need to check that this is a valid index, to cover the case where you have only
+ // a single view in the cache, but it's larger than the max memory limit
+ if (trimIndex < 0) {
+ break;
+ }
+
+ mIndexRemoteViews.remove(trimIndex);
}
// Update the metadata cache