Treat document thumbnails as preemptable.
When a more important request comes along, preempt all outstanding
thumbnail requests.
Bug: 11317901
Change-Id: I164fc8d804bb9c471e6da3f8127228043b3ca482
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index 1f3901c..fa8bc9d 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -76,6 +76,7 @@
import android.widget.Toast;
import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.ProviderExecutor.Preemptable;
import com.android.documentsui.RecentsProvider.StateColumns;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.RootInfo;
@@ -528,7 +529,7 @@
if (iconThumb != null) {
final ThumbnailAsyncTask oldTask = (ThumbnailAsyncTask) iconThumb.getTag();
if (oldTask != null) {
- oldTask.reallyCancel();
+ oldTask.preempt();
iconThumb.setTag(null);
}
}
@@ -794,7 +795,7 @@
final ThumbnailAsyncTask oldTask = (ThumbnailAsyncTask) iconThumb.getTag();
if (oldTask != null) {
- oldTask.reallyCancel();
+ oldTask.preempt();
iconThumb.setTag(null);
}
@@ -818,7 +819,7 @@
final ThumbnailAsyncTask task = new ThumbnailAsyncTask(
uri, iconMime, iconThumb, mThumbSize);
iconThumb.setTag(task);
- task.executeOnExecutor(ProviderExecutor.forAuthority(docAuthority));
+ ProviderExecutor.forAuthority(docAuthority).execute(task);
}
}
@@ -988,7 +989,8 @@
}
}
- private static class ThumbnailAsyncTask extends AsyncTask<Uri, Void, Bitmap> {
+ private static class ThumbnailAsyncTask extends AsyncTask<Uri, Void, Bitmap>
+ implements Preemptable {
private final Uri mUri;
private final ImageView mIconMime;
private final ImageView mIconThumb;
@@ -1004,7 +1006,8 @@
mSignal = new CancellationSignal();
}
- public void reallyCancel() {
+ @Override
+ public void preempt() {
cancel(false);
mSignal.cancel();
}