package com.simplecity.amp_library.ui.modelviews;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bignerdranch.android.multiselector.MultiSelector;
import com.bignerdranch.android.multiselector.SwappingHolder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.simplecity.amp_library.R;
import com.simplecity.amp_library.format.PrefixHighlighter;
import com.simplecity.amp_library.glide.utils.GlideUtils;
import com.simplecity.amp_library.model.Song;
import com.simplecity.amp_library.ui.views.NonScrollImageButton;
import com.simplecity.amp_library.utils.DrawableUtils;
import com.simplecity.amp_library.utils.MusicUtils;
import com.simplecity.amp_library.utils.SettingsManager;
import java.util.Arrays;
import java.util.List;
public class SongView extends BaseAdaptableItem<Song, SongView.ViewHolder> {
private static final String TAG = "SongView";
public Song song;
private MultiSelector multiSelector;
private RequestManager requestManager;
private PrefixHighlighter prefixHighlighter;
private char[] prefix;
public SongView(Song song, MultiSelector multiSelector, RequestManager requestManager) {
this.song = song;
this.multiSelector = multiSelector;
this.requestManager = requestManager;
}
public void setPrefix(PrefixHighlighter prefixHighlighter, char[] prefix) {
this.prefixHighlighter = prefixHighlighter;
this.prefix = prefix;
}
private boolean editable;
private boolean showAlbumArt;
public void setEditable(boolean editable) {
this.editable = editable;
}
public void setShowAlbumArt(boolean showAlbumArt) {
this.showAlbumArt = showAlbumArt;
}
private boolean showTrackNumber = false;
public void setShowTrackNumber(boolean showTrackNumber) {
this.showTrackNumber = showTrackNumber;
}
@Override
public int getViewType() {
return editable ? ViewType.SONG_EDITABLE : ViewType.SONG;
}
@Override
public int getLayoutResId() {
return editable ? R.layout.list_item_edit : R.layout.list_item_two_lines;
}
@Override
public void bindView(ViewHolder holder) {
holder.lineOne.setText(song.name);
if (holder.playCount != null) {
if (song.playCount > 1) {
holder.playCount.setVisibility(View.VISIBLE);
holder.playCount.setText(String.valueOf(song.playCount));
} else {
holder.playCount.setVisibility(View.GONE);
}
}
holder.lineTwo.setText(String.format("%s - %s", song.artistName, song.albumName));
holder.lineThree.setText(song.getDurationLabel());
if (holder.dragHandle != null) {
if (MusicUtils.getSongId() == song.id) {
holder.dragHandle.setImageDrawable(DrawableUtils.getColoredAccentDrawable(holder.itemView.getContext(), holder.itemView.getResources().getDrawable(R.drawable.ic_drag_grip)));
} else {
holder.dragHandle.setImageDrawable(DrawableUtils.getBaseDrawable(holder.itemView.getContext(), R.drawable.ic_drag_grip));
}
}
if (holder.artwork != null) {
if (showAlbumArt && SettingsManager.getInstance().showArtworkInQueue()) {
holder.artwork.setVisibility(View.VISIBLE);
requestManager.load(song)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(GlideUtils.getPlaceHolderDrawable(song.albumName, false))
.into(holder.artwork);
} else {
holder.artwork.setVisibility(View.GONE);
}
}
holder.overflowButton.setContentDescription(holder.itemView.getResources().getString(R.string.btn_options, song.name));
if (prefixHighlighter != null) {
prefixHighlighter.setText(holder.lineOne, prefix);
prefixHighlighter.setText(holder.lineTwo, prefix);
}
// if (((ViewHolder) holder).dragHandle != null) {
// ((ViewHolder) holder).dragHandle.setVisibility(editable ? View.VISIBLE : View.GONE);
// }
if (holder.trackNumber != null) {
if (showTrackNumber) {
holder.trackNumber.setVisibility(View.VISIBLE);
holder.trackNumber.setText(String.valueOf(song.track));
} else {
holder.trackNumber.setVisibility(View.GONE);
}
}
}
@Override
public void bindView(ViewHolder holder, int position, List payloads) {
//A partial bind. Due to the areContentsEqual implementation, the only reason this is called
//is because the prefix changed. Update accordingly.
if (prefixHighlighter != null) {
prefixHighlighter.setText(holder.lineOne, prefix);
prefixHighlighter.setText(holder.lineTwo, prefix);
}
}
@Override
public ViewHolder getViewHolder(ViewGroup parent) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutResId(), parent, false), multiSelector);
}
@Override
public void recycle(ViewHolder holder) {
if (holder.artwork != null) {
Glide.clear(holder.artwork);
}
}
@Override
public Song getItem() {
return song;
}
public static class ViewHolder extends SwappingHolder {
public TextView lineOne;
public TextView lineTwo;
public TextView lineThree;
public TextView trackNumber;
public TextView playCount;
public NonScrollImageButton overflowButton;
public ImageView dragHandle;
public ImageView artwork;
public ViewHolder(View itemView, MultiSelector multiSelector) {
super(itemView, multiSelector);
lineOne = (TextView) itemView.findViewById(R.id.line_one);
lineTwo = (TextView) itemView.findViewById(R.id.line_two);
lineThree = (TextView) itemView.findViewById(R.id.line_three);
trackNumber = (TextView) itemView.findViewById(R.id.trackNumber);
overflowButton = (NonScrollImageButton) itemView.findViewById(R.id.btn_overflow);
playCount = (TextView) itemView.findViewById(R.id.play_count);
dragHandle = (ImageView) itemView.findViewById(R.id.drag_handle);
artwork = (ImageView) itemView.findViewById(R.id.image);
if (playCount != null) {
playCount.setBackground(DrawableUtils.getColoredDrawable(itemView.getContext(), playCount.getBackground()));
}
overflowButton.setImageDrawable(DrawableUtils.getColoredStateListDrawable(itemView.getContext(), R.drawable.ic_overflow_white));
if (dragHandle != null) {
dragHandle.setImageDrawable(DrawableUtils.getBaseDrawable(itemView.getContext(), R.drawable.ic_drag_grip));
}
}
@Override
public String toString() {
return "SongView.ViewHolder";
}
}
@Override
public boolean areContentsEqual(Object other) {
return this.equals(other) && Arrays.equals(prefix, ((SongView) other).prefix);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SongView songView = (SongView) o;
if (editable != songView.editable) return false;
if (showAlbumArt != songView.showAlbumArt) return false;
if (song != null ? !song.equals(songView.song) : songView.song != null) return false;
return Arrays.equals(prefix, songView.prefix);
}
@Override
public int hashCode() {
int result = song != null ? song.hashCode() : 0;
result = 31 * result + Arrays.hashCode(prefix);
result = 31 * result + (editable ? 1 : 0);
result = 31 * result + (showAlbumArt ? 1 : 0);
return result;
}
}