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.graphics.Bitmap;
import android.graphics.drawable.AnimationDrawable;
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.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import com.kitty.poclient.R;
import com.kitty.poclient.adapter.ThemeListAdapter4Web;
import com.kitty.poclient.common.Constant;
import com.kitty.poclient.common.ViewFactory;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.domain.Pack;
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.PowerfulBigMan;
import com.kitty.poclient.util.LoadImageAysnc.ImageCallBack;
public class ThemesFragment extends Fragment implements NobleMan,TitlebarUpdateFragment,SelfReloader {
// Looper.prepare,showNoData()
private final String TAG = "ThemesFragment";
private Context context;
private View view;
private LinearLayout llLoading;
private LinearLayout llNoData;
private LinearLayout llContent;
private ListView lvThemes;
private ThemeListAdapter4Web adapter;
private List<Pack> themes = new ArrayList<Pack>();
private int maxDataItems = 50;
private AnimationDrawable ad;
private boolean loadingRunning = false;
private boolean fragmentIsActive = false;
private int firstVisibleItemPosition = 0;// 记录停止卷动时第一个ITEM的序号
private int lastVisibleItemPosition = 2;// 记录停止卷动时第一个ITEM的序号
// private int scrollTop = 0;// 记录停止卷动时第一个ITEM距离顶端的偏移量
private final int MSG_LETS_GET_DATA = 0;
private final int MSG_DATA_GOT = 1;
private final int MSG_IMG_GOT = 2;
private final int MSG_DATA_LOAD_FAILD = 3;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_LETS_GET_DATA:
getThemesList();
break;
case MSG_DATA_GOT:
updateUI();
paintPacksWithinSightAndFreeOthers(System.currentTimeMillis());
break;
case MSG_IMG_GOT:
// endLoading();
if (msg.obj != null && msg.obj instanceof Long && !((Long) (msg.obj)).equals(WatchDog.currentScrollMillis)) {
// do nothing
} else if (adapter != null) {
adapter.notifyDataSetChanged();
}
break;
case MSG_DATA_LOAD_FAILD:
uiShowNoData();
break;
}
super.handleMessage(msg);
}
};
// private BroadcastReceiver fitThemesTitleReceier = new BroadcastReceiver() {
// @Override
// public void onReceive(Context context, Intent intent) {
// parentActivityChangeButton();
// parentActivityChangeTitle();
// }
// };
protected void updateUI() {
if (adapter != null && themes != null && themes.size() != 0) {
if (loadingRunning == true) {
endLoading();
}
adapter.notifyDataSetChanged();
/*
* System.out.println("adapter.getThemes().size()=" +
* adapter.getThemes().size()); System.out.println("themes.size()="
* + themes.size());
* System.out.println("adapter.getThemes()==themes?" +
* (adapter.getThemes() == themes));
*/
} else {
uiShowNoData();
}
}
protected void uiShowNoData() {
System.out.println(TAG+"showNoData");
stopLoadingAnimation();
llContent.setVisibility(View.GONE);
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.VISIBLE);
View loadFailureView=new ViewFactory().createLoadFailureView(this);
llNoData.removeAllViews();
llNoData.addView(loadFailureView);
}
private void stopLoadingAnimation() {
if (ad != null && ad.isRunning()) {
ad.stop();
}
loadingRunning = false;
}
private void getThemesList() {
Pools.executorService1.submit(new Runnable() {
@Override
public void run() {
themes.clear();
themes.addAll(new HttpGetter(context).getThemesList(0, maxDataItems));
if (themes != null && themes.size() != 0) {
handler.sendEmptyMessage(MSG_DATA_GOT);
WatchDog.themesDataGot = true;
}
}
});
}
public ThemesFragment() {
}
public ThemesFragment(Context context) {
this.context = context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// parentActivityChangeButton();
// parentActivityChangeTitle();
updateTitlebar();
view = LayoutInflater.from(context).inflate(R.layout.themes_fragment, null);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
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);
if (ad == null) {
ad = (AnimationDrawable) getResources().getDrawable(R.anim.animatior_list);
}
llLoading.findViewById(R.id.iv_loading).setBackgroundDrawable(ad);
ad.start();
loadingRunning = true;
}
// private void parentActivityChangeTitle() {
// TabWebActivity.tvTitle.setText("音乐主题");
// TabWebActivity.currentMenuItem = "音乐主题";
// ((TabWebActivity) context).useTitleStyle(TabWebActivity.TITLE_STYLE_NORMAL);
// }
//
// private void parentActivityChangeButton() {
// TabWebActivity.changeButton("btnMenu");
// }
protected void endLoading() {
Log.e(TAG, "--endLoading()--");
if (ad != null && ad.isRunning()) {
ad.stop();
}
llContent.setVisibility(View.VISIBLE);
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.GONE);
loadingRunning = false;
}
@Override
public void onResume() {
super.onResume();
// listViewGetFormerPosition();
WatchDog.currentSelfReloader = this;
fragmentIsActive = true;
}
private void initComponents() {
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);
lvThemes = (ListView) view.findViewById(R.id.lv_themes);
initListView();
}
@Override
public void onDetach() {
super.onDetach();
// unregisterReceivers();
if (themes.size() != 0) {
recycleBitmaps();
}
}
// private void registerReceivers() {
// context.registerReceiver(fitThemesTitleReceier, new IntentFilter("fitThemesTitleReceier"));
// }
private void initListView() {
adapter = new ThemeListAdapter4Web(context, this);
adapter.setThemes(themes);
lvThemes.setAdapter(adapter);
lvThemes.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 加载主题详情页
if (PowerfulBigMan.testClickInterval() == false) {
return;
}
Pack pack = themes.get(position);
long packid = pack.getId();
String packname = pack.getName();
int musicCount = pack.getMcount();
String imgUrl = pack.getImgurl();
System.out.println("imgUrl=" + imgUrl);
showPackContent(packid, packname, musicCount, imgUrl);
}
});
lvThemes.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
// WatchDog.formerScrollMillis =
// WatchDog.currentScrollMillis;
WatchDog.currentScrollMillis = System.currentTimeMillis();
firstVisibleItemPosition = lvThemes.getFirstVisiblePosition();
lastVisibleItemPosition = lvThemes.getLastVisiblePosition();
// if (lvThemes.getChildAt(0) != null) {
// scrollTop = lvThemes.getChildAt(0).getTop();
// }
// adapter.notifyDataSetChanged();
paintPacksWithinSightAndFreeOthers(WatchDog.currentScrollMillis);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
protected void paintPacksWithinSightAndFreeOthers(Long myMillis) {
for (int i = 0; i < themes.size(); i++) {
if (i >= firstVisibleItemPosition && i <= lastVisibleItemPosition) {
downloadImage(themes.get(i), myMillis);
} else {
Bitmap bitmap = themes.get(i).getBitmap();
if (bitmap != null && !bitmap.equals(Constant.packCover)) {
bitmap.recycle();
bitmap = null;
}
}
}
}
protected void downloadImage(final Pack pack, final Long myMillis) {
Pools.executorService2.submit(new Runnable() {
@Override
public void run() {
// Looper.prepare();
String imageKey = pack.getImgurl() + "150";
Bitmap bitmap = BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, pack.getImgurl(), 150, false, new ImageCallBack() {
// 下载得到专辑封面后刷新界面
@Override
public void imageLoaded(Bitmap bitmap) {
if (bitmap != null && !bitmap.isRecycled()) {
pack.setBitmap(new SoftReference<Bitmap>(bitmap));
// handler.sendEmptyMessage(MSG_IMG_GOT);
Message msg = handler.obtainMessage(MSG_IMG_GOT, myMillis);
handler.sendMessage(msg);
}
}
});
// 从缓存中得到封面后刷新界面
if (bitmap != null && !bitmap.isRecycled()) {
pack.setBitmap(new SoftReference<Bitmap>(bitmap));
// handler.sendEmptyMessage(MSG_IMG_GOT);
Message msg = handler.obtainMessage(MSG_IMG_GOT, myMillis);
handler.sendMessage(msg);
}
bitmap = null;
// Looper.loop();
}
});
}
protected void showPackContent(long id, String name, int musicCount, String imgUrl) {
WatchDog.tabWebFragment.goPackDetail(id, name, musicCount, imgUrl);
}
private void unregisterReceivers() {
// context.unregisterReceiver(fitThemesTitleReceier);
}
@Override
public void letsSeeHeaven() {
// TODO Auto-generated method stub
}
@Override
public void recordCurrentDataAndPosition() {
// TODO Auto-generated method stub
}
@Override
public void getSavedDataAndPosition() {
// TODO Auto-generated method stub
}
@Override
public int getFistVisiblePosition() {
return firstVisibleItemPosition;
}
@Override
public int getLastVisiblePosition() {
return lastVisibleItemPosition;
}
@Override
public void recycleBitmaps() {
if (themes != null) {
for (Pack pack : themes) {
pack.recyleBitmap();
}
}
}
@Override
public void updateTitlebar() {
WatchDog.tabWebFragment.setPopbackable(false);
WatchDog.tabWebFragment.setTitle("音乐主题");
}
@Override
public void reload() {
System.out.println(TAG+"reloading...");
startLoading();
getDataWhenActive();
}
@Override
public void onDataLoadFailed() {
handler.sendEmptyMessage(MSG_DATA_LOAD_FAILD);
}
}