diff options
-rwxr-xr-x | src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java b/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java index 1f4fb674..08486a12 100755 --- a/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java +++ b/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java @@ -21,16 +21,23 @@ import android.content.res.AssetFileDescriptor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; import android.net.Uri; +import android.os.Handler; +import android.os.Looper; import android.util.Log; import android.widget.ImageView; import androidx.annotation.WorkerThread; +import com.android.wallpaper.module.DrawableLayerResolver; +import com.android.wallpaper.module.InjectorProvider; + import com.bumptech.glide.Glide; import com.bumptech.glide.load.Key; import com.bumptech.glide.load.MultiTransformation; @@ -59,6 +66,7 @@ public class LiveWallpaperThumbAsset extends Asset { protected final Context mContext; protected final android.app.WallpaperInfo mInfo; + protected final DrawableLayerResolver mLayerResolver; // The content Uri of thumbnail protected Uri mUri; private Drawable mThumbnailDrawable; @@ -66,6 +74,7 @@ public class LiveWallpaperThumbAsset extends Asset { public LiveWallpaperThumbAsset(Context context, android.app.WallpaperInfo info) { mContext = context.getApplicationContext(); mInfo = info; + mLayerResolver = InjectorProvider.getInjector().getDrawableLayerResolver(); } public LiveWallpaperThumbAsset(Context context, android.app.WallpaperInfo info, Uri uri) { @@ -114,7 +123,25 @@ public class LiveWallpaperThumbAsset extends Asset { @Override public void decodeRawDimensions(Activity unused, DimensionsReceiver receiver) { - receiver.onDimensionsDecoded(null); + // TODO(b/277166654): Reuse the logic for all thumb asset decoding + sExecutorService.execute(() -> { + Bitmap result = null; + Drawable thumb = mInfo.loadThumbnail(mContext.getPackageManager()); + if (thumb instanceof BitmapDrawable) { + result = ((BitmapDrawable) thumb).getBitmap(); + } else if (thumb instanceof LayerDrawable) { + Drawable layer = mLayerResolver.resolveLayer((LayerDrawable) thumb); + if (layer instanceof BitmapDrawable) { + result = ((BitmapDrawable) layer).getBitmap(); + } + } + final Bitmap lr = result; + new Handler(Looper.getMainLooper()).post( + () -> + receiver.onDimensionsDecoded( + lr == null ? null : new Point(lr.getWidth(), lr.getHeight())) + ); + }); } @Override |