summaryrefslogtreecommitdiff
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/documentsui/ThumbnailLoader.java29
-rw-r--r--src/com/android/documentsui/dirlist/IconHelper.java15
-rw-r--r--src/com/android/documentsui/inspector/HeaderView.java21
3 files changed, 43 insertions, 22 deletions
diff --git a/src/com/android/documentsui/ThumbnailLoader.java b/src/com/android/documentsui/ThumbnailLoader.java
index bb1e5d5a4..bb1c6fc6d 100644
--- a/src/com/android/documentsui/ThumbnailLoader.java
+++ b/src/com/android/documentsui/ThumbnailLoader.java
@@ -17,11 +17,13 @@ package com.android.documentsui;
import static com.android.documentsui.base.Shared.VERBOSE;
+import android.annotation.Nullable;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Point;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.CancellationSignal;
@@ -32,6 +34,7 @@ import android.view.View;
import android.widget.ImageView;
import com.android.documentsui.ProviderExecutor.Preemptable;
import java.util.function.BiConsumer;
+import java.util.function.Consumer;
/**
* Loads a Thumbnails asynchronously then animates from the mime icon to the thumbnail
@@ -54,34 +57,31 @@ public final class ThumbnailLoader extends AsyncTask<Uri, Void, Bitmap> implemen
private final ImageView mIconThumb;
private final Point mThumbSize;
- // A callback to apply animation to image views after the thumbnail is loaded.
- private final BiConsumer<View, View> mImageAnimator;
private final Uri mUri;
- private final ImageView mIconMime;
private final long mLastModified;
+ private final Consumer<Bitmap> mCallback;
private final boolean mAddToCache;
private final CancellationSignal mSignal;
/**
* @param uri - to a thumbnail.
- * @param iconMime - ImageView for displaying a mime type.
* @param iconThumb - ImageView to display the thumbnail.
* @param thumbSize - size of the thumbnail.
* @param lastModified - used for updating thumbnail caches.
- * @param animator - used to animate from the mime icon to the thumbnail.
* @param addToCache - flag that determines if the loader saves the thumbnail to the cache.
*/
- public ThumbnailLoader(Uri uri, ImageView iconMime, ImageView iconThumb,
- Point thumbSize, long lastModified, BiConsumer<View, View> animator, boolean addToCache) {
+ public ThumbnailLoader(Uri uri, ImageView iconThumb, Point thumbSize, long lastModified,
+ Consumer<Bitmap> callback, boolean addToCache) {
+
mUri = uri;
- mIconMime = iconMime;
mIconThumb = iconThumb;
mThumbSize = thumbSize;
- mImageAnimator = animator;
mLastModified = lastModified;
+ mCallback = callback;
mAddToCache = addToCache;
mSignal = new CancellationSignal();
mIconThumb.setTag(this);
+
if (VERBOSE) Log.v(TAG, "Starting icon loader task for " + mUri);
}
@@ -125,10 +125,9 @@ public final class ThumbnailLoader extends AsyncTask<Uri, Void, Bitmap> implemen
protected void onPostExecute(Bitmap result) {
if (VERBOSE) Log.v(TAG, "Loader task for " + mUri + " completed");
- if (mIconThumb.getTag() == this && result != null) {
- mIconThumb.setTag(null);
- mIconThumb.setImageBitmap(result);
- mImageAnimator.accept(mIconMime, mIconThumb);
- }
+ if (mIconThumb.getTag() == this) {
+ mIconThumb.setTag(null);
+ mCallback.accept(result);
+ }
}
-}
+} \ No newline at end of file
diff --git a/src/com/android/documentsui/dirlist/IconHelper.java b/src/com/android/documentsui/dirlist/IconHelper.java
index d9eabae25..fe145588d 100644
--- a/src/com/android/documentsui/dirlist/IconHelper.java
+++ b/src/com/android/documentsui/dirlist/IconHelper.java
@@ -45,6 +45,7 @@ import com.android.documentsui.base.State;
import com.android.documentsui.base.State.ViewMode;
import java.util.function.BiConsumer;
+import java.util.function.Consumer;
/**
* A class to assist with loading and managing the Images (i.e. thumbnails and icons) associated
@@ -199,8 +200,18 @@ public class IconHelper {
(cachedThumbnail == null ? ThumbnailLoader.ANIM_FADE_IN :
ThumbnailLoader.ANIM_NO_OP);
- final ThumbnailLoader task = new ThumbnailLoader(uri, iconMime, iconThumb,
- mCurrentSize, docLastModified, animator, true);
+ Consumer<Bitmap> callback = new Consumer<Bitmap>() {
+ @Override
+ public void accept(Bitmap bitmap) {
+ if (result != null) {
+ iconThumb.setImageBitmap(bitmap);
+ animator.accept(iconMime, iconThumb);
+ }
+ }
+ };
+
+ final ThumbnailLoader task = new ThumbnailLoader(uri, iconThumb,
+ mCurrentSize, docLastModified, callback, true);
ProviderExecutor.forAuthority(docAuthority).execute(task);
}
diff --git a/src/com/android/documentsui/inspector/HeaderView.java b/src/com/android/documentsui/inspector/HeaderView.java
index c9c6b3ec3..4716d413d 100644
--- a/src/com/android/documentsui/inspector/HeaderView.java
+++ b/src/com/android/documentsui/inspector/HeaderView.java
@@ -17,6 +17,7 @@ package com.android.documentsui.inspector;
import android.app.Activity;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
@@ -93,13 +94,23 @@ public final class HeaderView extends RelativeLayout implements Consumer<Documen
private void loadHeaderImage(DocumentInfo info) {
- // load the mime icon.
- Drawable d = mContext.getContentResolver().getTypeDrawable(info.mimeType);
- mMime.setImageDrawable(d);
+ Consumer<Bitmap> callback = new Consumer<Bitmap>() {
+ @Override
+ public void accept(Bitmap bitmap) {
+ if (bitmap != null) {
+ mThumbnail.setImageBitmap(bitmap);
+ ThumbnailLoader.ANIM_FADE_IN.accept(mMime, mThumbnail);
+ } else {
+ Drawable mimeIcon = mContext.getContentResolver()
+ .getTypeDrawable(info.mimeType);
+ mMime.setImageDrawable(mimeIcon);
+ }
+ }
+ };
// load the thumbnail async.
- final ThumbnailLoader task = new ThumbnailLoader(info.derivedUri, mMime, mThumbnail,
- mImageDimensions, info.lastModified, ThumbnailLoader.ANIM_FADE_IN, false);
+ final ThumbnailLoader task = new ThumbnailLoader(info.derivedUri, mThumbnail,
+ mImageDimensions, info.lastModified, callback, false);
task.executeOnExecutor(ProviderExecutor.forAuthority(info.derivedUri.getAuthority()),
info.derivedUri);
}