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); } } }