package com.kitty.poclient.fragment.store;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.kitty.poclient.R;
import com.kitty.poclient.adapter.ArtistAlbumListAdapter;
import com.kitty.poclient.common.UpnpApp;
import com.kitty.poclient.common.ViewFactory;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.domain.Album;
import com.kitty.poclient.domain.AlbumDetail;
import com.kitty.poclient.domain.Artist;
import com.kitty.poclient.domain.ColumnDetail;
import com.kitty.poclient.domain.Disk;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.fragment.TabWebFragment.TitlebarUpdateFragment;
import com.kitty.poclient.http.HttpGetter;
import com.kitty.poclient.interfaces.NobleMan;
import com.kitty.poclient.interfaces.SelfReloader;
import com.kitty.poclient.thread.Pools;
import com.kitty.poclient.util.BitmapUtil;
import com.kitty.poclient.util.JsonUtil;
import com.kitty.poclient.util.PowerfulBigMan;
import com.kitty.poclient.util.LoadImageAysnc.ImageCallBack;
//notifyData,连接中断,确定
public class ArtistDetailFragment extends Fragment implements NobleMan,TitlebarUpdateFragment,SelfReloader {
private final String TAG = ArtistDetailFragment.class.getSimpleName();
private Context context;
private Artist artist;
/*
* 控件
*/
private View view;
private FrameLayout flAlbumInfo;
private LinearLayout llLoading;
private LinearLayout llNoData;
private LinearLayout llContent;
private LinearLayout llDataLoadFailed;
private ImageView ivArtist;
private TextView tvName;
private TextView tvNumAlbums;
private TextView tvNumMusics;
private ListView lvArtistAlbums;
private ArtistAlbumListAdapter adapter;
// 动画
private AnimationDrawable ad;
private boolean loadingRunning = false;
private boolean fragmentIsActive = false;
/*
* 数据
*/
private ColumnDetail artistDetail;
private List<Album> artistAlbums = new ArrayList<Album>();
private long albumId = -1L;
private AlbumDetail albumdetail;
private String albumName = "";
private List<Disk> diskli;
private String imgUrl = "";
private Bitmap bitmap;
private double balance = -1L;
private long idToBuy = -1L;
private Music musicToBuy = null;
private int groupPositionInListen = -1;
private int childPositionInListen = -1;
private boolean albumIsBought = false;
/*
* handler&receivers
*/
private final int MSG_LETS_GET_DATA = 0;
private final int MSG_DATA_GOT = 1;
private final int MSG_DATA_LOAD_FAILD = 2;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_LETS_GET_DATA:
getArtistAlbumsData();
break;
case MSG_DATA_GOT:
updateUI();
break;
case MSG_DATA_LOAD_FAILD:
uiShowDataLoadFailed();
break;
default:
break;
}
}
};
public ArtistDetailFragment() {
}
protected void updateUI() {
if (adapter != null && artistAlbums != null && artistAlbums.size() != 0) {
if (loadingRunning == true) {
endLoading();
}
tvNumAlbums.setText("相关专辑:" + artistDetail.getNum() + " 张");
tvNumMusics.setText("个人专辑:" + artistDetail.getTotal() + " 张");
adapter.setAlbums(artistAlbums);
System.out.println("adapter.getAlbums().size()=" + adapter.getAlbums().size());
adapter.notifyDataSetChanged();
} else {
showNoData();
}
}
protected void endLoading() {
if (ad != null && ad.isRunning()) {
ad.stop();
}
llContent.setVisibility(View.VISIBLE);
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.GONE);
loadingRunning = false;
}
public ArtistDetailFragment(Context context, Artist artist) {
this.context = context;
this.artist = artist;
}
protected void getArtistAlbumsData() {
Pools.executorService1.submit(new Runnable() {
@Override
public void run() {
String json = new HttpGetter(getActivity()).getColumnAlbumsList(artist.getId(), artist.getName(), 0, 30);
if (!(new JsonUtil().validate(json))) {
return;
}
artistDetail = new JsonUtil().getColumnDetail(json);
artistAlbums = artistDetail.getAlbums();
handler.sendEmptyMessage(MSG_DATA_GOT);
for (Album album : artistAlbums) {
// album.setCoverBitmap(Constant.albumCover);
downloadImage(album);
}
}
});
}
protected void downloadImage(final Album album) {
Pools.executorService2.submit(new Runnable() {
@Override
public void run() {
String imageKey = album.getImgUrl() + "150";
Bitmap bitmap = BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, album.getImgUrl(), 150, false, new ImageCallBack() {
@Override
public void imageLoaded(Bitmap bitmap) {
// bitmap = new BitmapUtil().processBigBitmap(bitmap,
// 1000000, Constant.albumCover);
// 得到专辑封面后刷新界面
album.setBitmap(new SoftReference<Bitmap>(bitmap));
handler.sendEmptyMessage(MSG_DATA_GOT);
}
});
// 得到封面后刷新界面
if (bitmap != null && !bitmap.isRecycled()) {
album.setBitmap(new SoftReference<Bitmap>(bitmap));
handler.sendEmptyMessage(MSG_DATA_GOT);
}
bitmap = null;
}
});
}
// protected void endLoding() {
// llLoading.setVisibility(View.GONE);
// llNoData.setVisibility(View.GONE);
// llContent.setVisibility(View.VISIBLE);
// }
protected void showNoData() {
llLoading.setVisibility(View.GONE);
llContent.setVisibility(View.GONE);
llNoData.setVisibility(View.VISIBLE);
llDataLoadFailed.setVisibility(View.GONE);
}
protected void uiShowDataLoadFailed() {
Log.e("BUG953",TAG+"uiShowDataLoadFailed");
llContent.setVisibility(View.GONE);
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.VISIBLE);
View loadFailureView=new ViewFactory().createLoadFailureView(this);
llDataLoadFailed.removeAllViews();
llDataLoadFailed.addView(loadFailureView);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// parentActivityChangeButton("btnBack");
// parentActivityChangeTitle();
updateTitlebar();
view = LayoutInflater.from(UpnpApp.context).inflate(R.layout.artist_detail, null);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
view.setBackgroundColor(getActivity().getResources().getColor(R.color.icecream_bg));
initComponents();
startLoading();
getDataWhenActive();
// registerReceivers();
return view;
}
private void getDataWhenActive() {
new Thread(new Runnable() {
@Override
public void run() {
while (fragmentIsActive == false) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
handler.sendEmptyMessage(MSG_LETS_GET_DATA);
}
}).start();
}
private void startLoading() {
llContent.setVisibility(View.GONE);
llLoading.setVisibility(View.VISIBLE);
llNoData.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.GONE);
if (ad == null) {
ad = (AnimationDrawable) getResources().getDrawable(R.anim.animatior_list);
}
llLoading.findViewById(R.id.iv_loading).setBackgroundDrawable(ad);
ad.start();
loadingRunning = true;
}
@Override
public void onResume() {
super.onResume();
// listViewGetFormerPosition();
fragmentIsActive = true;
// ((TabWebActivity) ExitApplication.getInstance().getTabWebActivity()).activate();
WatchDog.currentSelfReloader = this;
}
@Override
public void onDetach() {
// unregisterReceivers();
WatchDog.albumDetailBgBitmapDrawable = null;
super.onDetach();
}
private void initComponents() {
flAlbumInfo = (FrameLayout) view.findViewById(R.id.fl_album_info);
llLoading = (LinearLayout) view.findViewById(R.id.ll_loading);
llNoData = (LinearLayout) view.findViewById(R.id.ll_no_data);
llContent = (LinearLayout) view.findViewById(R.id.ll_content);
llDataLoadFailed = (LinearLayout) view.findViewById(R.id.ll_dataload_failed);
ivArtist = (ImageView) view.findViewById(R.id.iv_artist);
tvName = (TextView) view.findViewById(R.id.tv_artist_name);
tvNumAlbums = (TextView) view.findViewById(R.id.tv_num_albums);
tvNumMusics = (TextView) view.findViewById(R.id.tv_num_musics);
// tvNumMusics.setVisibility(View.GONE);
tvName.setText(artist.getName());
/* if (artist.getBitmap() != null) {
ivArtist.setImageBitmap(artist.getBitmap());
}*/
ImageLoader.getInstance().displayImage(artist.getImgUrl(), ivArtist,new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.pic)
.cacheInMemory(true)
.cacheOnDisc(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build());
initBackgroundImg();
initListView();
}
private void initBackgroundImg() {
// 根据imgUrl拿到图片
// 截取图片中部
// 获得模糊后的图片
// 设置为背景图
new Thread(new Runnable() {
@Override
public void run() {
WatchDog.albumDetailBgBitmapDrawable = BitmapUtil.createBlurryBitmapDrawable(artist.getImgUrl());
if (WatchDog.albumDetailBgBitmapDrawable == null) {
return;
}
handler.post(new Runnable() {
@Override
public void run() {
flAlbumInfo.setBackgroundDrawable(WatchDog.albumDetailBgBitmapDrawable);
}
});
}
}).start();
}
private void initListView() {
lvArtistAlbums = (ListView) view.findViewById(R.id.lv_artist_albums);
adapter = new ArtistAlbumListAdapter(context, artist.getName());
adapter.setAlbums(artistAlbums);
lvArtistAlbums.setAdapter(adapter);
lvArtistAlbums.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 进入该专辑详情页
if (PowerfulBigMan.testClickInterval() == false) {
return;
}
Album album = artistAlbums.get(position);
if (album != null) {
long albumId = album.getId();
String name = album.getName();
imgUrl = album.getImgUrl();
Bitmap bitmap = album.getBitmap();
showAlbumContent(albumId, name, bitmap);
} else {
// CustomToast.makeText(context, "读取专辑信息失败", Toast.LENGTH_SHORT).show();
UpnpApp.mainHandler.showAlert(R.string.album_data_error);
Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error));
}
}
});
}
protected void showAlbumContent(long id, String name, Bitmap bitmap) {
/* if (bitmap == null) {
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.pic);
}
if (bitmap.getByteCount() > 250000) {// nullporinter*2
byte[] bmBytes = BitmapUtil.Bitmap2Bytes(bitmap);
bitmap = BitmapUtil.Bytes2Bimap(bmBytes, 2);
// 如此仁至义尽了
if (bitmap.getByteCount() > 250000) {// nullpointer
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.pic1);
}
}*/
Intent intent = new Intent("showAlbumContentReceiver");
intent.putExtra("albumId", id);
intent.putExtra("albumName", name);
// intent.putExtra("bitmap", bitmap);
intent.putExtra("imgUrl", imgUrl);
intent.putExtra("layout", R.id.ll_web_root);
// UpnpApp.context.sendBroadcast(intent);
// ((TabWebActivity) context).showAlbumContentReceiverOnReceive(intent);
WatchDog.tabWebFragment.showAlbumContentReceiverOnReceive(intent);
}
protected LinearLayout createDialogContent(Drawable drawable, String str) {
LinearLayout llContent = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.common_dialog_content, null);
ImageView iv = (ImageView) llContent.findViewById(R.id.iv_common);
TextView tv = (TextView) llContent.findViewById(R.id.tv_common);
iv.setBackgroundDrawable(drawable);
if (drawable instanceof AnimationDrawable) {
((AnimationDrawable) drawable).start();
}
tv.setText(str);
return llContent;
}
private void registerReceivers() {
}
private void unregisterReceivers() {
}
private boolean isThisListPlaying(List<Music> list) {
if (WatchDog.currentList == null) {
return false;
} else {
String name1 = list.get(0).getName();
String name2 = WatchDog.currentList.get(0).getName();
return name1.equals(name2);
}
}
class ChildHolder {
private TextView tvNum;
private TextView tvName;
private TextView tvArtist;
private Button btnBuy;
private LinearLayout llListen;
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);
btnBuy = (Button) convertView.findViewById(R.id.btn_buy);
llListen = (LinearLayout) convertView.findViewById(R.id.ll_listen);
}
}
@Override
public void letsSeeHeaven() {
for (Album album : artistAlbums) {
album.recyleBitmap();
}
bitmap.recycle();
artistAlbums = null;
albumdetail = null;
diskli = null;
bitmap = null;
}
@Override
public void recordCurrentDataAndPosition() {
// TODO Auto-generated method stub
}
@Override
public void getSavedDataAndPosition() {
// TODO Auto-generated method stub
}
@Override
public int getFistVisiblePosition() {
return -1;
}
@Override
public int getLastVisiblePosition() {
return -1;
}
@Override
public void recycleBitmaps() {
// TODO Auto-generated method stub
}
@Override
public void updateTitlebar() {
WatchDog.tabWebFragment.setPopbackable(true);
WatchDog.tabWebFragment.setTitle(artist.getName());
}
@Override
public void onDataLoadFailed() {
Log.e("BUG953", TAG+"onDataLoadFailed");
handler.sendEmptyMessage(MSG_DATA_LOAD_FAILD);
}
@Override
public void reload() {
Log.e("BUG953", TAG+"reload");
startLoading();
getDataWhenActive();
}
}