package com.markzhai.lyrichere.ui;
import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.drawable.AnimationDrawable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.media.MediaDescriptionCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.markzhai.lyrichere.AlbumArtCache;
import com.markzhai.lyrichere.R;
import com.markzhai.lyrichere.utils.LogUtils;
import com.markzhai.lyrichere.utils.LollipopUtils;
public class MediaItemViewHolder {
static final int STATE_INVALID = -1;
static final int STATE_NONE = 0;
static final int STATE_PLAYABLE = 1;
static final int STATE_PAUSED = 2;
static final int STATE_PLAYING = 3;
private static ColorStateList sColorStatePlaying;
private static ColorStateList sColorStateNotPlaying;
ImageView mImageView;
TextView mTitleView;
TextView mDescriptionView;
static View setupView(Activity activity, View convertView, ViewGroup parent,
MediaDescriptionCompat description, int state) {
if (sColorStateNotPlaying == null || sColorStatePlaying == null) {
initializeColorStateLists(activity);
}
final MediaItemViewHolder holder;
Integer cachedState = STATE_INVALID;
if (convertView == null) {
convertView = LayoutInflater.from(activity)
.inflate(R.layout.media_list_item, parent, false);
holder = new MediaItemViewHolder();
holder.mImageView = (ImageView) convertView.findViewById(R.id.play_eq);
holder.mTitleView = (TextView) convertView.findViewById(R.id.title);
holder.mDescriptionView = (TextView) convertView.findViewById(R.id.description);
convertView.setTag(holder);
} else {
holder = (MediaItemViewHolder) convertView.getTag();
cachedState = (Integer) convertView.getTag(R.id.tag_mediaitem_state_cache);
}
holder.mTitleView.setText(description.getTitle());
holder.mDescriptionView.setText(description.getSubtitle());
// If the state of convertView is different, we need to adapt the view to the
// new state.
if (cachedState == null || cachedState != state) {
switch (state) {
case STATE_PLAYABLE:
holder.mImageView.setImageDrawable(
ActivityCompat.getDrawable(activity, R.drawable.ic_play_arrow_black_36dp));
LollipopUtils.setImageTintList(holder.mImageView, sColorStateNotPlaying);
holder.mImageView.setVisibility(View.VISIBLE);
break;
case STATE_PLAYING:
AnimationDrawable animation = (AnimationDrawable)
ActivityCompat.getDrawable(activity, R.drawable.ic_equalizer_white_36dp);
holder.mImageView.setImageDrawable(animation);
LollipopUtils.setImageTintList(holder.mImageView, sColorStatePlaying);
holder.mImageView.setVisibility(View.VISIBLE);
animation.start();
break;
case STATE_PAUSED:
holder.mImageView.setImageDrawable(
ActivityCompat.getDrawable(activity, R.drawable.ic_equalizer1_white_36dp));
LollipopUtils.setImageTintList(holder.mImageView, sColorStateNotPlaying);
holder.mImageView.setVisibility(View.VISIBLE);
break;
default:
if (description.getIconUri() != null) {
String artUrl = description.getIconUri().toString();
Bitmap art = description.getIconBitmap();
AlbumArtCache cache = AlbumArtCache.getInstance();
if (art == null) {
art = cache.getIconImage(artUrl);
}
if (art != null) {
holder.mImageView.setImageBitmap(art);
} else {
cache.fetch(artUrl, new AlbumArtCache.FetchListener() {
@Override
public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) {
if (icon != null) {
holder.mImageView.setImageBitmap(icon);
}
}
}
);
}
} else {
holder.mImageView.setVisibility(View.GONE);
}
}
convertView.setTag(R.id.tag_mediaitem_state_cache, state);
}
return convertView;
}
static private void initializeColorStateLists(Context ctx) {
sColorStateNotPlaying = ColorStateList.valueOf(ctx.getResources().getColor(
R.color.media_item_icon_not_playing));
sColorStatePlaying = ColorStateList.valueOf(ctx.getResources().getColor(
R.color.media_item_icon_playing));
}
}