Importer: when view is reused for same image, don't reload
Bug: 7968780
Change-Id: I6786d140e516ff60562c5c0b1222fca0ea153216
diff --git a/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java b/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
index 3cf0df2..611d880 100644
--- a/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
+++ b/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
@@ -40,6 +40,7 @@
private MtpDeviceIndex mModel;
private SortOrder mSortOrder = SortOrder.Descending;
private LayoutInflater mInflater;
+ private int mGeneration = 0;
public MtpAdapter(Activity context) {
super();
@@ -53,6 +54,18 @@
notifyDataSetChanged();
}
+ @Override
+ public void notifyDataSetChanged() {
+ mGeneration++;
+ super.notifyDataSetChanged();
+ }
+
+ @Override
+ public void notifyDataSetInvalidated() {
+ mGeneration++;
+ super.notifyDataSetInvalidated();
+ }
+
public boolean deviceConnected() {
return (mModel != null) && (mModel.getDevice() != null);
}
@@ -121,7 +134,7 @@
} else {
imageView = (MtpThumbnailTileView) convertView;
}
- imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position));
+ imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position), mGeneration);
return imageView;
} else {
DateTileView dateTile;
diff --git a/src/com/android/gallery3d/ingest/ui/MtpThumbnailTileView.java b/src/com/android/gallery3d/ingest/ui/MtpThumbnailTileView.java
index ddba6af..2aeda73 100644
--- a/src/com/android/gallery3d/ingest/ui/MtpThumbnailTileView.java
+++ b/src/com/android/gallery3d/ingest/ui/MtpThumbnailTileView.java
@@ -35,6 +35,8 @@
private Paint mForegroundPaint;
private boolean mIsChecked;
+ private int mObjectHandle;
+ private int mGeneration;
private void init() {
mForegroundPaint = new Paint();
@@ -92,13 +94,19 @@
private LoadThumbnailTask mTask;
- public void setMtpDeviceAndObjectInfo(MtpDevice device, MtpObjectInfo object) {
+ public void setMtpDeviceAndObjectInfo(MtpDevice device, MtpObjectInfo object, int gen) {
+ int handle = object.getObjectHandle();
+ if (handle == mObjectHandle && gen == mGeneration) {
+ return;
+ }
animate().cancel();
if (mTask != null) {
mTask.cancel(true);
}
+ mGeneration = gen;
+ mObjectHandle = handle;
Bitmap thumbnail = MtpBitmapCache.getInstanceForDevice(device)
- .get(object.getObjectHandle());
+ .get(handle);
if (thumbnail != null) {
setAlpha(1f);
setImageBitmap(thumbnail);