/*
* Copyright (C) 2015 Naman Dwivedi
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package com.naman14.timber.adapters;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.support.annotation.ColorInt;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.RecyclerView;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.appthemeengine.Config;
import com.naman14.timber.R;
import com.naman14.timber.lastfmapi.LastFmClient;
import com.naman14.timber.lastfmapi.callbacks.ArtistInfoListener;
import com.naman14.timber.lastfmapi.models.ArtistQuery;
import com.naman14.timber.lastfmapi.models.LastfmArtist;
import com.naman14.timber.models.Artist;
import com.naman14.timber.utils.Helpers;
import com.naman14.timber.utils.NavigationUtils;
import com.naman14.timber.utils.PreferencesUtility;
import com.naman14.timber.utils.TimberUtils;
import com.naman14.timber.widgets.BubbleTextGetter;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import java.util.List;
public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ItemHolder> implements BubbleTextGetter {
private List<Artist> arraylist;
private Activity mContext;
private boolean isGrid;
public ArtistAdapter(Activity context, List<Artist> arraylist) {
this.arraylist = arraylist;
this.mContext = context;
this.isGrid = PreferencesUtility.getInstance(mContext).isArtistsInGrid();
}
public static int getOpaqueColor(@ColorInt int paramInt) {
return 0xFF000000 | paramInt;
}
@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (isGrid) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist_grid, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}
@Override
public void onBindViewHolder(final ItemHolder itemHolder, int i) {
final Artist localItem = arraylist.get(i);
itemHolder.name.setText(localItem.name);
String albumNmber = TimberUtils.makeLabel(mContext, R.plurals.Nalbums, localItem.albumCount);
String songCount = TimberUtils.makeLabel(mContext, R.plurals.Nsongs, localItem.songCount);
itemHolder.albums.setText(TimberUtils.makeCombinedString(mContext, albumNmber, songCount));
LastFmClient.getInstance(mContext).getArtistInfo(new ArtistQuery(localItem.name), new ArtistInfoListener() {
@Override
public void artistInfoSucess(LastfmArtist artist) {
if (artist != null && artist.mArtwork != null) {
if (isGrid) {
ImageLoader.getInstance().displayImage(artist.mArtwork.get(2).mUrl, itemHolder.artistImage,
new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnFail(R.drawable.ic_empty_music2)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(400))
.build(), new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (isGrid && loadedImage != null) {
new Palette.Builder(loadedImage).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
int color = palette.getVibrantColor(Color.parseColor("#66000000"));
itemHolder.footer.setBackgroundColor(color);
Palette.Swatch swatch = palette.getVibrantSwatch();
int textColor;
if (swatch != null) {
textColor = getOpaqueColor(swatch.getTitleTextColor());
} else textColor = Color.parseColor("#ffffff");
itemHolder.name.setTextColor(textColor);
itemHolder.albums.setTextColor(textColor);
}
});
}
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
if (isGrid) {
itemHolder.footer.setBackgroundColor(0);
if (mContext != null) {
int textColorPrimary = Config.textColorPrimary(mContext, Helpers.getATEKey(mContext));
itemHolder.name.setTextColor(textColorPrimary);
itemHolder.albums.setTextColor(textColorPrimary);
}
}
}
});
} else {
ImageLoader.getInstance().displayImage(artist.mArtwork.get(1).mUrl, itemHolder.artistImage,
new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnFail(R.drawable.ic_empty_music2)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(400))
.build());
}
}
}
@Override
public void artistInfoFailed() {
}
});
if (TimberUtils.isLollipop())
itemHolder.artistImage.setTransitionName("transition_artist_art" + i);
}
@Override
public int getItemCount() {
return (null != arraylist ? arraylist.size() : 0);
}
@Override
public String getTextToShowInBubble(final int pos) {
if (arraylist == null || arraylist.size() == 0)
return "";
return Character.toString(arraylist.get(pos).name.charAt(0));
}
public void updateDataSet(List<Artist> arrayList) {
this.arraylist = arrayList;
}
public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected TextView name, albums;
protected ImageView artistImage;
protected View footer;
public ItemHolder(View view) {
super(view);
this.name = (TextView) view.findViewById(R.id.artist_name);
this.albums = (TextView) view.findViewById(R.id.album_song_count);
this.artistImage = (ImageView) view.findViewById(R.id.artistImage);
this.footer = view.findViewById(R.id.footer);
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
NavigationUtils.navigateToArtist(mContext, arraylist.get(getAdapterPosition()).id,
new Pair<View, String>(artistImage, "transition_artist_art" + getAdapterPosition()));
}
}
}