package com.jasonchen.microlang.fragments;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.TextView;
import android.widget.Toast;
import com.jasonchen.microlang.R;
import com.jasonchen.microlang.activitys.FanListActivity;
import com.jasonchen.microlang.activitys.FollowerListActivity;
import com.jasonchen.microlang.adapter.TimeLineAdapter;
import com.jasonchen.microlang.beans.MessageBean;
import com.jasonchen.microlang.beans.MessageListBean;
import com.jasonchen.microlang.beans.TopicResultListBean;
import com.jasonchen.microlang.beans.UserBean;
import com.jasonchen.microlang.dao.SearchTopicDao;
import com.jasonchen.microlang.dao.StatusesTimeLineDao;
import com.jasonchen.microlang.exception.WeiboException;
import com.jasonchen.microlang.settings.SettingUtility;
import com.jasonchen.microlang.swiperefresh.LoadListView;
import com.jasonchen.microlang.swiperefresh.SwipeRefreshLayout;
import com.jasonchen.microlang.utils.GlobalContext;
import com.jasonchen.microlang.utils.HackyMovementMethod;
import com.jasonchen.microlang.utils.TimeLineUtility;
import com.jasonchen.microlang.utils.ViewUtility;
import com.jasonchen.microlang.utils.file.FileLocationMethod;
import com.jasonchen.microlang.view.AvatarBigImageView;
import com.jasonchen.microlang.view.HackyTextView;
import com.jasonchen.microlang.workers.TimeLineBitmapDownloader;
import java.util.ArrayList;
import java.util.List;
/**
* jasonchen
* 2015/04/16
*/
public class TopicFragment extends AbstractAppFragment implements SwipeRefreshLayout.OnRefreshListener, LoadListView.IXListViewListener {
private static final int FIRST_LOAD = 0;
private static final int REFRESH = 1;
private static final int LOAD_MORE = 2;
private static final int ERROR = 3;
private View view;
private SwipeRefreshLayout refreshLayout;
private LoadListView listView;
private TimeLineAdapter adapter;
private List<MessageBean> list;
private String topic;
private int pager = 1;
private MyHandler handler;
public TopicFragment() {
}
public static TopicFragment newInstance(String topic) {
TopicFragment fragment = new TopicFragment();
Bundle bundle = new Bundle();
bundle.putString("topic", topic);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
if (view == null) {
view = inflater.inflate(R.layout.fragment_user, container, false);
}
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
refreshLayout = ViewUtility.findViewById(view, R.id.refreshLayout);
listView = ViewUtility.findViewById(view, R.id.listView);
refreshLayout.setColorSchemeColors(getResources().getColor(SettingUtility.getThemeColor()));
refreshLayout.setOnRefreshListener(this);
listView.setXListViewListener(this);
listView.setPullLoadEnable(true);
listView.setDivider(null);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(false);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
false);
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
if (adapter != null) {
adapter.setIsFling(true);
}
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(true);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
true);
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
if (adapter != null) {
adapter.setIsFling(true);
}
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(true);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
true);
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
handler = new MyHandler();
list = new ArrayList<MessageBean>();
topic = getArguments().getString("topic");
initListView();
getWeiboList();
}
private void getWeiboList() {
refreshLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics()));
refreshLayout.setRefreshing(true);
listView.getFooterView().hide();
asyncDownLoadTopic();
}
private void asyncDownLoadTopic() {
new Thread() {
@Override
public void run() {
super.run();
SearchTopicDao dao = new SearchTopicDao(GlobalContext.getInstance().getSpecialToken(), topic);
dao.setCount(String.valueOf(20));
try {
TopicResultListBean result = dao.getGSONMsgList();
Message msg = Message.obtain();
msg.what = FIRST_LOAD;
msg.obj = result;
handler.sendMessage(msg);
} catch (WeiboException e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR;
msg.obj = e;
handler.sendMessage(msg);
}
}
}.start();
}
private void initListView() {
adapter = new TimeLineAdapter(this, listView, list);
listView.setAdapter(adapter);
}
protected LoadListView getListView() {
return listView;
}
@Override
public void onRefresh() {
asyncDownLoadTopic();
}
@Override
public void onLoadMore() {
new Thread() {
@Override
public void run() {
super.run();
SearchTopicDao dao = new SearchTopicDao(GlobalContext.getInstance().getSpecialToken(), topic);
dao.setPage(String.valueOf(pager++));
dao.setCount(String.valueOf(20));
try {
TopicResultListBean result = dao.getGSONMsgList();
Message msg = Message.obtain();
msg.what = LOAD_MORE;
msg.obj = result;
handler.sendMessage(msg);
} catch (WeiboException e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR;
msg.obj = e;
handler.sendMessage(msg);
}
}
}.start();
}
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case FIRST_LOAD:
TopicResultListBean newbean = (TopicResultListBean) msg.obj;
list.clear();
list.addAll(newbean.getItemList());
adapter.notifyDataSetChanged();
refreshLayout.setRefreshing(false);
listView.getFooterView().show();
break;
case LOAD_MORE:
TopicResultListBean oldbean = (TopicResultListBean) msg.obj;
list.addAll(list.size(), oldbean.getItemList());
adapter.notifyDataSetChanged();
listView.stopLoadMore();
if(oldbean.getItemList().size() == 0){
listView.getFooterView().hide();
listView.setPullLoadEnable(false);
}
break;
case ERROR:
refreshLayout.setRefreshing(false);
listView.stopLoadMore();
WeiboException e = (WeiboException) msg.obj;
Toast.makeText(GlobalContext.getInstance(), e.getError(), Toast.LENGTH_SHORT).show();
break;
}
}
}
@Override
public void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}