package com.architjn.acjmusicplayer.utils.adapters;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.architjn.acjmusicplayer.R;
import com.architjn.acjmusicplayer.service.PlayerService;
import com.architjn.acjmusicplayer.ui.widget.PointShiftingArrayList;
import com.architjn.acjmusicplayer.utils.ListSongs;
import com.architjn.acjmusicplayer.utils.Utils;
import com.architjn.acjmusicplayer.utils.items.Song;
import com.squareup.picasso.Picasso;
import java.io.File;
/**
* Created by architjn on 28/11/15.
*/
public class PlayingListAdapter extends RecyclerView.Adapter<PlayingListAdapter.SimpleItemViewHolder> {
private static final int ITEM_VIEW_TYPE_HEADER = 0;
private static final int ITEM_VIEW_TYPE_ITEM = 1;
private static final int ITEM_VIEW_TYPE_UP_NEXT_HEADER = 2;
private PointShiftingArrayList<Song> items;
private Context context;
private View header;
private int lightColor;
private int darkColor;
public PlayingListAdapter(Context context, View header, PointShiftingArrayList<Song> items) {
this.context = context;
this.header = header;
this.items = items;
}
public boolean isHeader(int position) {
return position == 0;
}
public boolean isUpNextHeader(int position) {
return position == 2;
}
@Override
public PlayingListAdapter.SimpleItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_VIEW_TYPE_HEADER) {
return new SimpleItemViewHolder(header);
} else if (viewType == ITEM_VIEW_TYPE_UP_NEXT_HEADER) {
return new SimpleItemViewHolder(LayoutInflater.from(parent.getContext()).
inflate(R.layout.up_next_header, parent, false));
}
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.songs_list_item, parent, false);
return new SimpleItemViewHolder(itemView);
}
public void setCurrentColor(int lightColor, int darkColor) {
this.lightColor = lightColor;
this.darkColor = darkColor;
}
@Override
public void onBindViewHolder(final PlayingListAdapter.SimpleItemViewHolder holder, final int position) {
if (isHeader(position)) {
holder.seekHolder.setBackgroundColor(darkColor);
holder.controlHolder.setBackgroundColor(lightColor);
return;
} else if (isUpNextHeader(position)) {
return;
}
holder.name.setText(items.get(getPosition(position)).getName());
holder.artistName.setText(items.get(getPosition(position)).getArtist());
holder.img.setPadding(0, 0, 0, 0);
//Load Image in Background
Utils utils = new Utils(context);
if (getPosition(position) == 0) {
int padding = utils.dpToPx(10);
holder.img.setPadding(padding, padding, padding, padding);
Picasso.with(context).load(R.drawable.ic_speaker_48dp).into(holder.img);
} else {
String path = ListSongs.getAlbumArt(context,
items.get(getPosition(position)).getAlbumId());
int size = utils.dpToPx(50);
if (path != null)
Picasso.with(context).load(new File(path)).resize(size,
size).centerCrop().into(holder.img);
else {
holder.img.setImageBitmap(utils.getBitmapOfVector(R.drawable.default_art,
size, size));
}
}
setOnClick(holder, getPosition(position));
}
private void setOnClick(SimpleItemViewHolder holder, final int position) {
holder.mainView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position == 0) {
new Thread(new Runnable() {
public void run() {
Intent i = new Intent(PlayerService.ACTION_SEEK_SONG);
i.putExtra("seek", 0);
context.sendBroadcast(i);
// ((PlayerActivity) context).seekBar.setProgress(0);
}
}).start();
return;
}
new Thread(new Runnable() {
public void run() {
Intent i = new Intent();
i.setAction(PlayerService.ACTION_CHANGE_SONG);
i.putExtra("pos", items.getNormalIndex(position));
context.sendBroadcast(i);
}
}).start();
}
});
holder.menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu pm = new PopupMenu(context, view);
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.popup_song_play:
new Thread(new Runnable() {
public void run() {
Intent i = new Intent(PlayerService.ACTION_PLAY_SINGLE);
i.putExtra("songId", items.get(position).getSongId());
context.sendBroadcast(i);
}
}).start();
break;
case R.id.popup_song_addtoplaylist:
break;
}
return false;
}
});
pm.inflate(R.menu.popup_song);
pm.show();
}
});
}
private int getPosition(int position) {
if (position > 2)
return position - 2;
return position - 1;
}
@Override
public int getItemCount() {
return items.size() + 2;
}
public void setPointOnShifted(int pointOnShifted) {
items.setPointOnShifted(pointOnShifted);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (isHeader(position))
return ITEM_VIEW_TYPE_HEADER;
else if (isUpNextHeader(position))
return ITEM_VIEW_TYPE_UP_NEXT_HEADER;
else
return ITEM_VIEW_TYPE_ITEM;
}
public class SimpleItemViewHolder extends RecyclerView.ViewHolder {
public TextView name, artistName;
public View mainView, menu;
public ImageView img;
public View seekHolder, controlHolder;
public SimpleItemViewHolder(View itemView) {
super(itemView);
mainView = itemView;
img = (ImageView) itemView.findViewById(R.id.song_item_img);
name = (TextView) itemView.findViewById(R.id.song_item_name);
menu = itemView.findViewById(R.id.song_item_menu);
artistName = (TextView) itemView.findViewById(R.id.song_item_artist);
seekHolder = itemView.findViewById(R.id.control_seek_bar_holder);
controlHolder = itemView.findViewById(R.id.controller_holder);
}
}
}