Added native image loader support for artist images. Automatically recreate activity onrResume when colors changed fixes issues #2 and #39. Also Butterknife should be used now everywhere #40
This commit is contained in:
parent
9c8cba612b
commit
8bdaf08a30
29 changed files with 485 additions and 521 deletions
|
|
@ -13,9 +13,6 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.ArtistInfo;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
||||
import com.kabouzeid.gramophone.loader.ArtistLoader;
|
||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||
|
|
@ -33,9 +30,6 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
|
|
@ -48,11 +42,9 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
|
||||
private final AppCompatActivity activity;
|
||||
private List results = Collections.emptyList();
|
||||
private final LastFMRestClient lastFMRestClient;
|
||||
|
||||
public SearchAdapter(@NonNull AppCompatActivity activity) {
|
||||
this.activity = activity;
|
||||
lastFMRestClient = new LastFMRestClient(activity);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
@ -122,37 +114,15 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
break;
|
||||
}
|
||||
lastFMRestClient.getApiService().getArtistInfo(artist.name, null, new Callback<ArtistInfo>() {
|
||||
@Override
|
||||
public void success(@NonNull ArtistInfo artistInfo, Response response) {
|
||||
if (artistInfo.getArtist() != null) {
|
||||
int thumbnailIndex = 0;
|
||||
List<Image> images = artistInfo.getArtist().getImage();
|
||||
if (images.size() > 2) {
|
||||
thumbnailIndex = 2;
|
||||
} else if (images.size() > 1) {
|
||||
thumbnailIndex = 1;
|
||||
}
|
||||
ImageLoader.getInstance().displayImage(images.get(thumbnailIndex).getText(),
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.resetViewBeforeLoading(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.showImageForEmptyUri(R.drawable.default_artist_image)
|
||||
.build()
|
||||
);
|
||||
} else {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
});
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false),
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.resetViewBeforeLoading(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case SONG:
|
||||
final Song song = (Song) results.get(position);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.view.LayoutInflater;
|
|||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
||||
|
|
@ -26,7 +25,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
|||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
|
|
@ -34,6 +32,7 @@ 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.List;
|
||||
|
|
@ -51,7 +50,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
|
||||
protected int itemLayoutRes;
|
||||
|
||||
protected boolean usePalette;
|
||||
protected boolean usePalette = false;
|
||||
|
||||
public AlbumAdapter(@NonNull AppCompatActivity activity, ArrayList<Album> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_media_selection);
|
||||
|
|
@ -62,6 +61,11 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
setHasStableIds(true);
|
||||
}
|
||||
|
||||
public void usePalette(boolean usePalette) {
|
||||
this.usePalette = usePalette;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public List<Album> getDataSet() {
|
||||
return dataSet;
|
||||
}
|
||||
|
|
@ -99,11 +103,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
final Album album = dataSet.get(position);
|
||||
|
||||
final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
|
||||
ViewUtil.applyBackgroundColor(
|
||||
defaultBarColor,
|
||||
new View[]{holder.paletteColorContainer},
|
||||
new TextView[]{holder.title, holder.text},
|
||||
false);
|
||||
setColors(defaultBarColor, holder);
|
||||
|
||||
final boolean isChecked = isChecked(album);
|
||||
holder.itemView.setActivated(isChecked);
|
||||
|
|
@ -125,6 +125,13 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
.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) {
|
||||
@Override
|
||||
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
|
||||
|
|
@ -135,12 +142,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
super.display(bitmap, imageAware, loadedFrom);
|
||||
}
|
||||
if (usePalette)
|
||||
ViewUtil.applyBackgroundColorFromBitmap(
|
||||
bitmap,
|
||||
defaultBarColor,
|
||||
new View[]{holder.paletteColorContainer},
|
||||
new TextView[]{holder.title, holder.text},
|
||||
!loadedFromMemoryCache);
|
||||
setColors(holder.paletteColor, holder);
|
||||
}
|
||||
})
|
||||
.build(),
|
||||
|
|
@ -149,16 +151,25 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
|
||||
if (usePalette)
|
||||
ViewUtil.applyBackgroundColor(
|
||||
defaultBarColor,
|
||||
new View[]{holder.paletteColorContainer},
|
||||
new TextView[]{holder.title, holder.text},
|
||||
true);
|
||||
setColors(defaultBarColor, holder);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private void setColors(int color, ViewHolder holder) {
|
||||
if (holder.paletteColorContainer != null) {
|
||||
holder.paletteColorContainer.setBackgroundColor(color);
|
||||
int textColor = ColorUtil.getTextColorForBackground(color);
|
||||
if (holder.title != null) {
|
||||
holder.title.setTextColor(textColor);
|
||||
}
|
||||
if (holder.text != null) {
|
||||
holder.text.setTextColor(textColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return dataSet.size();
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public class HorizontalAlbumAdapter extends AlbumAdapter {
|
|||
|
||||
public HorizontalAlbumAdapter(@NonNull AppCompatActivity activity, ArrayList<Album> dataSet, @Nullable CabHolder cabHolder) {
|
||||
super(activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, cabHolder);
|
||||
usePalette = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@ import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
|||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.ArtistInfo;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Artist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
|
|
@ -32,10 +29,6 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -43,14 +36,12 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
protected final AppCompatActivity activity;
|
||||
protected ArrayList<Artist> dataSet;
|
||||
protected int itemLayoutRes;
|
||||
protected final LastFMRestClient lastFMRestClient;
|
||||
|
||||
public ArtistAdapter(@NonNull AppCompatActivity activity, ArrayList<Artist> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
this.dataSet = dataSet;
|
||||
this.itemLayoutRes = itemLayoutRes;
|
||||
lastFMRestClient = new LastFMRestClient(activity);
|
||||
setHasStableIds(true);
|
||||
}
|
||||
|
||||
|
|
@ -94,39 +85,15 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
return;
|
||||
}
|
||||
|
||||
if (MusicUtil.isArtistNameUnknown(artist.name)) {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
return;
|
||||
}
|
||||
|
||||
lastFMRestClient.getApiService().getArtistInfo(artist.name, null, new Callback<ArtistInfo>() {
|
||||
@Override
|
||||
public void success(@NonNull ArtistInfo artistInfo, Response response) {
|
||||
if (artistInfo.getArtist() != null) {
|
||||
List<Image> images = artistInfo.getArtist().getImage();
|
||||
if (images == null || images.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
ImageLoader.getInstance().displayImage(images.get(images.size() - 1).getText(),
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.resetViewBeforeLoading(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.showImageForEmptyUri(R.drawable.default_artist_image)
|
||||
.build()
|
||||
);
|
||||
} else {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
});
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getArtistImageLoaderString(artist, false),
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.resetViewBeforeLoading(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -41,11 +41,6 @@ public abstract class MediaEntryViewHolder extends RecyclerView.ViewHolder imple
|
|||
@InjectView(R.id.menu)
|
||||
public View menu;
|
||||
|
||||
@Nullable
|
||||
@Optional
|
||||
@InjectView(R.id.palette_color_container)
|
||||
public View paletteColorContainer;
|
||||
|
||||
@Nullable
|
||||
@Optional
|
||||
@InjectView(R.id.separator)
|
||||
|
|
@ -60,6 +55,12 @@ public abstract class MediaEntryViewHolder extends RecyclerView.ViewHolder imple
|
|||
@InjectView(R.id.selected_indicator)
|
||||
public View selectedIndicator;
|
||||
|
||||
@Nullable
|
||||
@Optional
|
||||
@InjectView(R.id.palette_color_container)
|
||||
public View paletteColorContainer;
|
||||
public int paletteColor;
|
||||
|
||||
public MediaEntryViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue