소스 검색

Parallel thumbnail fetching

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 3 년 전
부모
커밋
73bb12f78a

+ 12 - 4
app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -462,19 +462,27 @@ public final class ThumbnailsCacheManager {
             mAsyncTasks = asyncTasks;
         }
 
-        public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager,
-                                       User user, List<ThumbnailGenerationTask> asyncTasks,
-                                       boolean gridViewEnabled)
+        public ThumbnailGenerationTask(ImageView imageView,
+                                       FileDataStorageManager storageManager,
+                                       User user,
+                                       List<ThumbnailGenerationTask> asyncTasks,
+                                       boolean gridViewEnabled,
+                                       String imageKey)
             throws IllegalArgumentException {
             this(imageView, storageManager, user, asyncTasks);
             this.gridViewEnabled = gridViewEnabled;
+            mImageKey = imageKey;
         }
 
         public GetMethod getGetMethod() {
             return getMethod;
         }
 
-        public ThumbnailGenerationTask(FileDataStorageManager storageManager, User user){
+        public String getImageKey() {
+            return mImageKey;
+        }
+
+        public ThumbnailGenerationTask(FileDataStorageManager storageManager, User user) {
             if (storageManager == null) {
                 throw new IllegalArgumentException("storageManager must not be NULL");
             }

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -41,7 +41,6 @@ import android.view.MotionEvent;
 import android.view.ScaleGestureDetector;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;

+ 12 - 3
app/src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -38,6 +38,7 @@ import android.graphics.Point;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
@@ -896,13 +897,20 @@ public final class DisplayUtils {
                 } else {
                     // generate new thumbnail
                     if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(file, thumbnailView)) {
+                        for (ThumbnailsCacheManager.ThumbnailGenerationTask task : asyncTasks) {
+                            if (file.getRemoteId() != null && task.getImageKey() != null &&
+                                file.getRemoteId().equals(task.getImageKey())) {
+                                return;
+                            }
+                        }
                         try {
                             final ThumbnailsCacheManager.ThumbnailGenerationTask task =
                                 new ThumbnailsCacheManager.ThumbnailGenerationTask(thumbnailView,
                                                                                    storageManager,
                                                                                    user,
                                                                                    asyncTasks,
-                                                                                   gridView);
+                                                                                   gridView,
+                                                                                   file.getRemoteId());
                             if (thumbnail == null) {
                                 Drawable drawable = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
                                                                                  file.getFileName(),
@@ -941,8 +949,9 @@ public final class DisplayUtils {
 
                             thumbnailView.setImageDrawable(asyncDrawable);
                             asyncTasks.add(task);
-                            task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file,
-                                                                                                  file.getRemoteId()));
+                            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
+                                                   new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file,
+                                                                                                            file.getRemoteId()));
                         } catch (IllegalArgumentException e) {
                             Log_OC.d(TAG, "ThumbnailGenerationTask : " + e.getMessage());
                         }