package com.tadpolemusic.adapter;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;
import com.quickactionbar.QuickAction;
import com.quickactionbar.QuickActionGrid;
import com.quickactionbar.QuickActionWidget;
import com.tadpolemusic.R;
import com.tadpolemusic.activity.dialog.LocalMusicDeleteDialog;
import com.tadpolemusic.media.LocalMusicItem;
import com.tadpolemusic.media.MusicData;
/**
* <br>==========================
* <br> author:Zenip
* <br> email:lxyczh@gmail.com
* <br> create:2013-1-31
* <br>==========================
*/
public class LocalMusicAdapter extends ListViewAdapter<MusicData> implements SectionIndexer, OnScrollListener {
public static interface OnSectionChangeListener {
public void handle(char letter);
}
private OnSectionChangeListener mSectionChangeListener;
public LocalMusicAdapter(Activity context) {
super(context);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final MusicData item = (MusicData) getItem(position);
final LocalMusicAdapter me = this;
View view = convertView;
ViewHolder viewHolder = null;
if (view == null) {
view = getLayoutInflater().inflate(R.layout.list_item_local_music, null);
viewHolder = new ViewHolder();
viewHolder.textViewSectionTitle = (TextView) view.findViewById(R.id.text_view_section_title);
viewHolder.textViewMusicTitle = (TextView) view.findViewById(R.id.text_view_music_title);
viewHolder.imageViewIcon = (ImageView) view.findViewById(R.id.image_view_icon);
viewHolder.buttonOperation = (View) view.findViewById(R.id.btn_operation);
viewHolder.imageViewSelect = (ImageView) view.findViewById(R.id.image_view_select);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String section = item.getFirstLetterInUpcase();
// first item show the section
if (position == 0) {
viewHolder.textViewSectionTitle.setVisibility(View.VISIBLE);
viewHolder.textViewSectionTitle.setText(section);
}
// if it is the new section , show too.
else {
String lastItemSection = mList.get(position - 1).getFirstLetterInUpcase();
if (section.equals(lastItemSection)) {
viewHolder.textViewSectionTitle.setVisibility(View.GONE);
} else {
viewHolder.textViewSectionTitle.setVisibility(View.VISIBLE);
viewHolder.textViewSectionTitle.setText(section);
}
}
if (position == super.getSelectedPostion()) {
viewHolder.imageViewSelect.setVisibility(View.VISIBLE);
} else {
viewHolder.imageViewSelect.setVisibility(View.INVISIBLE);
}
viewHolder.textViewMusicTitle.setText(item.musicName);
viewHolder.textViewSectionTitle.setText(item.getFirstLetterInUpcase());
viewHolder.buttonOperation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context ctx = v.getContext();
QuickActionGrid quickActionGrid = new QuickActionGrid(ctx);
quickActionGrid.setWidth(500);
quickActionGrid.setNumColumns(3);
QuickAction qaSetRing = new QuickAction(ctx, R.drawable.audio_list_item_rightmenu_setring_default, "设为铃声");
QuickAction qaActionDel = new QuickAction(ctx, R.drawable.audio_list_item_rightmenu_delete_default, "删除");
QuickAction qaActionShare = new QuickAction(ctx, R.drawable.audio_list_item_rightmenu_share_default, "分享");
final ArrayList<QuickAction> qaList = new ArrayList<QuickAction>();
qaList.add(qaSetRing);
qaList.add(qaActionDel);
qaList.add(qaActionShare);
for (int i = 0, N = qaList.size(); i < N; i++) {
quickActionGrid.addQuickAction(qaList.get(i));
}
quickActionGrid.setOnQuickActionClickListener(new QuickActionGrid.OnQuickActionClickListener() {
@Override
public void onQuickActionClicked(QuickActionWidget widget, int position) {
final Context context = widget.getContentView().getContext();
switch (position) {
case 0:
item.setMyRingtone(context);
break;
case 1:
LocalMusicDeleteDialog delDialog = new LocalMusicDeleteDialog(context);
delDialog.setTip("你确定删除音乐“" + item.musicName + "”");
delDialog.setPositiveButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
LocalMusicDeleteDialog d = (LocalMusicDeleteDialog) dialog;
boolean isToDelFile = d.isNeedToDeleteFile();
me.getList().remove(item);
me.notifyDataSetChanged();
item.deleteFromDB(d.getContext());
if (isToDelFile) {
item.deleteFile();
}
}
});
delDialog.setTitle("删除歌曲");
delDialog.show();
break;
default:
break;
}
}
});
quickActionGrid.show(v);
}
});
return view;
}
public void showDeleteDialog(final LocalMusicItem item) {
final LocalMusicAdapter me = this;
AlertDialog.Builder ab = new AlertDialog.Builder(this.getContext());
ab.setTitle("确定要删除?");
ab.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mList.remove(item);
item.delete(mContext);
me.notifyDataSetChanged();
}
});
ab.setNegativeButton("取消", null);
ab.show();
}
/**
* Class implementing holder pattern,
* performance boost
*
* @author Zenip
*/
static class ViewHolder {
ImageView imageViewIcon;
ImageView imageViewSelect;
TextView textViewMusicTitle;
TextView textViewSectionTitle;
View buttonOperation;
}
@Override
public int getPositionForSection(int section) {
MusicData item;
String letter;
for (int i = 0; i < getCount(); i++) {
item = (MusicData) mList.get(i);
letter = item.getFirstLetterInUpcase();
char firstChar = letter.toUpperCase().charAt(0);
if (letter.length() > 0 && firstChar == section) {
return i;
}
}
return -1;
}
@Override
public int getSectionForPosition(int position) {
return 0;
}
@Override
public Object[] getSections() {
return null;
}
public void setOnSectionChangeListener(OnSectionChangeListener listener) {
mSectionChangeListener = listener;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mList == null || firstVisibleItem == -1 || firstVisibleItem == 0) {
return;
}
MusicData item = mList.get(firstVisibleItem);
String firstLetter = item.getFirstLetterInUpcase();
if (mSectionChangeListener != null) {
mSectionChangeListener.handle(firstLetter.charAt(0));
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}