package com.simplecity.amp_library.ui.modelviews; import android.support.v4.view.ViewCompat; import com.bignerdranch.android.multiselector.MultiSelector; import com.bumptech.glide.RequestManager; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.github.florent37.glidepalette.GlidePalette; 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.Album; import com.simplecity.amp_library.model.ContentsComparator; import com.simplecity.amp_library.utils.StringUtils; import java.util.Arrays; import java.util.List; public class AlbumView extends MultiItemView<Album> implements ContentsComparator { private static final String TAG = "AlbumView"; public Album album; private int viewType; private RequestManager requestManager; private PrefixHighlighter prefixHighlighter; private char[] prefix; public AlbumView(Album album, @ViewType int viewType, RequestManager requestManager) { this.album = album; this.viewType = viewType; this.requestManager = requestManager; } public AlbumView(Album album, @ViewType int viewType, RequestManager requestManager, MultiSelector multiSelector) { this.album = album; this.viewType = viewType; this.requestManager = requestManager; this.multiSelector = multiSelector; } public void setPrefix(PrefixHighlighter prefixHighlighter, char[] prefix) { this.prefixHighlighter = prefixHighlighter; this.prefix = prefix; } @Override public int getViewType() { return viewType; } public void setViewType(int viewType) { this.viewType = viewType; } @Override public void bindView(final ViewHolder holder) { holder.lineOne.setText(album.name); holder.lineTwo.setText(String.format("%s | %s", album.albumArtistName, StringUtils.makeAlbumAndSongsLabel(holder.itemView.getContext(), -1, album.numSongs))); if (getViewType() == ViewType.ALBUM_PALETTE) { holder.bottomContainer.setBackgroundColor(0x20000000); } requestManager.load(album) .listener(getViewType() == ViewType.ALBUM_PALETTE ? GlidePalette.with(album.getArtworkKey()) .use(GlidePalette.Profile.MUTED_DARK) .intoBackground(holder.bottomContainer) .crossfade(true) : null) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(GlideUtils.getPlaceHolderDrawable(album.name, false)) .into(holder.imageOne); holder.overflowButton.setContentDescription(holder.itemView.getResources().getString(R.string.btn_options, album.name)); if (prefixHighlighter != null) { prefixHighlighter.setText(holder.lineOne, prefix); prefixHighlighter.setText(holder.lineTwo, prefix); } ViewCompat.setTransitionName(holder.imageOne, album.getArtworkKey()); } @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 Album getItem() { return album; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AlbumView albumView = (AlbumView) o; if (viewType != albumView.viewType) return false; return album != null ? album.equals(albumView.album) : albumView.album == null; } @Override public int hashCode() { int result = album != null ? album.hashCode() : 0; result = 31 * result + viewType; return result; } @Override public boolean areContentsEqual(Object other) { return this.equals(other) && Arrays.equals(prefix, ((AlbumView) other).prefix); } }