Made some progress switching to glide

This commit is contained in:
Karim Abou Zeid 2015-12-31 15:37:47 +01:00
commit 26cf5d8e0f
16 changed files with 255 additions and 355 deletions

View file

@ -10,10 +10,11 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.BitmapPaletteTranscoder; import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.glide.BitmapPaletteWrapper; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.PhonographPaletteTarget; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter; import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
@ -131,47 +132,14 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId))
.asBitmap() .asBitmap()
.transcode(new BitmapPaletteTranscoder(getActivity()), BitmapPaletteWrapper.class) .transcode(new BitmapPaletteTranscoder(getActivity()), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art) .error(R.drawable.default_album_art)
.into(new PhonographPaletteTarget(albumCover) { .into(new PhonographColoredTarget(albumCover) {
@Override @Override
public void onColorReady(int color) { public void onColorReady(int color) {
setColor(color); setColor(color);
} }
}); });
// ImageLoader.getInstance().displayImage(
// MusicUtil.getSongImageLoaderString(song),
// albumCover,
// new DisplayImageOptions.Builder()
// .cacheInMemory(true)
// .showImageOnFail(R.drawable.default_album_art)
// .postProcessor(new BitmapProcessor() {
// @Override
// public Bitmap process(Bitmap bitmap) {
// // don't use set color here, as this is not running on the ui-thread
// color = ColorUtil.generateColor(getActivity(), bitmap);
// return bitmap;
// }
// })
// .build(),
// new SimpleImageLoadingListener() {
// @Override
// public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) {
// if (getActivity() != null) {
// setColor(ColorUtil.resolveColor(getActivity(), R.attr.default_bar_color));
// }
// }
//
// @Override
// public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) {
// if (loadedImage == null) {
// onLoadingFailed(imageUri, view, null);
// return;
// }
// setColor(color);
// }
// }
// );
} }
@Override @Override

View file

@ -9,6 +9,8 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
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.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@ -22,8 +24,6 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -94,15 +94,11 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
final Album album = (Album) results.get(position); final Album album = (Album) results.get(position);
holder.title.setText(album.title); holder.title.setText(album.title);
holder.text.setText(album.artistName); holder.text.setText(album.artistName);
ImageLoader.getInstance().displayImage( Glide.with(activity)
MusicUtil.getAlbumImageLoaderString(album), .loadFromMediaStore(MusicUtil.getAlbumArtUri(album.id))
holder.image, .diskCacheStrategy(DiskCacheStrategy.NONE)
new DisplayImageOptions.Builder() .error(R.drawable.default_album_art)
.cacheInMemory(true) .into(holder.image);
.showImageOnFail(R.drawable.default_album_art)
.resetViewBeforeLoading(true)
.build()
);
break; break;
case ARTIST: case ARTIST:
final Artist artist = (Artist) results.get(position); final Artist artist = (Artist) results.get(position);
@ -112,15 +108,16 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
holder.image.setImageResource(R.drawable.default_artist_image); holder.image.setImageResource(R.drawable.default_artist_image);
break; break;
} }
ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false), // TODO Glide
holder.image, // ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false),
new DisplayImageOptions.Builder() // holder.image,
.cacheInMemory(true) // new DisplayImageOptions.Builder()
.cacheOnDisk(true) // .cacheInMemory(true)
.resetViewBeforeLoading(true) // .cacheOnDisk(true)
.showImageOnFail(R.drawable.default_artist_image) // .resetViewBeforeLoading(true)
.build() // .showImageOnFail(R.drawable.default_artist_image)
); // .build()
// );
break; break;
case SONG: case SONG:
final Song song = (Song) results.get(position); final Song song = (Song) results.get(position);

View file

@ -1,6 +1,5 @@
package com.kabouzeid.gramophone.adapter.album; package com.kabouzeid.gramophone.adapter.album;
import android.graphics.Bitmap;
import android.support.annotation.LayoutRes; import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -11,11 +10,16 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
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;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.AlbumSongLoader; import com.kabouzeid.gramophone.loader.AlbumSongLoader;
@ -24,14 +28,6 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -114,38 +110,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
holder.text.setText(getAlbumText(album)); holder.text.setText(getAlbumText(album));
} }
ImageLoader.getInstance().displayImage( loadAlbumCover(album, holder);
getAlbumImageLoaderUri(album),
holder.image,
new DisplayImageOptions.Builder()
.cacheInMemory(true)
.showImageOnFail(R.drawable.default_album_art)
.resetViewBeforeLoading(true)
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
return bitmap;
}
})
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME, true, true, false) {
@Override
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
super.display(bitmap, imageAware, loadedFrom);
if (usePalette)
setColors(holder.paletteColor, holder);
}
})
.build(),
new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
if (usePalette)
setColors(defaultBarColor, holder);
}
}
);
} }
private void setColors(int color, ViewHolder holder) { private void setColors(int color, ViewHolder holder) {
@ -160,6 +125,23 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
} }
} }
protected void loadAlbumCover(Album album, final ViewHolder holder) {
if (holder.image == null) return;
Glide.with(activity)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(album.id))
.asBitmap()
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.into(new PhonographColoredTarget(holder.image) {
@Override
public void onColorReady(int color) {
if (usePalette)
setColors(color, holder);
}
});
}
@Override @Override
public int getItemCount() { public int getItemCount() {
return dataSet.size(); return dataSet.size();

View file

@ -1,6 +1,5 @@
package com.kabouzeid.gramophone.adapter.artist; package com.kabouzeid.gramophone.adapter.artist;
import android.graphics.Bitmap;
import android.support.annotation.LayoutRes; import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -24,14 +23,6 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -87,8 +78,8 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final Artist artist = dataSet.get(position); final Artist artist = dataSet.get(position);
final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color); // final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
setColors(defaultBarColor, holder); // setColors(defaultBarColor, holder);
boolean isChecked = isChecked(artist); boolean isChecked = isChecked(artist);
holder.itemView.setActivated(isChecked); holder.itemView.setActivated(isChecked);
@ -104,42 +95,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
} }
holder.itemView.setActivated(isChecked(artist)); holder.itemView.setActivated(isChecked(artist));
if (holder.image == null) { loadArtistImage(artist, holder);
return;
}
ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false),
holder.image,
new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.showImageOnFail(R.drawable.default_artist_image)
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
return bitmap;
}
})
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME, true, true, false) {
@Override
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
super.display(bitmap, imageAware, loadedFrom);
if (usePalette)
setColors(holder.paletteColor, holder);
}
})
.build(),
new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
if (usePalette)
setColors(defaultBarColor, holder);
}
}
);
} }
private void setColors(int color, ViewHolder holder) { private void setColors(int color, ViewHolder holder) {
@ -154,6 +110,43 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
} }
} }
protected void loadArtistImage(Artist artist, final ViewHolder holder) {
if (holder.image == null) return;
//TODO Glide
// ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false),
// holder.image,
// new DisplayImageOptions.Builder()
// .cacheInMemory(true)
// .cacheOnDisk(true)
// .resetViewBeforeLoading(true)
// .showImageOnFail(R.drawable.default_artist_image)
// .postProcessor(new BitmapProcessor() {
// @Override
// public Bitmap process(Bitmap bitmap) {
// holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
// return bitmap;
// }
// })
// .displayer(new FadeInBitmapDisplayer(FADE_IN_TIME, true, true, false) {
// @Override
// public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
// super.display(bitmap, imageAware, loadedFrom);
// if (usePalette)
// setColors(holder.paletteColor, holder);
// }
// })
// .build(),
// new SimpleImageLoadingListener() {
// @Override
// public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
// FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
// if (usePalette)
// setColors(ColorUtil.resolveColor(activity, R.attr.default_bar_color), holder);
// }
// }
// );
}
@Override @Override
public int getItemCount() { public int getItemCount() {
return dataSet.size(); return dataSet.size();

View file

@ -64,4 +64,9 @@ public class AlbumSongAdapter extends SongAdapter {
} }
} }
} }
@Override
protected void loadAlbumCover(Song song, SongAdapter.ViewHolder holder) {
// We don't want to load it in this adapter
}
} }

View file

@ -64,7 +64,7 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda
@Override @Override
protected void loadAlbumCover(Song song, SongAdapter.ViewHolder holder) { protected void loadAlbumCover(Song song, SongAdapter.ViewHolder holder) {
// We don't need to load it in this adapter // We don't want to load it in this adapter
} }
public void swapDataSet(ArrayList<Song> dataSet, int position) { public void swapDataSet(ArrayList<Song> dataSet, int position) {

View file

@ -1,6 +1,5 @@
package com.kabouzeid.gramophone.adapter.song; package com.kabouzeid.gramophone.adapter.song;
import android.graphics.Bitmap;
import android.support.annotation.LayoutRes; import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -12,11 +11,16 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
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;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
@ -24,14 +28,6 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList; import java.util.ArrayList;
@ -93,7 +89,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final Song song = dataSet.get(position); final Song song = dataSet.get(position);
setColors(ColorUtil.resolveColor(activity, R.attr.default_bar_color), holder); // setColors(ColorUtil.resolveColor(activity, R.attr.default_bar_color), holder);
boolean isChecked = isChecked(song); boolean isChecked = isChecked(song);
holder.itemView.setActivated(isChecked); holder.itemView.setActivated(isChecked);
@ -126,38 +122,19 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
protected void loadAlbumCover(Song song, final ViewHolder holder) { protected void loadAlbumCover(Song song, final ViewHolder holder) {
if (holder.image == null) return; if (holder.image == null) return;
ImageLoader.getInstance().displayImage( Glide.with(activity)
getSongImageLoaderUri(song), .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId))
holder.image, .asBitmap()
new DisplayImageOptions.Builder() .transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class)
.cacheInMemory(true) .diskCacheStrategy(DiskCacheStrategy.NONE)
.showImageOnFail(R.drawable.default_album_art) .error(R.drawable.default_album_art)
.resetViewBeforeLoading(true) .into(new PhonographColoredTarget(holder.image) {
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
return bitmap;
}
})
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME, true, true, false) {
@Override
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
super.display(bitmap, imageAware, loadedFrom);
if (usePalette)
setColors(holder.paletteColor, holder);
}
})
.build(),
new SimpleImageLoadingListener() {
@Override @Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) { public void onColorReady(int color) {
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
if (usePalette) if (usePalette)
setColors(ColorUtil.resolveColor(activity, R.attr.default_bar_color), holder); setColors(color, holder);
} }
} });
);
} }
protected String getSongTitle(Song song) { protected String getSongTitle(Song song) {

View file

@ -5,23 +5,21 @@ import android.widget.ImageView;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTarget;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import hugo.weaving.DebugLog; public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
public PhonographColoredTarget(ImageView view) {
public abstract class PhonographPaletteTarget extends BitmapPaletteTarget {
public PhonographPaletteTarget(ImageView view) {
super(view); super(view);
} }
@DebugLog
@Override @Override
public void onLoadFailed(Exception e, Drawable errorDrawable) { public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable); super.onLoadFailed(e, errorDrawable);
onColorReady(getDefaultBarColor()); onColorReady(getDefaultBarColor());
} }
@DebugLog
@Override @Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) { public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
super.onResourceReady(resource, glideAnimation); super.onResourceReady(resource, glideAnimation);

View file

@ -1,4 +1,4 @@
package com.kabouzeid.gramophone.glide; package com.kabouzeid.gramophone.glide.palette;
import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;

View file

@ -1,4 +1,4 @@
package com.kabouzeid.gramophone.glide; package com.kabouzeid.gramophone.glide.palette;
import android.widget.ImageView; import android.widget.ImageView;

View file

@ -1,4 +1,4 @@
package com.kabouzeid.gramophone.glide; package com.kabouzeid.gramophone.glide.palette;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;

View file

@ -1,4 +1,4 @@
package com.kabouzeid.gramophone.glide; package com.kabouzeid.gramophone.glide.palette;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.support.v7.graphics.Palette; import android.support.v7.graphics.Palette;

View file

@ -10,7 +10,6 @@ import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Point;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.MediaMetadataRetriever; import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient; import android.media.RemoteControlClient;
@ -28,7 +27,6 @@ import android.preference.PreferenceManager;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
@ -36,22 +34,12 @@ import com.kabouzeid.gramophone.appwidget.WidgetMedium;
import com.kabouzeid.gramophone.helper.PlayingNotificationHelper; import com.kabouzeid.gramophone.helper.PlayingNotificationHelper;
import com.kabouzeid.gramophone.helper.ShuffleHelper; import com.kabouzeid.gramophone.helper.ShuffleHelper;
import com.kabouzeid.gramophone.helper.StopWatch; import com.kabouzeid.gramophone.helper.StopWatch;
import com.kabouzeid.gramophone.imageloader.BlurProcessor;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.provider.HistoryStore; import com.kabouzeid.gramophone.provider.HistoryStore;
import com.kabouzeid.gramophone.provider.MusicPlaybackQueueStore; import com.kabouzeid.gramophone.provider.MusicPlaybackQueueStore;
import com.kabouzeid.gramophone.provider.SongPlayCountStore; import com.kabouzeid.gramophone.provider.SongPlayCountStore;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.assist.ViewScaleType;
import com.nostra13.universalimageloader.core.imageaware.NonViewAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
@ -142,23 +130,24 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private boolean notHandledMetaChangedForCurrentTrack; private boolean notHandledMetaChangedForCurrentTrack;
private boolean isServiceInUse; private boolean isServiceInUse;
private BlurProcessor blurProcessor = new BlurProcessor.Builder(this).build(); // TODO Glide
// we don't want to hand our bitmap to the remote control client, as it will recycle it // private BlurProcessor blurProcessor = new BlurProcessor.Builder(this).build();
private BitmapProcessor copyProcessor = new BitmapProcessor() { // // we don't want to hand our bitmap to the remote control client, as it will recycle it
@Override // private BitmapProcessor copyProcessor = new BitmapProcessor() {
public Bitmap process(Bitmap bitmap) { // @Override
Bitmap.Config config = bitmap.getConfig(); // public Bitmap process(Bitmap bitmap) {
if (config == null) { // Bitmap.Config config = bitmap.getConfig();
config = Bitmap.Config.ARGB_8888; // if (config == null) {
} // config = Bitmap.Config.ARGB_8888;
try { // }
return bitmap.copy(config, false); // try {
} catch (OutOfMemoryError e) { // return bitmap.copy(config, false);
e.printStackTrace(); // } catch (OutOfMemoryError e) {
return null; // e.printStackTrace();
} // return null;
} // }
}; // }
// };
private static String getTrackUri(@NonNull Song song) { private static String getTrackUri(@NonNull Song song) {
return MusicUtil.getSongUri(song.id).toString(); return MusicUtil.getSongUri(song.id).toString();
@ -461,27 +450,44 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration) .putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration)
.apply(); .apply();
if (showAlbumArt) { if (showAlbumArt) {
final String currentAlbumArtUri = MusicUtil.getSongImageLoaderString(song);
Point screenSize = Util.getScreenSize(this);
ImageLoader.getInstance().displayImage(
currentAlbumArtUri,
new NonViewAware(new ImageSize(screenSize.x, screenSize.y), ViewScaleType.CROP),
new DisplayImageOptions.Builder().postProcessor(blurAlbumArt ? blurProcessor : copyProcessor).build(),
new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) {
if (currentAlbumArtUri.equals(imageUri)) {
updateRemoteControlClientBitmap(loadedImage);
}
}
@Override // ImageLoader.getInstance().displayImage(
public void onLoadingFailed(String imageUri, View view, FailReason failReason) { // currentAlbumArtUri,
if (currentAlbumArtUri.equals(imageUri)) { // new NonViewAware(new ImageSize(screenSize.x, screenSize.y), ViewScaleType.CROP),
updateRemoteControlClientBitmap(null); // new DisplayImageOptions.Builder().postProcessor(blurAlbumArt ? blurProcessor : copyProcessor).build(),
} // new SimpleImageLoadingListener() {
} // @Override
}); // public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) {
// if (currentAlbumArtUri.equals(imageUri)) {
// updateRemoteControlClientBitmap(loadedImage);
// }
// }
//
// @Override
// public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
// if (currentAlbumArtUri.equals(imageUri)) {
// updateRemoteControlClientBitmap(null);
// }
// }
// });
// NOTE THIS MIGHT NOT BE THE UI THREAD
// Point screenSize = Util.getScreenSize(this);
// Glide.with(this)
// .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId))
// .asBitmap()
// // TODO transformations
// .into(new SimpleTarget<Bitmap>(screenSize.x, screenSize.y) {
// @Override
// public void onLoadFailed(Exception e, Drawable errorDrawable) {
// super.onLoadFailed(e, errorDrawable);
// updateRemoteControlClientBitmap(null);
// }
//
// @Override
// public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
// updateRemoteControlClientBitmap(resource);
// }
// });
} else { } else {
updateRemoteControlClientBitmap(null); updateRemoteControlClientBitmap(null);
} }

View file

@ -1,11 +1,10 @@
package com.kabouzeid.gramophone.ui.activities; package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
@ -17,10 +16,16 @@ import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.afollestad.materialdialogs.util.DialogUtils; import com.afollestad.materialdialogs.util.DialogUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter; import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder; import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
@ -36,11 +41,6 @@ import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList; import java.util.ArrayList;
@ -157,59 +157,43 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
} }
private void setUpAlbumArtAndApplyPalette() { private void setUpAlbumArtAndApplyPalette() {
ImageLoader.getInstance().displayImage( Glide.with(this)
MusicUtil.getAlbumImageLoaderString(album), .loadFromMediaStore(MusicUtil.getAlbumArtUri(album.id))
albumArtImageView, .asBitmap()
new DisplayImageOptions.Builder() .transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class)
.cacheInMemory(true) .diskCacheStrategy(DiskCacheStrategy.NONE)
.showImageOnFail(R.drawable.default_album_art) .error(R.drawable.default_album_art)
.resetViewBeforeLoading(true) .into(new PhonographColoredTarget(albumArtImageView) {
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
final int color = ColorUtil.generateColor(AlbumDetailActivity.this, bitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
setColors(color);
}
});
return bitmap;
}
})
.build(),
new SimpleImageLoadingListener() {
@Override @Override
public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) { public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
setColors(ColorUtil.resolveColor(AlbumDetailActivity.this, R.attr.default_bar_color)); super.onResourceReady(resource, glideAnimation);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
startPostponedEnterTransition(); startPostponedEnterTransition();
} }
@Override @Override
public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) { public void onLoadFailed(Exception e, Drawable errorDrawable) {
if (loadedImage == null) { super.onLoadFailed(e, errorDrawable);
onLoadingFailed(imageUri, view, null);
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
startPostponedEnterTransition(); startPostponedEnterTransition();
} }
}
); @Override
public void onColorReady(int color) {
setColors(color);
}
});
} }
private void setColors(int vibrantColor) { private void setColors(int color) {
toolbarColor = vibrantColor; toolbarColor = color;
albumTitleView.setBackgroundColor(vibrantColor); albumTitleView.setBackgroundColor(color);
albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor)); albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
if (shouldColorNavigationBar()) if (shouldColorNavigationBar())
setNavigationBarColor(vibrantColor); setNavigationBarColor(color);
notifyTaskColorChange(vibrantColor); notifyTaskColorChange(color);
} }
@Override @Override

View file

@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.ui.activities; package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@ -41,14 +40,8 @@ import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList; import java.util.ArrayList;
@ -249,52 +242,53 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
private void setUpArtistImageAndApplyPalette(final boolean forceDownload) { private void setUpArtistImageAndApplyPalette(final boolean forceDownload) {
ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, forceDownload), // TODO Glide
artistImage, // ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, forceDownload),
new DisplayImageOptions.Builder() // artistImage,
.cacheInMemory(true) // new DisplayImageOptions.Builder()
.cacheOnDisk(true) // .cacheInMemory(true)
.showImageOnFail(R.drawable.default_artist_image) // .cacheOnDisk(true)
.resetViewBeforeLoading(true) // .showImageOnFail(R.drawable.default_artist_image)
.postProcessor(new BitmapProcessor() { // .resetViewBeforeLoading(true)
@Override // .postProcessor(new BitmapProcessor() {
public Bitmap process(Bitmap bitmap) { // @Override
final int color = ColorUtil.generateColor(ArtistDetailActivity.this, bitmap); // public Bitmap process(Bitmap bitmap) {
runOnUiThread(new Runnable() { // final int color = ColorUtil.generateColor(ArtistDetailActivity.this, bitmap);
@Override // runOnUiThread(new Runnable() {
public void run() { // @Override
setColors(color); // public void run() {
} // setColors(color);
}); // }
return bitmap; // });
} // return bitmap;
}) // }
.build(), // })
new SimpleImageLoadingListener() { // .build(),
@Override // new SimpleImageLoadingListener() {
public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) { // @Override
setColors(ColorUtil.resolveColor(ArtistDetailActivity.this, R.attr.default_bar_color)); // public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) {
// setColors(ColorUtil.resolveColor(ArtistDetailActivity.this, R.attr.default_bar_color));
toastUpdatedArtistImageIfDownloadWasForced(); //
} // toastUpdatedArtistImageIfDownloadWasForced();
// }
@Override //
public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) { // @Override
if (loadedImage == null) { // public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) {
onLoadingFailed(imageUri, view, null); // if (loadedImage == null) {
return; // onLoadingFailed(imageUri, view, null);
} // return;
// }
toastUpdatedArtistImageIfDownloadWasForced(); //
} // toastUpdatedArtistImageIfDownloadWasForced();
// }
private void toastUpdatedArtistImageIfDownloadWasForced() { //
if (forceDownload) { // private void toastUpdatedArtistImageIfDownloadWasForced() {
Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show(); // if (forceDownload) {
} // Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show();
} // }
} // }
); // }
// );
} }
@Override @Override

View file

@ -35,6 +35,8 @@ import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.adapter.PagerAdapter;
import com.kabouzeid.gramophone.dialogs.ChangelogDialog; import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
@ -60,8 +62,6 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil; import com.kabouzeid.gramophone.util.ViewUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import java.io.File; import java.io.File;
@ -274,15 +274,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
} }
((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title); ((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title);
((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName); ((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName);
ImageLoader.getInstance().displayImage( Glide.with(this)
MusicUtil.getSongImageLoaderString(song), .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId))
((ImageView) navigationDrawerHeader.findViewById(R.id.image)), .diskCacheStrategy(DiskCacheStrategy.NONE)
new DisplayImageOptions.Builder() .error(R.drawable.default_album_art)
.cacheInMemory(true) .into(((ImageView) navigationDrawerHeader.findViewById(R.id.image)));
.showImageOnFail(R.drawable.default_album_art)
.resetViewBeforeLoading(true)
.build()
);
} else { } else {
if (navigationDrawerHeader != null) { if (navigationDrawerHeader != null) {
navigationView.removeHeaderView(navigationDrawerHeader); navigationView.removeHeaderView(navigationDrawerHeader);