package com.simplecity.amp_library.ui.adapters;
import android.support.annotation.NonNull;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import com.simplecity.amp_library.model.Song;
import com.simplecity.amp_library.ui.modelviews.ShuffleView;
import com.simplecity.amp_library.ui.modelviews.SongView;
import com.simplecity.amp_library.utils.SortManager;
import com.simplecity.amp_library.utils.StringUtils;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
public class SongAdapter extends ItemAdapter implements FastScrollRecyclerView.SectionedAdapter {
private static final String TAG = "SongAdapter";
private SongListener listener;
public interface SongListener {
void onItemClick(View v, int position, Song song);
void onOverflowClick(View v, int position, Song song);
void onLongClick(View v, int position, Song song);
void onShuffleClick();
void onStartDrag(RecyclerView.ViewHolder viewHolder);
}
public void setListener(SongListener listener) {
this.listener = listener;
}
public Song getSong(int position) {
return ((SongView) items.get(position)).song;
}
@Override
protected void attachListeners(final RecyclerView.ViewHolder viewHolder) {
super.attachListeners(viewHolder);
if (viewHolder instanceof SongView.ViewHolder) {
viewHolder.itemView.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onItemClick(v, viewHolder.getAdapterPosition(), getSong(viewHolder.getAdapterPosition()));
}
});
((SongView.ViewHolder) viewHolder).overflowButton.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onOverflowClick(v, viewHolder.getAdapterPosition(), getSong(viewHolder.getAdapterPosition()));
}
});
((SongView.ViewHolder) viewHolder).itemView.setOnLongClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onLongClick(v, viewHolder.getAdapterPosition(), getSong(viewHolder.getAdapterPosition()));
}
return true;
});
if (((SongView.ViewHolder) viewHolder).dragHandle != null) {
((SongView.ViewHolder) viewHolder).dragHandle.setOnTouchListener((v, event) -> {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
listener.onStartDrag(viewHolder);
}
return false;
});
}
} else if (viewHolder instanceof ShuffleView.ViewHolder) {
viewHolder.itemView.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onShuffleClick();
}
});
}
}
@NonNull
@Override
public String getSectionName(int position) {
if (!(items.get(position) instanceof SongView)) {
return "";
}
int sortOrder = SortManager.getInstance().getSongsSortOrder();
if (sortOrder != SortManager.SongSort.DATE
&& sortOrder != SortManager.SongSort.DURATION
&& sortOrder != SortManager.SongSort.TRACK_NUMBER) {
Song song = ((SongView) items.get(position)).song;
String string = null;
boolean requiresSubstring = true;
switch (sortOrder) {
case SortManager.SongSort.DEFAULT:
string = StringUtils.keyFor(song.name);
break;
case SortManager.SongSort.NAME:
string = song.name;
break;
case SortManager.SongSort.YEAR:
string = String.valueOf(song.year);
if (string.length() != 4) {
string = "-";
} else {
string = string.substring(2, 4);
}
requiresSubstring = false;
break;
case SortManager.SongSort.ALBUM_NAME:
string = StringUtils.keyFor(song.albumName);
break;
case SortManager.SongSort.ARTIST_NAME:
string = StringUtils.keyFor(song.artistName);
break;
}
if (requiresSubstring) {
if (!TextUtils.isEmpty(string)) {
string = string.substring(0, 1).toUpperCase();
} else {
string = " ";
}
}
return string;
}
return "";
}
}