Merge "Fix for loading the same contact photo twice."
diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
index fe73fbe..d8f4e65 100644
--- a/src/com/android/contacts/ContactPhotoManager.java
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -18,6 +18,7 @@
import com.android.contacts.model.AccountTypeManager;
import com.google.android.collect.Lists;
+import com.google.android.collect.Sets;
import android.content.ContentResolver;
import android.content.Context;
@@ -42,8 +43,9 @@
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.lang.ref.SoftReference;
-import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -439,8 +441,8 @@
/**
* Populates an array of photo IDs that need to be loaded.
*/
- private void obtainPhotoIdsAndUrisToLoad(ArrayList<Long> photoIds,
- ArrayList<String> photoIdsAsStrings, ArrayList<Uri> uris) {
+ private void obtainPhotoIdsAndUrisToLoad(Set<Long> photoIds,
+ Set<String> photoIdsAsStrings, Set<Uri> uris) {
photoIds.clear();
photoIdsAsStrings.clear();
uris.clear();
@@ -494,10 +496,10 @@
private final ContentResolver mResolver;
private final StringBuilder mStringBuilder = new StringBuilder();
- private final ArrayList<Long> mPhotoIds = Lists.newArrayList();
- private final ArrayList<String> mPhotoIdsAsStrings = Lists.newArrayList();
- private final ArrayList<Uri> mPhotoUris = Lists.newArrayList();
- private ArrayList<Long> mPreloadPhotoIds = Lists.newArrayList();
+ private final Set<Long> mPhotoIds = Sets.newHashSet();
+ private final Set<String> mPhotoIdsAsStrings = Sets.newHashSet();
+ private final Set<Uri> mPhotoUris = Sets.newHashSet();
+ private final List<Long> mPreloadPhotoIds = Lists.newArrayList();
private Handler mLoaderThreadHandler;
private byte mBuffer[];
@@ -657,16 +659,15 @@
}
private void loadPhotosFromDatabase(boolean preloading) {
- int count = mPhotoIds.size();
- if (count == 0) {
+ if (mPhotoIds.isEmpty()) {
return;
}
// Remove loaded photos from the preload queue: we don't want
// the preloading process to load them again.
if (!preloading && mPreloadStatus == PRELOAD_STATUS_IN_PROGRESS) {
- for (int i = 0; i < count; i++) {
- mPreloadPhotoIds.remove(mPhotoIds.get(i));
+ for (Long id : mPhotoIds) {
+ mPreloadPhotoIds.remove(id);
}
if (mPreloadPhotoIds.isEmpty()) {
mPreloadStatus = PRELOAD_STATUS_DONE;
@@ -675,7 +676,7 @@
mStringBuilder.setLength(0);
mStringBuilder.append(Photo._ID + " IN(");
- for (int i = 0; i < count; i++) {
+ for (int i = 0; i < mPhotoIds.size(); i++) {
if (i != 0) {
mStringBuilder.append(',');
}
@@ -707,18 +708,15 @@
}
// Remaining photos were not found in the database - mark the cache accordingly.
- count = mPhotoIds.size();
- for (int i = 0; i < count; i++) {
- cacheBitmap(mPhotoIds.get(i), null, preloading);
+ for (Long id : mPhotoIds) {
+ cacheBitmap(id, null, preloading);
}
mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
}
private void loadRemotePhotos() {
- int count = mPhotoUris.size();
- for (int i = 0; i < count; i++) {
- Uri uri = mPhotoUris.get(i);
+ for (Uri uri : mPhotoUris) {
if (mBuffer == null) {
mBuffer = new byte[BUFFER_SIZE];
}