package io.hefuyi.listener.ui.adapter;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
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.PopupMenu;
import android.widget.TextView;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import java.util.ArrayList;
import java.util.List;
import io.hefuyi.listener.MusicPlayer;
import io.hefuyi.listener.R;
import io.hefuyi.listener.RxBus;
import io.hefuyi.listener.dataloader.SongLoader;
import io.hefuyi.listener.event.MediaUpdateEvent;
import io.hefuyi.listener.mvp.model.FolderInfo;
import io.hefuyi.listener.mvp.model.Song;
import io.hefuyi.listener.util.DensityUtil;
import io.hefuyi.listener.util.ListenerUtil;
import io.hefuyi.listener.util.NavigationUtil;
import io.hefuyi.listener.widget.fastscroller.FastScrollRecyclerView;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
public class FolderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements FastScrollRecyclerView.SectionedAdapter {
private List<FolderInfo> arraylist;
private AppCompatActivity mContext;
public FolderAdapter(AppCompatActivity context, List<FolderInfo> arraylist) {
if (arraylist == null) {
this.arraylist = new ArrayList<>();
} else {
this.arraylist = arraylist;
}
this.mContext = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list_linear_layout_item, viewGroup, false);
return new ItemHolder(v);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ItemHolder itemHolder = (ItemHolder) holder;
FolderInfo localItem = arraylist.get(position);
Drawable image = mContext.getResources().getDrawable(R.drawable.ic_folder_black_48dp);
image.setColorFilter(mContext.getResources().getColor(R.color.folderTint), PorterDuff.Mode.SRC_IN);
itemHolder.image.setImageDrawable(image);
itemHolder.folderName.setText(localItem.folderName);
itemHolder.songcount.setText(ListenerUtil.makeLabel(mContext, R.plurals.Nsongs, localItem.songCount));
itemHolder.folderPath.setText(localItem.folderPath);
itemHolder.folderPath.setMaxWidth(DensityUtil.dip2px(mContext, 240));
setOnPopupMenuListener(itemHolder, position);
}
@Override
public int getItemCount() {
return (null != arraylist ? arraylist.size() : 0);
}
private void setOnPopupMenuListener(final ItemHolder itemHolder, final int position) {
itemHolder.popupMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu menu = new PopupMenu(mContext, v);
int adapterPosition = itemHolder.getAdapterPosition();
final FolderInfo folderInfo = arraylist.get(adapterPosition);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.popup_folder_addto_queue:
getSongListIdByFolder(folderInfo.folderPath)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
MusicPlayer.addToQueue(mContext, ids, -1, ListenerUtil.IdType.Folder);
}
});
break;
case R.id.popup_folder_addto_playlist:
getSongListIdByFolder(folderInfo.folderPath)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
ListenerUtil.showAddPlaylistDialog(mContext, ids);
}
});
break;
case R.id.popup_folder_delete:
new MaterialDialog.Builder(mContext)
.title(mContext.getResources().getString(R.string.delete_folder))
.content("删除文件夹下"+folderInfo.songCount+"首歌曲?")
.positiveText(R.string.delete)
.negativeText(R.string.cancel)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
getSongListIdByFolder(folderInfo.folderPath)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
ListenerUtil.deleteTracks(mContext, ids);
RxBus.getInstance().post(new MediaUpdateEvent());
}
});
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
dialog.dismiss();
}
})
.show();
break;
}
return false;
}
});
menu.inflate(R.menu.popup_folder);
menu.show();
}
});
}
public void setFolderList(List<FolderInfo> arraylist) {
this.arraylist = arraylist;
notifyDataSetChanged();
}
@NonNull
@Override
public String getSectionName(int position) {
Character ch = arraylist.get(position).folderName.charAt(0);
if (Character.isDigit(ch)) {
return "#";
} else
return Character.toString(ch);
}
private Observable<long[]> getSongListIdByFolder(String path) {
return SongLoader.getSongListInFolder(mContext, path)
.map(new Func1<List<Song>, long[]>() {
@Override
public long[] call(List<Song> songs) {
long[] ids = new long[songs.size()];
int i = 0;
for (Song song : songs) {
ids[i] = song.id;
i++;
}
return ids;
}
});
}
public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView image;
private TextView folderName;
private TextView songcount;
private TextView folderPath;
private ImageView popupMenu;
public ItemHolder(View view) {
super(view);
this.image = (ImageView) view.findViewById(R.id.image);
this.folderName = (TextView) view.findViewById(R.id.text_item_title);
this.songcount = (TextView) view.findViewById(R.id.text_item_subtitle);
this.folderPath = (TextView) view.findViewById(R.id.text_item_subtitle_2);
this.popupMenu = (ImageView) view.findViewById(R.id.popup_menu);
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
NavigationUtil.navigateToFolderSongs(mContext,arraylist.get(getAdapterPosition()).folderPath);
}
}
}