package io.hefuyi.listener.ui.adapter; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.graphics.Palette; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.ArrayList; import java.util.List; import io.hefuyi.listener.MusicPlayer; import io.hefuyi.listener.R; import io.hefuyi.listener.mvp.model.Song; import io.hefuyi.listener.util.ATEUtil; import io.hefuyi.listener.util.ColorUtil; import io.hefuyi.listener.util.ListenerUtil; /** * Created by hefuyi on 2016/12/26. */ public class PlayqueueSongsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ private int currentlyPlayingPosition; private List<Song> arraylist; private AppCompatActivity mContext; private long[] songIDs; private Palette.Swatch mSwatch; public PlayqueueSongsAdapter(AppCompatActivity context, List<Song> arraylist) { if (arraylist == null) { this.arraylist = new ArrayList<>(); } else { this.arraylist = arraylist; } this.mContext = context; this.songIDs = getSongIds(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View song = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list_linear_layout_item, viewGroup, false); return new ItemHolder(song); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ItemHolder itemHolder = (ItemHolder) holder; Song localItem; localItem = arraylist.get(position); itemHolder.title.setText(localItem.title); itemHolder.artist.setText(localItem.artistName); itemHolder.album.setText(localItem.albumName); if (mSwatch != null) { itemHolder.title.setTextColor(mSwatch.getBodyTextColor()); itemHolder.artist.setTextColor(mSwatch.getTitleTextColor()); itemHolder.album.setTextColor(mSwatch.getTitleTextColor()); if (MusicPlayer.getQueuePosition() == position) { itemHolder.playIndicator.setVisibility(View.VISIBLE); itemHolder.playIndicator.setBackgroundColor(ColorUtil.getBlackWhiteColor(mSwatch.getRgb())); } else { itemHolder.playIndicator.setVisibility(View.GONE); } } Glide.with(holder.itemView.getContext()).load(ListenerUtil.getAlbumArtUri(localItem.albumId).toString()) .error(ATEUtil.getDefaultAlbumDrawable(mContext)) .placeholder(ATEUtil.getDefaultAlbumDrawable(mContext)) .centerCrop() .into(itemHolder.albumArt); } @Override public int getItemCount() { return arraylist.size(); } public long[] getSongIds() { int songNum = arraylist.size(); long[] ret = new long[songNum]; for (int i = 0; i < songNum; i++) { ret[i] = arraylist.get(i).id; } return ret; } public void setSongList(List<Song> arraylist) { this.arraylist = arraylist; this.songIDs = getSongIds(); notifyDataSetChanged(); } public void setPaletteSwatch(Palette.Swatch swatch) { mSwatch = swatch; notifyDataSetChanged(); } public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private TextView title; private TextView artist; private TextView album; private ImageView albumArt; private ImageView popupMenu; private View playIndicator; public ItemHolder(View view) { super(view); this.title = (TextView) view.findViewById(R.id.text_item_title); this.artist = (TextView) view.findViewById(R.id.text_item_subtitle); this.album = (TextView) view.findViewById(R.id.text_item_subtitle_2); this.albumArt = (ImageView) view.findViewById(R.id.image); this.popupMenu = (ImageView) view.findViewById(R.id.popup_menu); this.playIndicator = view.findViewById(R.id.now_playing_indicator); popupMenu.setImageDrawable(mContext.getResources().getDrawable(R.drawable.ic_clear_white_36dp)); popupMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MusicPlayer.removeFromQueue(getAdapterPosition()); arraylist.remove(getAdapterPosition()); songIDs = getSongIds(); notifyItemRemoved(getAdapterPosition()); } }); view.setOnClickListener(this); } @Override public void onClick(View v) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { MusicPlayer.playAll(mContext, songIDs, getAdapterPosition(), -1, ListenerUtil.IdType.NA, false); Handler handler1 = new Handler(); handler1.postDelayed(new Runnable() { @Override public void run() { notifyItemChanged(currentlyPlayingPosition); notifyItemChanged(getAdapterPosition()); currentlyPlayingPosition = getAdapterPosition(); } }, 50); } }, 100); } } }