package com.architjn.acjmusicplayer.utils.adapters;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.async.Action;
import com.architjn.acjmusicplayer.R;
import com.architjn.acjmusicplayer.service.PlayerService;
import com.architjn.acjmusicplayer.ui.layouts.activity.MainActivity;
import com.architjn.acjmusicplayer.ui.layouts.fragments.SongsListFragment;
import com.architjn.acjmusicplayer.utils.ListSongs;
import com.architjn.acjmusicplayer.utils.PermissionChecker;
import com.architjn.acjmusicplayer.utils.Utils;
import com.architjn.acjmusicplayer.utils.items.Song;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.util.ArrayList;
/**
* Created by architjn on 28/11/15.
*/
public class SongListAdapter extends RecyclerView.Adapter<SongListAdapter.SimpleItemViewHolder> {
private static final String TAG = "SongListAdapter-TAG";
private ArrayList<Song> items;
private PermissionChecker permissionChecker;
private int selectedSongId = -1;
private SimpleItemViewHolder selectedHolder;
private Context context;
private SongsListFragment fragment;
public SongListAdapter(Context context, SongsListFragment fragment,
ArrayList<Song> items, PermissionChecker permissionChecker) {
this.context = context;
this.fragment = fragment;
this.items = items;
this.permissionChecker = permissionChecker;
}
@Override
public SongListAdapter.SimpleItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.songs_list_item, parent, false);
return new SimpleItemViewHolder(itemView);
}
@Override
public void onBindViewHolder(final SongListAdapter.SimpleItemViewHolder holder, final int position) {
holder.name.setText(items.get(position).getName());
holder.artistName.setText(items.get(position).getArtist());
holder.mainView.setElevation(0);
setAlbumArt(position, holder);
if (selectedHolder != null)
selectedHolder.mainView.setBackgroundColor(ContextCompat
.getColor(context, R.color.appBackground));
selectedSongId = -1;
selectedHolder = null;
setOnClicks(holder, position);
}
private void setAlbumArt(int position, SimpleItemViewHolder holder) {
String path = ListSongs.getAlbumArt(context,
items.get(position).getAlbumId());
if (path != null)
Picasso.with(context).load(new File(path)).resize(dpToPx(50),
dpToPx(50)).centerCrop().into(holder.img);
else
setDefaultArt(holder, dpToPx(50));
}
private void setDefaultArt(SimpleItemViewHolder holder, int size) {
holder.img.setImageBitmap(new Utils(context).getBitmapOfVector(R.drawable.default_art,
size, size));
}
private void setOnClicks(final SimpleItemViewHolder holder, final int position) {
holder.mainView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Play all the songs starting from this
animate(holder);
Intent i = new Intent();
i.setAction(PlayerService.ACTION_PLAY_ALL_SONGS);
i.putExtra("songId", items.get(position).getSongId());
i.putExtra("pos", position);
context.sendBroadcast(i);
// }
}
});
holder.menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu pm = new PopupMenu(context, view);
final Intent intent = new Intent();
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
new Utils(context).handleSongMenuClick(item, items,
intent, position, fragment.getActivity(), permissionChecker);
items = ListSongs.getSongList(context);
notifyDataSetChanged();
return false;
}
});
pm.inflate(R.menu.popup_song);
pm.show();
}
});
}
public void animate(final SimpleItemViewHolder holder) {
//using action for smooth animation
new Action() {
@NonNull
@Override
public String id() {
return TAG;
}
@Nullable
@Override
protected Object run() throws InterruptedException {
return null;
}
@Override
protected void done(@Nullable Object result) {
animateElevation(0, dpToPx(4), holder);
animateElevation(dpToPx(4), 0, holder);
}
}.execute();
}
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
@Override
public void onViewRecycled(SimpleItemViewHolder holder) {
super.onViewRecycled(holder);
holder.img.setImageDrawable(null);
}
@Override
public int getItemCount() {
return items.size();
}
private ValueAnimator animateElevation(int from, int to, final SimpleItemViewHolder holder) {
Integer elevationFrom = from;
Integer elevationTo = to;
ValueAnimator colorAnimation =
ValueAnimator.ofObject(
new ArgbEvaluator(), elevationFrom, elevationTo);
colorAnimation.setInterpolator(new DecelerateInterpolator());
colorAnimation.addUpdateListener(
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
holder.mainView.setElevation(
(Integer) animator.getAnimatedValue());
}
});
colorAnimation.setDuration(500);
if (from != 0)
colorAnimation.setStartDelay(colorAnimation.getDuration() + 300);
colorAnimation.start();
return colorAnimation;
}
public void recyclerScrolled() {
if (selectedHolder != null && selectedSongId != -1) {
animateElevation(12, 0, selectedHolder);
selectedSongId = -1;
selectedHolder.mainView.setBackgroundColor(ContextCompat
.getColor(context, R.color.appBackground));
}
}
public void onBackPressed() {
if (selectedSongId != -1) {
animateElevation(12, 0, selectedHolder);
selectedHolder.mainView.setBackgroundColor(ContextCompat
.getColor(context, R.color.appBackground));
selectedSongId = -1;
selectedHolder = null;
} else {
if ((fragment.getActivity()) != null)
((MainActivity) fragment.getActivity()).killActivity();
}
}
public class SimpleItemViewHolder extends RecyclerView.ViewHolder {
public TextView name, artistName;
public View mainView, menu;
public ImageView img;
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);
}
}
}