package pasta.music.adapters; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.databinding.DataBindingUtil; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import butterknife.ButterKnife; import pasta.music.PlayerService; import pasta.music.R; import pasta.music.data.TrackListData; import pasta.music.utils.StaticUtils; public class NowPlayingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Activity activity; private ArrayList<TrackListData> trackList; private int trackPos; public NowPlayingAdapter(final Activity activity, ArrayList<TrackListData> trackList, int curPosition) { this.activity = activity; this.trackList = trackList; this.trackPos = curPosition; } public void swapData(ArrayList<TrackListData> trackList, int curPosition) { this.trackList = trackList; this.trackPos = curPosition; notifyDataSetChanged(); } @Override public int getItemViewType(int position) { if (position == 0 || position == 2) return 1; else return 0; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (viewType == 1) return new HeaderViewHolder(DataBindingUtil.inflate(inflater, R.layout.header_item, null, false).getRoot()); else return new ViewHolder(inflater.inflate(R.layout.track_item, null)); } @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (getItemViewType(position) == 1) { ((TextView) ((HeaderViewHolder) viewHolder).v).setText(position == 0 ? "Now Playing" : "Next Up"); return; } final ViewHolder holder = (ViewHolder) viewHolder; TrackListData track = trackList.get(getAbsPosition(position)); ButterKnife.findById(holder.v, R.id.image).setVisibility(View.GONE); ((TextView) ButterKnife.findById(holder.v, R.id.name)).setText(track.trackName); TextView extra = ButterKnife.findById(holder.v, R.id.extra); if (track.artists.size() > 0) extra.setText(track.artists.get(0).artistName); else extra.setText(""); String duration = String.valueOf(track.trackDuration); ((TextView) ButterKnife.findById(holder.v, R.id.time)).setText(StaticUtils.timeToString((Integer.parseInt(duration) / 1000) / 60, (Integer.parseInt(duration) / 1000) % 60)); holder.v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(PlayerService.ACTION_MOVE_TRACK); intent.setClass(v.getContext(), PlayerService.class); intent.putExtra(PlayerService.ACTION_MOVE_TRACK_EXTRA_POS, getAbsPosition(holder.getAdapterPosition())); v.getContext().startService(intent); } }); } public int getAbsPosition(int position) { position = position > 2 ? position - 2 : position - 1; if (position + trackPos < trackList.size()) return position + trackPos; else return Math.abs(trackList.size() - (trackPos + position)); } @Override public int getItemCount() { if (trackList != null && trackList.size() > 0) { return trackList.size() + 2; } else return 0; } public static class ViewHolder extends RecyclerView.ViewHolder { public View v; public ViewHolder(View v) { super(v); this.v = v; } } public static class HeaderViewHolder extends RecyclerView.ViewHolder { public View v; public HeaderViewHolder(View v) { super(v); this.v = v; } } }