Switched from Picasso to Ion
Much better performance. Not well tested yet but it should work.
This commit is contained in:
parent
c1b258dadd
commit
a11535c8a3
39 changed files with 733 additions and 419 deletions
|
|
@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.adapter;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.graphics.Palette;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -17,16 +16,19 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
||||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.async.future.Future;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.ImageViewBitmapInfo;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.koushikdutta.ion.bitmap.BitmapInfo;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -45,36 +47,51 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
Object tag = holder.image.getTag();
|
||||
if (tag instanceof Future) {
|
||||
((Future) tag).cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Album album = dataSet.get(position);
|
||||
|
||||
resetColors(holder.title, holder.artist, holder.footer);
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.image, new Callback.EmptyCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess();
|
||||
if (usePalette) {
|
||||
final Bitmap bitmap = ((BitmapDrawable) holder.image.getDrawable()).getBitmap();
|
||||
if (bitmap != null)
|
||||
applyPalette(bitmap, holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
super.onError();
|
||||
if (usePalette) {
|
||||
paletteBlackAndWhite(holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.artist.setText(album.artistName);
|
||||
holder.image.setTag(
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.image.getWidth(), holder.image.getHeight())
|
||||
.centerCrop()
|
||||
.intoImageView(holder.image)
|
||||
.withBitmapInfo()
|
||||
.setCallback(new FutureCallback<ImageViewBitmapInfo>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, ImageViewBitmapInfo result) {
|
||||
if(result != null){
|
||||
BitmapInfo info = result.getBitmapInfo();
|
||||
if(info != null){
|
||||
Bitmap bitmap = info.bitmap;
|
||||
if (bitmap != null) {
|
||||
if (usePalette)
|
||||
applyPalette(bitmap, holder.title, holder.artist, holder.footer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
holder.image.setImageResource(R.drawable.default_album_art);
|
||||
if (usePalette)
|
||||
paletteBlackAndWhite(holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -173,9 +190,9 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
}
|
||||
|
||||
@Subscribe
|
||||
public void onUIChangeEvent(UIPreferenceChangedEvent event) {
|
||||
public void onUIChangeEvent(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
|
||||
case UiPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
|
||||
usePalette = (boolean) event.getValue();
|
||||
notifyDataSetChanged();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Bitmap;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
|
|
@ -17,8 +18,9 @@ import com.kabouzeid.gramophone.model.Artist;
|
|||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -54,12 +56,20 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
|||
|
||||
LastFMArtistThumbnailUrlLoader.loadArtistThumbnailUrl(activity, artist.name, false, new LastFMArtistThumbnailUrlLoader.ArtistThumbnailUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistThumbnailUrlLoaded(String url) {
|
||||
Picasso.with(activity)
|
||||
public void onArtistThumbnailUrlLoaded(final String url) {
|
||||
Ion.with(activity)
|
||||
.load(url)
|
||||
.noFade()
|
||||
.placeholder(R.drawable.default_artist_image)
|
||||
.into(holder.artistImage);
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null)
|
||||
holder.artistImage.setImageBitmap(result);
|
||||
else {
|
||||
holder.artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.kabouzeid.gramophone.model.Album;
|
|||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -48,10 +48,13 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Album album = dataSet.get(position);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.image);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt);
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.year.setText(String.valueOf(album.year));
|
||||
|
|
@ -72,13 +75,13 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
ImageView image;
|
||||
ImageView albumArt;
|
||||
TextView title;
|
||||
TextView year;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
image = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
title = (TextView) itemView.findViewById(R.id.album_title);
|
||||
year = (TextView) itemView.findViewById(R.id.album_year);
|
||||
itemView.setOnClickListener(this);
|
||||
|
|
@ -87,12 +90,12 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(image,
|
||||
Pair.create(albumArt,
|
||||
activity.getResources().getString(R.string.transition_album_cover)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).id, albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -11,24 +10,15 @@ import android.widget.ArrayAdapter;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -56,10 +46,13 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> {
|
|||
songTitle.setText(song.title);
|
||||
songInfo.setText(song.albumName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(albumArt);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(albumArt.getWidth(), albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(albumArt);
|
||||
|
||||
final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
|||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -43,6 +43,11 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Song song = dataSet.get(position);
|
||||
|
|
@ -50,10 +55,15 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.albumArt);
|
||||
holder.albumArt.setTag(
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -15,25 +14,18 @@ import android.widget.TextView;
|
|||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -75,10 +67,13 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
|||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.albumArt);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt);
|
||||
} else {
|
||||
int accentColor = Util.resolveColor(activity, R.attr.colorAccent);
|
||||
holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue