diff options
-rw-r--r-- | src/com/android/documentsui/ThumbnailLoader.java | 29 | ||||
-rw-r--r-- | src/com/android/documentsui/dirlist/IconHelper.java | 15 | ||||
-rw-r--r-- | src/com/android/documentsui/inspector/HeaderView.java | 21 |
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); } |