Now using OkHttp Glide module, also improved the artist image loading and caching.
This commit is contained in:
parent
967ef7d824
commit
524273228d
8 changed files with 39 additions and 18 deletions
|
|
@ -98,12 +98,13 @@ dependencies {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
compile('com.afollestad.material-dialogs:core:0.8.5.2@aar') {
|
compile('com.github.afollestad.material-dialogs:core:0.8.5.3@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
compile('com.afollestad.material-dialogs:commons:0.8.5.2@aar') {
|
compile('com.github.afollestad.material-dialogs:commons:0.8.5.3@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
compile('com.afollestad:material-cab:0.1.6@aar') {
|
compile('com.afollestad:material-cab:0.1.6@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
|
|
@ -124,7 +125,6 @@ dependencies {
|
||||||
compile 'com.github.kabouzeid:AndroidSlidingUpPanel:3.2.1'
|
compile 'com.github.kabouzeid:AndroidSlidingUpPanel:3.2.1'
|
||||||
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
|
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
|
||||||
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
|
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
|
||||||
compile 'com.squareup.okhttp:okhttp:2.7.0'
|
|
||||||
compile 'com.jakewharton:butterknife:7.0.1'
|
compile 'com.jakewharton:butterknife:7.0.1'
|
||||||
compile 'org.solovyev.android.views:linear-layout-manager:0.5@aar'
|
compile 'org.solovyev.android.views:linear-layout-manager:0.5@aar'
|
||||||
//noinspection GradleDynamicVersion
|
//noinspection GradleDynamicVersion
|
||||||
|
|
@ -132,4 +132,5 @@ dependencies {
|
||||||
compile 'de.psdev.licensesdialog:licensesdialog:1.8.0'
|
compile 'de.psdev.licensesdialog:licensesdialog:1.8.0'
|
||||||
compile 'com.github.kabouzeid:AppIntro:3.3.0k'
|
compile 'com.github.kabouzeid:AppIntro:3.3.0k'
|
||||||
compile 'com.github.bumptech.glide:glide:3.6.1'
|
compile 'com.github.bumptech.glide:glide:3.6.1'
|
||||||
|
compile 'com.github.bumptech.glide:okhttp-integration:1.3.1@aar'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
3
app/proguard-rules.pro
vendored
3
app/proguard-rules.pro
vendored
|
|
@ -22,8 +22,7 @@
|
||||||
-keepattributes Signature
|
-keepattributes Signature
|
||||||
-keepattributes Exceptions
|
-keepattributes Exceptions
|
||||||
|
|
||||||
# Glide
|
# Glide Modules
|
||||||
-keepnames class com.kabouzeid.gramophone.glide.PhonographGlideModule
|
|
||||||
-keep public class * implements com.bumptech.glide.module.GlideModule
|
-keep public class * implements com.bumptech.glide.module.GlideModule
|
||||||
|
|
||||||
# ButterKnife
|
# ButterKnife
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,9 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.Priority;
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
|
import com.bumptech.glide.request.target.Target;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
||||||
|
|
@ -108,9 +110,11 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
||||||
Glide.with(activity)
|
Glide.with(activity)
|
||||||
.load(new ArtistImage(artist.name, false))
|
.load(new ArtistImage(artist.name, false))
|
||||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
||||||
.error(R.drawable.default_artist_image)
|
.placeholder(R.drawable.default_artist_image)
|
||||||
.animate(android.R.anim.fade_in)
|
.animate(android.R.anim.fade_in)
|
||||||
|
.priority(Priority.LOW)
|
||||||
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
||||||
|
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||||
.into(holder.image);
|
.into(holder.image);
|
||||||
break;
|
break;
|
||||||
case SONG:
|
case SONG:
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import android.view.ViewGroup;
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.Priority;
|
import com.bumptech.glide.Priority;
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
|
import com.bumptech.glide.request.target.Target;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
|
|
@ -125,11 +126,11 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class)
|
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
||||||
.error(R.drawable.default_artist_image)
|
.placeholder(R.drawable.default_artist_image)
|
||||||
.animate(android.R.anim.fade_in)
|
.animate(android.R.anim.fade_in)
|
||||||
.priority(Priority.LOW)
|
.priority(Priority.LOW)
|
||||||
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
||||||
.thumbnail(0.001f)
|
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||||
.into(new PhonographColoredTarget(holder.image) {
|
.into(new PhonographColoredTarget(holder.image) {
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCleared(Drawable placeholder) {
|
public void onLoadCleared(Drawable placeholder) {
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ import android.content.Context;
|
||||||
|
|
||||||
import com.bumptech.glide.Priority;
|
import com.bumptech.glide.Priority;
|
||||||
import com.bumptech.glide.load.data.DataFetcher;
|
import com.bumptech.glide.load.data.DataFetcher;
|
||||||
import com.bumptech.glide.load.data.HttpUrlFetcher;
|
|
||||||
import com.bumptech.glide.load.model.GlideUrl;
|
import com.bumptech.glide.load.model.GlideUrl;
|
||||||
|
import com.bumptech.glide.load.model.ModelLoader;
|
||||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||||
import com.kabouzeid.gramophone.lastfm.rest.model.LastFmArtist;
|
import com.kabouzeid.gramophone.lastfm.rest.model.LastFmArtist;
|
||||||
import com.kabouzeid.gramophone.util.LastFMUtil;
|
import com.kabouzeid.gramophone.util.LastFMUtil;
|
||||||
|
|
@ -18,16 +18,23 @@ import java.io.InputStream;
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
||||||
|
public static final String TAG = ArtistImageFetcher.class.getSimpleName();
|
||||||
private Context context;
|
private Context context;
|
||||||
private final LastFMRestClient lastFMRestClient;
|
private final LastFMRestClient lastFMRestClient;
|
||||||
private final ArtistImage model;
|
private final ArtistImage model;
|
||||||
private HttpUrlFetcher urlFetcher;
|
private ModelLoader<GlideUrl, InputStream> urlLoader;
|
||||||
|
private final int width;
|
||||||
|
private final int height;
|
||||||
private volatile boolean isCancelled;
|
private volatile boolean isCancelled;
|
||||||
|
private DataFetcher<InputStream> urlFetcher;
|
||||||
|
|
||||||
public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model) {
|
public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model, ModelLoader<GlideUrl, InputStream> urlLoader, int width, int height) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.lastFMRestClient = lastFMRestClient;
|
this.lastFMRestClient = lastFMRestClient;
|
||||||
this.model = model;
|
this.model = model;
|
||||||
|
this.urlLoader = urlLoader;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -42,7 +49,7 @@ public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
||||||
|
|
||||||
if (isCancelled) return null;
|
if (isCancelled) return null;
|
||||||
|
|
||||||
urlFetcher = new HttpUrlFetcher(new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage())));
|
urlFetcher = urlLoader.getResourceFetcher(new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage())), width, height);
|
||||||
return urlFetcher.loadData(priority);
|
return urlFetcher.loadData(priority);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,10 @@ package com.kabouzeid.gramophone.glide.artistimage;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.bumptech.glide.integration.okhttp.OkHttpUrlLoader;
|
||||||
import com.bumptech.glide.load.data.DataFetcher;
|
import com.bumptech.glide.load.data.DataFetcher;
|
||||||
import com.bumptech.glide.load.model.GenericLoaderFactory;
|
import com.bumptech.glide.load.model.GenericLoaderFactory;
|
||||||
|
import com.bumptech.glide.load.model.GlideUrl;
|
||||||
import com.bumptech.glide.load.model.ModelLoader;
|
import com.bumptech.glide.load.model.ModelLoader;
|
||||||
import com.bumptech.glide.load.model.ModelLoaderFactory;
|
import com.bumptech.glide.load.model.ModelLoaderFactory;
|
||||||
import com.bumptech.glide.load.model.stream.StreamModelLoader;
|
import com.bumptech.glide.load.model.stream.StreamModelLoader;
|
||||||
|
|
@ -18,20 +20,24 @@ import java.io.InputStream;
|
||||||
public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
|
public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
|
||||||
private Context context;
|
private Context context;
|
||||||
private LastFMRestClient lastFMRestClient;
|
private LastFMRestClient lastFMRestClient;
|
||||||
|
private ModelLoader<GlideUrl, InputStream> urlLoader;
|
||||||
|
|
||||||
public ArtistImageLoader(Context context, LastFMRestClient lastFMRestClient) {
|
public ArtistImageLoader(Context context, LastFMRestClient lastFMRestClient, ModelLoader<GlideUrl, InputStream> urlLoader) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.lastFMRestClient = lastFMRestClient;
|
this.lastFMRestClient = lastFMRestClient;
|
||||||
|
this.urlLoader = urlLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataFetcher<InputStream> getResourceFetcher(ArtistImage model, int width, int height) {
|
public DataFetcher<InputStream> getResourceFetcher(ArtistImage model, int width, int height) {
|
||||||
return new ArtistImageFetcher(context, lastFMRestClient, model);
|
return new ArtistImageFetcher(context, lastFMRestClient, model, urlLoader, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Factory implements ModelLoaderFactory<ArtistImage, InputStream> {
|
public static class Factory implements ModelLoaderFactory<ArtistImage, InputStream> {
|
||||||
private static volatile LastFMRestClient internalClient;
|
private static volatile LastFMRestClient internalClient;
|
||||||
private LastFMRestClient client;
|
private LastFMRestClient client;
|
||||||
|
private OkHttpUrlLoader.Factory okHttpFactory;
|
||||||
|
|
||||||
|
|
||||||
private static LastFMRestClient getInternalClient(Context context) {
|
private static LastFMRestClient getInternalClient(Context context) {
|
||||||
if (internalClient == null) {
|
if (internalClient == null) {
|
||||||
|
|
@ -49,15 +55,17 @@ public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
|
||||||
*/
|
*/
|
||||||
public Factory(Context context) {
|
public Factory(Context context) {
|
||||||
client = getInternalClient(context);
|
client = getInternalClient(context);
|
||||||
|
okHttpFactory = new OkHttpUrlLoader.Factory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ModelLoader<ArtistImage, InputStream> build(Context context, GenericLoaderFactory factories) {
|
public ModelLoader<ArtistImage, InputStream> build(Context context, GenericLoaderFactory factories) {
|
||||||
return new ArtistImageLoader(context, client);
|
return new ArtistImageLoader(context, client, okHttpFactory.build(context, factories));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void teardown() {
|
public void teardown() {
|
||||||
|
okHttpFactory.teardown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -259,9 +259,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class)
|
.transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
||||||
.error(R.drawable.default_artist_image)
|
.placeholder(R.drawable.default_artist_image)
|
||||||
.signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name))
|
.signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name))
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
|
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||||
.listener(new RequestListener<ArtistImage, BitmapPaletteWrapper>() {
|
.listener(new RequestListener<ArtistImage, BitmapPaletteWrapper>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onException(Exception e, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
|
public boolean onException(Exception e, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,7 @@ public final class PreferenceUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getArtistGridSize(Context context) {
|
public final int getArtistGridSize(Context context) {
|
||||||
return mPreferences.getInt(ARTIST_GRID_SIZE, context.getResources().getInteger(R.integer.default_grid_columns));
|
return mPreferences.getInt(ARTIST_GRID_SIZE, context.getResources().getInteger(R.integer.default_list_columns));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAlbumGridSizeLand(final int gridSize) {
|
public void setAlbumGridSizeLand(final int gridSize) {
|
||||||
|
|
@ -324,7 +324,7 @@ public final class PreferenceUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getArtistGridSizeLand(Context context) {
|
public final int getArtistGridSizeLand(Context context) {
|
||||||
return mPreferences.getInt(ARTIST_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_grid_columns_land));
|
return mPreferences.getInt(ARTIST_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_list_columns_land));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAlbumColoredFooters(final boolean value) {
|
public void setAlbumColoredFooters(final boolean value) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue