OSDN Git Service

Importer: when view is reused for same image, don't reload
authorBobby Georgescu <georgescu@google.com>
Tue, 29 Jan 2013 21:30:12 +0000 (13:30 -0800)
committerBobby Georgescu <georgescu@google.com>
Tue, 29 Jan 2013 21:30:12 +0000 (13:30 -0800)
Bug: 7968780
Change-Id: I6786d140e516ff60562c5c0b1222fca0ea153216

src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
src/com/android/gallery3d/ingest/ui/MtpThumbnailTileView.java

index 3cf0df2..611d880 100644 (file)
@@ -40,6 +40,7 @@ public class MtpAdapter extends BaseAdapter implements SectionIndexer {
     private MtpDeviceIndex mModel;
     private SortOrder mSortOrder = SortOrder.Descending;
     private LayoutInflater mInflater;
+    private int mGeneration = 0;
 
     public MtpAdapter(Activity context) {
         super();
@@ -53,6 +54,18 @@ public class MtpAdapter extends BaseAdapter implements SectionIndexer {
         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 @@ public class MtpAdapter extends BaseAdapter implements SectionIndexer {
             } else {
                 imageView = (MtpThumbnailTileView) convertView;
             }
-            imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position));
+            imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position), mGeneration);
             return imageView;
         } else {
             DateTileView dateTile;
index ddba6af..2aeda73 100644 (file)
@@ -35,6 +35,8 @@ public class MtpThumbnailTileView extends ImageView implements Checkable {
 
     private Paint mForegroundPaint;
     private boolean mIsChecked;
+    private int mObjectHandle;
+    private int mGeneration;
 
     private void init() {
         mForegroundPaint = new Paint();
@@ -92,13 +94,19 @@ public class MtpThumbnailTileView extends ImageView implements Checkable {
 
     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);