bump glide version

This commit is contained in:
dkanada 2020-09-21 03:42:14 +09:00
commit 2e686ef44e
14 changed files with 103 additions and 95 deletions

View file

@ -19,6 +19,8 @@ import com.dkanada.gramophone.BuildConfig;
import com.dkanada.gramophone.helper.StackBlur;
import com.dkanada.gramophone.util.ImageUtil;
import java.security.MessageDigest;
public class BlurTransformation extends BitmapTransformation {
public static final float DEFAULT_BLUR_RADIUS = 5f;
@ -33,12 +35,12 @@ public class BlurTransformation extends BitmapTransformation {
}
private BlurTransformation(Builder builder) {
super(builder.context);
super();
init(builder);
}
private BlurTransformation(Builder builder, BitmapPool bitmapPool) {
super(bitmapPool);
super();
init(builder);
}
@ -138,7 +140,6 @@ public class BlurTransformation extends BitmapTransformation {
}
@Override
public String getId() {
return "BlurTransformation(radius=" + blurRadius + ", sampling=" + sampling + ")";
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
}
}

View file

@ -1,20 +1,26 @@
package com.dkanada.gramophone.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.Registry;
import com.bumptech.glide.load.engine.cache.DiskLruCacheFactory;
import com.bumptech.glide.module.GlideModule;
import com.dkanada.gramophone.App;
import com.dkanada.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
import com.dkanada.gramophone.util.PreferenceUtil;
import java.io.File;
public class CustomGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
public void applyOptions(@NonNull Context context, GlideBuilder builder) {
builder.setDiskCache(new DiskLruCacheFactory(new DiskLruCacheFactory.CacheDirectoryGetter() {
@Override
public File getCacheDirectory() {
@ -27,6 +33,7 @@ public class CustomGlideModule implements GlideModule {
}
@Override
public void registerComponents(Context context, Glide glide) {
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
registry.register(Bitmap.class, BitmapPaletteWrapper.class, new BitmapPaletteTranscoder(glide.getBitmapPool()));
}
}

View file

@ -2,26 +2,28 @@ package com.dkanada.gramophone.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.BitmapEncoder;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.transition.ViewAnimationFactory;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
import org.jellyfin.apiclient.model.dto.ImageOptions;
import org.jellyfin.apiclient.model.entities.ImageType;
import static com.bumptech.glide.GenericTransitionOptions.with;
public class CustomGlideRequest {
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
@ -49,13 +51,12 @@ public class CustomGlideRequest {
return new BitmapBuilder(this);
}
public DrawableRequestBuilder<GlideDrawable> build() {
// noinspection unchecked
return createBaseRequest(requestManager, item)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.placeholder(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION)
.signature(createSignature(item));
public RequestBuilder<Drawable> build() {
Object uri = item != null ? createUrl(item) : R.drawable.default_album_art;
return requestManager.load(uri)
.apply(createRequestOptions(item))
.transition(new DrawableTransitionOptions().crossFade(DEFAULT_ANIMATION));
}
}
@ -66,14 +67,12 @@ public class CustomGlideRequest {
this.builder = builder;
}
public BitmapRequestBuilder<?, Bitmap> build() {
// noinspection unchecked
return createBaseRequest(builder.requestManager, builder.item)
.asBitmap()
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.placeholder(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION)
.signature(createSignature(builder.item));
public RequestBuilder<Bitmap> build() {
Object uri = builder.item != null ? createUrl(builder.item) : R.drawable.default_album_art;
return builder.requestManager.asBitmap().load(uri)
.apply(createRequestOptions(builder.item))
.transition(new BitmapTransitionOptions().crossFade(DEFAULT_ANIMATION));
}
}
@ -86,30 +85,29 @@ public class CustomGlideRequest {
this.context = context;
}
public BitmapRequestBuilder<?, BitmapPaletteWrapper> build() {
// noinspection unchecked
return createBaseRequest(builder.requestManager, builder.item)
.asBitmap()
.transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.encoder(new BitmapEncoder(Bitmap.CompressFormat.PNG, 100))
.placeholder(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION)
.signature(createSignature(builder.item));
public RequestBuilder<BitmapPaletteWrapper> build() {
Object uri = builder.item != null ? createUrl(builder.item) : R.drawable.default_album_art;
return builder.requestManager.as(BitmapPaletteWrapper.class).load(uri)
.apply(createRequestOptions(builder.item))
.transition(with(new ViewAnimationFactory<>(DEFAULT_ANIMATION)));
}
}
public static DrawableTypeRequest createBaseRequest(RequestManager requestManager, String item) {
if (item == null) {
return requestManager.load(R.drawable.default_album_art);
}
public static RequestOptions createRequestOptions(String item) {
return new RequestOptions()
.centerCrop()
.error(DEFAULT_IMAGE)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.signature(createSignature(item));
}
public static String createUrl(String item) {
ImageOptions options = new ImageOptions();
options.setImageType(ImageType.Primary);
options.setMaxHeight(800);
String url = App.getApiClient().GetImageUrl(item, options);
return requestManager.load(url);
return App.getApiClient().GetImageUrl(item, options);
}
public static Key createSignature(String item) {

View file

@ -3,7 +3,9 @@ package com.dkanada.gramophone.glide;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.bumptech.glide.request.animation.GlideAnimation;
import androidx.annotation.NonNull;
import com.bumptech.glide.request.transition.Transition;
import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.palette.BitmapPaletteTarget;
@ -16,15 +18,16 @@ public abstract class CustomPaletteTarget extends BitmapPaletteTarget {
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
onColorReady(getDefaultFooterColor());
}
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
super.onResourceReady(resource, glideAnimation);
onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor()));
view.setImageBitmap(resource.getBitmap());
}
protected int getDefaultFooterColor() {

View file

@ -1,5 +1,7 @@
package com.dkanada.gramophone.glide.palette;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.util.Util;
@ -14,6 +16,12 @@ public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
this.bitmapPool = bitmapPool;
}
@NonNull
@Override
public Class<BitmapPaletteWrapper> getResourceClass() {
return BitmapPaletteWrapper.class;
}
@Override
public BitmapPaletteWrapper get() {
return bitmapPaletteWrapper;
@ -26,8 +34,6 @@ public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
@Override
public void recycle() {
if (!bitmapPool.put(bitmapPaletteWrapper.getBitmap())) {
bitmapPaletteWrapper.getBitmap().recycle();
}
bitmapPaletteWrapper.getBitmap().recycle();
}
}

View file

@ -11,6 +11,5 @@ public class BitmapPaletteTarget extends ImageViewTarget<BitmapPaletteWrapper> {
@Override
protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) {
view.setImageBitmap(bitmapPaletteWrapper.getBitmap());
}
}

View file

@ -1,9 +1,10 @@
package com.dkanada.gramophone.glide.palette;
import android.content.Context;
import android.graphics.Bitmap;
import com.bumptech.glide.Glide;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
@ -12,23 +13,14 @@ import com.dkanada.gramophone.util.ThemeUtil;
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
private final BitmapPool bitmapPool;
public BitmapPaletteTranscoder(Context context) {
this(Glide.get(context).getBitmapPool());
}
public BitmapPaletteTranscoder(BitmapPool bitmapPool) {
this.bitmapPool = bitmapPool;
}
@Override
public Resource<BitmapPaletteWrapper> transcode(Resource<Bitmap> bitmapResource) {
Bitmap bitmap = bitmapResource.get();
public Resource<BitmapPaletteWrapper> transcode(@NonNull Resource<Bitmap> resource, @NonNull Options options) {
Bitmap bitmap = resource.get();
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(bitmap, ThemeUtil.generatePalette(bitmap));
return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
}
@Override
public String getId() {
return "BitmapPaletteTranscoder.com.dkanada.gramophone.glide.palette";
}
}

View file

@ -31,10 +31,10 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.BlurTransformation;
import com.dkanada.gramophone.glide.CustomGlideRequest;
@ -544,7 +544,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
if (PreferenceUtil.getInstance(this).getShowAlbumCover()) {
final Point screenSize = Util.getScreenSize(MusicService.this);
final BitmapRequestBuilder<?, Bitmap> request = CustomGlideRequest.Builder
final RequestBuilder<Bitmap> request = CustomGlideRequest.Builder
.from(Glide.with(MusicService.this), song.primary)
.asBitmap().build();
@ -557,13 +557,13 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public void run() {
request.into(new SimpleTarget<Bitmap>(screenSize.x, screenSize.y) {
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
mediaSession.setMetadata(metaData.build());
}
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> glideAnimation) {
metaData.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, copy(resource));
mediaSession.setMetadata(metaData.build());
}

View file

@ -15,9 +15,9 @@ import android.view.View;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.dkanada.gramophone.R;
@ -86,20 +86,20 @@ public class PlayingNotificationImpl extends PlayingNotification {
@Override
public void run() {
if (target != null) {
Glide.clear(target);
Glide.with(service).clear(target);
}
target = CustomGlideRequest.Builder.from(Glide.with(service), song.primary)
.generatePalette(service).build()
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
public void onResourceReady(BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
update(resource.getBitmap(), ThemeUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
update(null, Color.WHITE);
}

View file

@ -13,8 +13,8 @@ import androidx.media.app.NotificationCompat.MediaStyle;
import androidx.palette.graphics.Palette;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.CustomGlideRequest;
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
@ -55,13 +55,13 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
.generatePalette(service).build()
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
public void onResourceReady(BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
Palette palette = resource.getPalette();
update(resource.getBitmap(), palette.getVibrantColor(palette.getMutedColor(Color.TRANSPARENT)));
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
public void onLoadFailed(Drawable errorDrawable) {
update(null, Color.TRANSPARENT);
}

View file

@ -13,9 +13,9 @@ import android.view.View;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.CustomGlideRequest;
@ -93,20 +93,20 @@ public class AppWidgetAlbum extends BaseAppWidget {
@Override
public void run() {
if (target != null) {
Glide.clear(target);
Glide.with(appContext).clear(target);
}
target = CustomGlideRequest.Builder.from(Glide.with(appContext), song.primary)
.asBitmap().build()
.into(new SimpleTarget<Bitmap>(widgetImageSize, widgetImageSize) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> glideAnimation) {
update(resource);
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
update(null);
}

View file

@ -13,9 +13,9 @@ import android.view.View;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.CustomGlideRequest;
@ -97,21 +97,22 @@ public class AppWidgetCard extends BaseAppWidget {
@Override
public void run() {
if (target != null) {
Glide.clear(target);
Glide.with(service).clear(target);
}
target = CustomGlideRequest.Builder.from(Glide.with(service), song.primary)
.generatePalette(service).build()
.centerCrop()
.into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
public void onResourceReady(BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
Palette palette = resource.getPalette();
update(resource.getBitmap(), palette.getVibrantColor(palette.getMutedColor(MaterialValueHelper.getSecondaryTextColor(service, true))));
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
update(null, MaterialValueHelper.getSecondaryTextColor(service, true));
}

View file

@ -13,9 +13,9 @@ import android.view.View;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.CustomGlideRequest;
@ -90,21 +90,22 @@ public class AppWidgetClassic extends BaseAppWidget {
@Override
public void run() {
if (target != null) {
Glide.clear(target);
Glide.with(appContext).clear(target);
}
target = CustomGlideRequest.Builder.from(Glide.with(appContext), song.primary)
.generatePalette(service).build()
.centerCrop()
.into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
public void onResourceReady(BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
Palette palette = resource.getPalette();
update(resource.getBitmap(), palette.getVibrantColor(palette.getMutedColor(MaterialValueHelper.getSecondaryTextColor(appContext, true))));
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
update(null, MaterialValueHelper.getSecondaryTextColor(appContext, true));
}