diff options
| author | Alan Viverette <alanv@google.com> | 2015-04-28 17:10:40 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-28 17:10:41 +0000 |
| commit | 6af08c6b7693b4329184c9cccbc474a0b6a9ea5c (patch) | |
| tree | c9c4aeb680965071f9889b5bf5edefdf91e8876e /core/java/android/widget/RemoteViewsAdapter.java | |
| parent | 375e21f811a37b5ea191ea1f092c3d11947d1ab0 (diff) | |
| parent | 6d06825ad8809353785eec2f337a6da65ec187fa (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.java | 10 |
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 |
