package com.kitty.poclient.fragment.mymusic;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.kitty.poclient.R;
import com.kitty.poclient.common.BroadcastManager;
import com.kitty.poclient.common.UIHelper;
import com.kitty.poclient.common.UpnpApp;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.domain.AlbumDetail;
import com.kitty.poclient.domain.Disk;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.fragment.TabMusicFragment;
import com.kitty.poclient.upnp.BoxControl;
import com.kitty.poclient.widget.StandardCustomDialog;
public class CacheAlbumDetailFragment extends BaseFragment {
private final String TAG = CacheAlbumDetailFragment.class.getSimpleName();
private StandardCustomDialog dialog;
private Activity context;
private TabMusicFragment tabMusicFragment;
private AlbumDetail albumdetail;
private List<Disk> diskli;
private List<Music> musiclistall;
private ArrayList<Music> theFirstDiskList;
private ExpandableListView expandablelistview;
private BaseExpandableListAdapter adapter;
private View view;
private LinearLayout cancelcache;// 取消缓存
private CancelClearListener cancelClearListener;
private LinearLayout sure_clearcache;// 确定清楚缓存
private LinearLayout clearAllBtn;// 全选linearLayout
@SuppressLint("HandlerLeak")
private Handler deleteHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// super.handleMessage(msg);
// showToast(msg.what);
// UpnpApp.mainHandler.showInfo(R.string.mymusic_cache_clear_success_info);
switch(msg.what){
case BoxControl.CLEAR_CACHE_SUCESS:
Log.e("BUG975", "8>>"+TAG+"handleMessage() CLEAR_CACHE_SUCESS");
UpnpApp.mainHandler.showInfo(R.string.mymusic_cache_clear_success_info);
break;
case BoxControl.CLEAR_CACHE_FAILURE:
UpnpApp.mainHandler.showAlert(R.string.mymusic_cache_clear_failure_alert);
break;
}
cancelClearListener.setEnableCancel(true);
cancelcache.setOnClickListener(cancelClearListener);
}
};
public CacheAlbumDetailFragment(Activity context, TabMusicFragment tabMusicFragment, AlbumDetail albumdetail) {
this.context = context;
this.tabMusicFragment = tabMusicFragment;
if (albumdetail == null) {
albumdetail = new AlbumDetail();
}
WatchDog.clearCacheProductType = 5;
this.albumdetail = albumdetail;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = LayoutInflater.from(context).inflate(R.layout.album_detail_cache_fragment, null);// 异常:曾报空指针
initComponents();
initArguments();
initListeners();
registerReceivers();
return view;
}
public String getFragmentName(){
return TAG;
}
private void initComponents() {
cancelcache = (LinearLayout) view.findViewById(R.id.cancelcache);
sure_clearcache = (LinearLayout) view.findViewById(R.id.sure_clearcache);
clearAllBtn = (LinearLayout) view.findViewById(R.id.circle_btn);
expandablelistview = (ExpandableListView) view.findViewById(R.id.cache_expandlistview);
expandablelistview.setGroupIndicator(null);
}
private void initListeners() {
// 取消缓存
cancelClearListener = new CancelClearListener();
cancelcache.setOnClickListener(cancelClearListener);
// 确认清除缓存
sure_clearcache.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("BUG975", "2>>"+TAG+"sure_clearcache onClick()");
String ids = "";
List<Music> li = null;
if (albumdetail != null) {
BoxControl bc = new BoxControl();
if (albumdetail.isFlag()) {
showExitDialog(bc, albumdetail, deleteHandler);
} else {
diskli = albumdetail.getDisklist();
for (Disk d : diskli) {
li = new ArrayList<Music>();
musiclistall = d.getMusicList();
for (Music m : musiclistall) {
if (m.isFlag()) {
ids = ids + m.getId() + ",";
} else {
li.add(m);
}
}
li = null;
}
if (ids.length() > 0) {
ids = ids.substring(0, ids.length() - 1);
showExitDialog(bc, diskli, ids.split(",").length, deleteHandler);
} else {
// showExitDialog();
// CustomToast.makeText(context, "请选择需要清除缓存的单曲", 1000).show();
UpnpApp.mainHandler.showAlert(R.string.mymusic_cache_select_empty_alert);
}
}
}
}
});
// 全选
clearAllBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout Lin = (LinearLayout) v;
CheckBox chb = (CheckBox) Lin.findViewById(R.id.checkbox_all);
if (albumdetail != null) {
if (chb.isChecked()) {
diskli = albumdetail.getDisklist();
for (Disk d : diskli) {
musiclistall = d.getMusicList();
chb.setChecked(false);
albumdetail.setFlag(false);
for (Music m : musiclistall) {
m.setFlag(false);
}
}
} else {
chb.setChecked(true);
albumdetail.setFlag(true);
diskli = albumdetail.getDisklist();
for (Disk d : diskli) {
musiclistall = d.getMusicList();
for (Music m : musiclistall) {
m.setFlag(true);
}
}
}
}
adapter.notifyDataSetChanged();
}
});
expandablelistview.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
System.out.println("child click:" + groupPosition + ":"+ childPosition);
ArrayList<Music> list = (ArrayList<Music>) diskli.get(groupPosition).getMusicList();
CheckBox c = (CheckBox) view.findViewById(R.id.checkbox_item);
c.setChecked(!list.get(childPosition).isFlag());
list.get(childPosition).setFlag(c.isChecked());
boolean noItemSelected = true;
List<Disk> dl = albumdetail.getDisklist();
adapter.notifyDataSetChanged();
for (Disk d : dl) {
for (Music m : d.getMusicList()) {
if (!m.isFlag()) {
noItemSelected = false;
}
}
}
if (noItemSelected) {//true:
CheckBox cb = (CheckBox) clearAllBtn.findViewById(R.id.checkbox_all);
cb.setChecked(true);
albumdetail.setFlag(true);
} else {
CheckBox cb = (CheckBox) clearAllBtn.findViewById(R.id.checkbox_all);
cb.setChecked(false);
albumdetail.setFlag(false);
}
return true;
}
});
}
class ChildHolder {
private TextView tvNum;
private TextView tvName;
private TextView tvArtist;
private ImageView ivSavingState;
private ImageView ivChosen;
private ImageView ivPlaying;
private CheckBox checkbox;
ChildHolder(View convertView) {
tvNum = (TextView) convertView.findViewById(R.id.tv_num);
tvName = (TextView) convertView.findViewById(R.id.tv_music_name);
tvArtist = (TextView) convertView
.findViewById(R.id.tv_music_artist);
ivSavingState = (ImageView) convertView
.findViewById(R.id.iv_saving_state);
ivChosen = (ImageView) convertView.findViewById(R.id.iv_chosen);
checkbox = (CheckBox) convertView.findViewById(R.id.checkbox_item);
}
}
private void initArguments() {
// initBtnPlayer();
// tvAlbumName.setText(albumdetail.getAlbumname());
diskli = CacheAlbumDetailFragment.this.albumdetail.getDisklist();
if (diskli != null) {
theFirstDiskList = (ArrayList<Music>) diskli.get(0).getMusicList();
}
adapter = new BaseExpandableListAdapter() {
TextView getTextView() {
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(context);
textView.setLayoutParams(lp);
textView.setBackgroundResource(R.color.groupview_bg);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setPadding(40, 0, 0, 0);
textView.setTextSize(20);
textView.setTextColor(Color.WHITE);
return textView;
}
// 重写expandlistadapter中的各个方法
@Override
public int getGroupCount() {
return diskli != null ? diskli.size() : 0;
}
@Override
public int getChildrenCount(int groupPosition) {
if (diskli != null) {
if (diskli.get(groupPosition) != null) {
List<Music> li = diskli.get(groupPosition)
.getMusicList();
if (li != null) {
return li.size();
}
}
}
return 0;
}
@Override
public Object getGroup(int groupPosition) {
return diskli.get(groupPosition).getName();
}
@Override
public Object getChild(int groupPosition, int childPosition) {
if (diskli != null) {
if (diskli.get(groupPosition) != null) {
List<Music> li = diskli.get(groupPosition)
.getMusicList();
if (li != null) {
return li.get(childPosition).getName();
}
}
}
return null;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(context).inflate(R.layout.albums_group_item, null);
TextView tvDiscNo = (TextView) convertView.findViewById(R.id.tv_disc_no);
tvDiscNo.setText("Disc" + (groupPosition + 1));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
ChildHolder holder;
List<Music> li = diskli.get(groupPosition).getMusicList();
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.cache_musics_item, null);
holder = new ChildHolder(convertView);
convertView.setTag(holder);
if (li == null) {
return convertView;
}
} else {
holder = (ChildHolder) convertView.getTag();
}
holder.tvNum.setVisibility(View.VISIBLE);
holder.tvNum.setText(li.get(childPosition).getTrack_no());
holder.tvName.setText(li.get(childPosition).getName());
holder.tvArtist.setText(li.get(childPosition).getArtistName());
// musicselcmap.put(li.get(childPosition).getId()+"",holder.checkbox);
long id = li.get(childPosition).getId();
holder.checkbox.setChecked(li.get(childPosition).isFlag());
if (WatchDog.cacheStateMap.containsKey(id) == false) {
holder.ivSavingState.setBackgroundResource(R.drawable.wait);
}
else if (WatchDog.cacheStateMap.get(id)
.equals(Music.CACHE_WAIT)) {
holder.ivSavingState.setBackgroundResource(R.drawable.wait);
} else if (WatchDog.cacheStateMap.get(id).equals(
Music.CACHE_DOWNLOADED)) {
holder.ivSavingState
.setBackgroundResource(R.drawable.downloaded);
} else if (WatchDog.cacheStateMap.get(id).equals(
Music.CACHE_DOWNLOADING)) {
holder.ivSavingState
.setBackgroundResource(R.drawable.downloading);
} else {
holder.ivSavingState.setBackgroundResource(R.drawable.wait);
}
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition) {
return true;
}
};
expandablelistview.setAdapter(adapter);
for (int i = 0; i < adapter.getGroupCount(); i++) {
expandablelistview.expandGroup(i);
}
}
@Override
public void onDetach() {
unregisterReceivers();
super.onDetach();
}
private BroadcastReceiver updateListReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
adapter.notifyDataSetChanged();
System.out.println("expandlistadapter.notifyDataSetChanged();");
System.out.println("WatchDog.currentPlayingName="
+ WatchDog.currentPlayingName);
}
};
private void registerReceivers() {
context.registerReceiver(updateListReceiver, new IntentFilter(BroadcastManager.FILTER_UPDATE_LOCALLIST));
}
private void unregisterReceivers() {
context.unregisterReceiver(updateListReceiver);
}
private void showExitDialog(final BoxControl bc, final List<Disk> diskli, int ls, final Handler handler) {
final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(
context);
builder.setTitle("清除歌曲缓存");
builder.setMessage("确认清除选中的" + ls + "首歌曲?");
builder.setPositiveButton("取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("确定",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancelClearListener.setEnableCancel(false);
dialog.dismiss();
List<Music> ml = null;
String musicIds = "";
for (Disk d : diskli) {
ml = new ArrayList<Music>();
musiclistall = d.getMusicList();
for (Music m : musiclistall) {
if (m.isFlag()) {
musicIds = musicIds + m.getId() + ",";
} else {
ml.add(m);
}
}
d.setMusicList(ml);
adapter.notifyDataSetChanged();
}
if (musicIds.length() > 0) {
musicIds = musicIds.substring(0, musicIds.length() - 1);
}
Log.i("tongbu", "开始清理单曲");
// startActivity(new Intent(context, ClearCacheTranslucentActivity.class));
bc.clearcache(musicIds, BoxControl.MEDIA_TYPE_SINGLE, handler);
}
});
dialog = builder.create();
dialog.setCancelable(false);
dialog.show();
}
private void showExitDialog(final BoxControl bc, final AlbumDetail albumdetail, final Handler handler) {
Log.e("BUG975", "3>>"+TAG+"showExitDialog()//实际上是确认清除缓存对话框");
final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context);
builder.setTitle("清除专辑缓存");
builder.setMessage("确定清除专辑《" + albumdetail.getAlbumname() + "》吗?");
builder.setPositiveButton("取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("确定",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("BUG975", "4>>"+TAG+" 确认 onClick()");
cancelClearListener.setEnableCancel(false);
dialog.dismiss();
bc.clearcache(albumdetail.getAlbumId() + "", 1, handler);
//通知列表更新
UIHelper.refreshLocalAlbumsView();
//清除缓存成功提示
// UpnpApp.mainHandler.showInfo(R.string.mymusic_cache_clear_success_info);
};
});
dialog = builder.create();
dialog.setCancelable(false);
dialog.show();
}
/* private void showToast(int what) {
if (what == 1) {
// CustomToast.makeText(context, "成功清理缓存", 1000).show();
UpnpApp.mainHandler.showInfo(R.string.mymusic_cache_clear_success_info);
}
}*/
private class CancelClearListener implements OnClickListener {
private boolean enable = true;
public void setEnableCancel(boolean isEnable){
enable = isEnable;
}
@Override
public void onClick(View v) {
//切换到状态: play
if(enable){
tabMusicFragment.back();
}
}
}
}