Merge "Fix thumbnail generation" into gb-ub-photos-bryce
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);