Fixing issue where contact photos are shown in the wrong location due to
a concurrent change to the search results list which occurs after the
the request to load the contact photo is registered, but prior to it
being fulfilled.
Bug: 13967012
Change-Id: I6f14e69ad1841df8b7da5632e4a9551b6641e04b
diff --git a/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java b/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
index 32fb899..dd919cc 100644
--- a/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
+++ b/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
@@ -45,6 +45,10 @@
}
@Override
+ public void cancelPendingRequests() {
+ }
+
+ @Override
public void pause() {
}
diff --git a/src/com/android/contacts/common/ContactPhotoManager.java b/src/com/android/contacts/common/ContactPhotoManager.java
index ce02a0b..f3a73ff 100644
--- a/src/com/android/contacts/common/ContactPhotoManager.java
+++ b/src/com/android/contacts/common/ContactPhotoManager.java
@@ -410,6 +410,11 @@
public abstract void removePhoto(ImageView view);
/**
+ * Cancels all pending requests to load photos asynchronously.
+ */
+ public abstract void cancelPendingRequests();
+
+ /**
* Temporarily stops loading photos from the database.
*/
public abstract void pause();
@@ -728,6 +733,15 @@
mPendingRequests.remove(view);
}
+
+ /**
+ * Cancels all pending requests to load photos asynchronously.
+ */
+ @Override
+ public void cancelPendingRequests() {
+ mPendingRequests.clear();
+ }
+
@Override
public void refreshCache() {
if (mBitmapHolderCacheAllUnfresh) {
diff --git a/src/com/android/contacts/common/list/ContactEntryListAdapter.java b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
index 202f121..3c8a450 100644
--- a/src/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
@@ -436,6 +436,9 @@
if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
updateIndexer(cursor);
}
+
+ // When the cursor changes, cancel any pending asynchronous photo loads.
+ mPhotoLoader.cancelPendingRequests();
}
public void changeCursor(Cursor cursor) {