package com.kitty.poclient.fragment.mymusic;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
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.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.Constant;
import com.kitty.poclient.common.UIHelper;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.dao.AlbumDao;
import com.kitty.poclient.domain.AlbumDetail;
import com.kitty.poclient.domain.Disk;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.fragment.PlayerFragment;
import com.kitty.poclient.fragment.TabMusicFragment;
import com.kitty.poclient.upnp.Player;
import com.kitty.poclient.util.PowerfulBigMan;
//notifyData,正在播放
public class AlbumDetailFragment extends BaseFragment {
private final String TAG = AlbumDetailFragment.class.getSimpleName();
private Activity attachedActivity;
private TabMusicFragment tabMusicFragment;
private AlbumDetail albumdetail;
private List<Disk> diskli;
private ArrayList<Music> theFirstDiskList;
private ExpandableListView expandablelistview;
private BaseExpandableListAdapter adapter;
private View view;
private AlbumDetail albumd;
// private ImageView ivPlayAlbum; //播放专辑 - 图标
private LinearLayout llPlayalbum; //播放专辑 - 区域(layout)
private LinearLayout ll_clearcache;
public AlbumDetailFragment() {
Log.i(TAG, "AlbumDetailFragment");
}
public AlbumDetailFragment(Activity context, TabMusicFragment tabMusicFragment, AlbumDetail albumdetail) {
Log.i(TAG, "AlbumDetailFragment(context,albumdetail) getArtistName=" + albumdetail.getArtistName());
this.attachedActivity = context;
this.tabMusicFragment = tabMusicFragment;
WatchDog.clearCacheProductType=5;
this.albumdetail = albumdetail;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
WatchDog.keybackRefersExitPro = false;// 返回键指向界面回退
view = inflater.inflate(R.layout.album_detail_fragment, null);// 异常:曾报空指针
initComponents();
initArguments();
initListeners();
registerReceivers();
return view;
}
public String getFragmentName(){
return TAG;
}
private void initComponents() {
llPlayalbum = (LinearLayout) view.findViewById(R.id.ll_playalbum);
ll_clearcache = (LinearLayout) view.findViewById(R.id.ll_clearcache);
// ivPlayAlbum = (ImageView) view.findViewById(R.id.iv_play_album);
expandablelistview = (ExpandableListView) view.findViewById(R.id.expandlistview);
expandablelistview.setGroupIndicator(null);
}
private void initListeners() {
llPlayalbum.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*
* 新的播放专辑方法
*/
ArrayList<Music> list = new ArrayList<Music>();
for (Disk _disk : diskli) {
list.addAll(_disk.getMusicList());
}
// 初始化播放列表
WatchDog.currentList = list;
WatchDog.currentListType = Constant.URI_ALBUM;
WatchDog.currentListId = albumdetail.getAlbumId();
WatchDog.currentPlayingIndex = 0;
WatchDog.currentPlayingMusic = list.get(0);
WatchDog.currentPlayingId = WatchDog.currentPlayingMusic.getId();
WatchDog.currentPlayingName = list.get(0).getName();
WatchDog.currentArtistName = list.get(0).getArtistName();
System.out.println("album detail: WatchDog.currentArtistName=" + WatchDog.currentArtistName);
WatchDog.updateCachingState();// 如果上一曲未缓存完则修改其状态为等待
WatchDog.currentState = PlayerFragment.STOPPED;// 先改为停止以停止播放器图标的跳动
UIHelper.refreshPlayerButton();// 点击曲目后立即停止图标跳动
adapter.notifyDataSetChanged();
String uri = list.get(0).getUri(Constant.URI_ALBUM, albumdetail.getAlbumId());
playMusic(uri);
}
});
ll_clearcache.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("BUG975", "1>>"+TAG+"ll_clearcache onClick()");
AlbumDetail albumDetail = albumdetail;
if (albumDetail != null && albumDetail.getDisklist() != null) {
CacheAlbumDetailFragment detail = new CacheAlbumDetailFragment(attachedActivity, tabMusicFragment, albumDetail);
tabMusicFragment.showCacheAlbumDetailFragment(detail);
} else {
// CustomToast.makeText(attachedActivity, "该专辑数据有误", Toast.LENGTH_SHORT).show();
Log.e(TAG, "该专辑数据有误");
}
}
});
expandablelistview.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
if (PowerfulBigMan.testClickInterval() == false) {
return false;
}
System.out.println("child click:" + groupPosition + ":" + childPosition);
ArrayList<Music> list = (ArrayList<Music>) diskli.get(groupPosition).getMusicList();
// 初始化播放列表
WatchDog.currentList = list;
WatchDog.currentListType = Constant.URI_ALBUM;
WatchDog.currentListId = albumdetail.getAlbumId();
WatchDog.currentPlayingIndex = childPosition;
WatchDog.currentPlayingMusic = list.get(childPosition);
WatchDog.currentPlayingId = WatchDog.currentPlayingMusic.getId();
WatchDog.currentPlayingName = list.get(childPosition).getName();
WatchDog.currentArtistName = list.get(childPosition).getArtistName();
System.out.println("album detail: WatchDog.currentArtistName=" + WatchDog.currentArtistName);
WatchDog.updateCachingState();// 如果上一曲未缓存完则修改其状态为等待
WatchDog.currentState = PlayerFragment.STOPPED;// 先改为停止以停止播放器图标的跳动
// initBtnPlayer();
UIHelper.refreshPlayerButton();// 点击曲目后立即停止图标跳动
adapter.notifyDataSetChanged();
String uri = list.get(childPosition).getUri(WatchDog.currentListType, WatchDog.currentListId);
playMusic(uri);
return true;
}
});
}
private void playMusic(String uri) {
Player p = new Player();
p.play(uri);
}
class ChildHolder {
private TextView tvNum;
private TextView tvName;
private TextView tvArtist;
private ImageView ivSavingState;
private ImageView ivChosen;
private TextView ivPlaying;
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);
ivPlaying = (TextView) convertView.findViewById(R.id.iv_playing);
}
}
public String getAlbumName(){
//专辑名
String albumName = "";
if(null!=albumdetail){
albumName = albumdetail.getAlbumname();
}else{
Log.e(TAG, "专辑名称为空");
albumName = "未知";
}
return albumName;
}
private void initArguments() {
// initBtnPlayer();
diskli = AlbumDetailFragment.this.albumdetail.getDisklist();
if (diskli != null&&diskli.size()>0) {
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(AlbumDetailFragment.this.attachedActivity);
textView.setLayoutParams(lp);
textView.setBackgroundResource(R.color.groupview_bg);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setPadding(40, 0, 0, 0);
textView.setTextSize(30);
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(attachedActivity).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.getTag() == null) {
convertView = LayoutInflater.from(attachedActivity).inflate(R.layout.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());
long id = li.get(childPosition).getId();
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);
}
if (WatchDog.currentPlayingId.equals(li.get(childPosition).getId())) {
holder.ivChosen.setVisibility(View.VISIBLE);
holder.ivPlaying.setVisibility(View.VISIBLE);
if (!PlayerFragment.PLAYING.equals(WatchDog.currentState)) {
// 显示载入中...
holder.ivPlaying.setText("加载中");
holder.ivPlaying.setBackgroundResource(R.color.transparent);
} else {
holder.ivPlaying.setText("");
holder.ivPlaying.setBackgroundResource(R.drawable.playing_icon);
}
} else {
holder.ivChosen.setVisibility(View.INVISIBLE);
holder.ivPlaying.setVisibility(View.INVISIBLE);
}
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() {
Log.i(TAG, "onDetach");
unregisterReceivers();
WatchDog.keybackRefersExitPro = true;// 返回键指向退出程序
super.onDetach();
}
private BroadcastReceiver updateListReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
albumd = new AlbumDao().getAlbumDetailData(AlbumDetailFragment.this.albumdetail.getAlbumId());
if (albumd != null) {
if (albumd.getDisklist() != null && albumd.getDisklist().size() > 0) {
AlbumDetailFragment.this.albumdetail = albumd;
diskli=AlbumDetailFragment.this.albumdetail.getDisklist();
adapter.notifyDataSetChanged();
} else {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStack();
}
}
}
};
private void registerReceivers() {
attachedActivity.registerReceiver(updateListReceiver, new IntentFilter(BroadcastManager.FILTER_UPDATE_LOCALLIST));
}
private void unregisterReceivers() {
attachedActivity.unregisterReceiver(updateListReceiver);
}
}