package com.jasonchen.microlang.fragments; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.Toast; import com.jasonchen.microlang.R; import com.jasonchen.microlang.adapter.TimeLineAdapter; import com.jasonchen.microlang.beans.AccountBean; import com.jasonchen.microlang.beans.FavListBean; import com.jasonchen.microlang.beans.MessageBean; import com.jasonchen.microlang.beans.MessageListBean; import com.jasonchen.microlang.beans.UserBean; import com.jasonchen.microlang.dao.FavListDao; import com.jasonchen.microlang.database.FavouriteDBTask; 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.ViewUtility; import com.jasonchen.microlang.workers.TimeLineBitmapDownloader; import java.util.ArrayList; import java.util.List; /** * jasonchen * 2015/04/10 */ @SuppressLint({"NewApi", "ResourceAsColor"}) public class FavFragment extends FixedOnActivityResultBugFragment implements SwipeRefreshLayout.OnRefreshListener, LoadListView.IXListViewListener { private View view; private static final String ARGUMENTS_ACCOUNT_EXTRA = FavFragment.class .getName() + ":account_extra"; private static final String ARGUMENTS_USER_EXTRA = FavFragment.class .getName() + ":userBean_extra"; private static final String ARGUMENTS_TOKEN_EXTRA = FavFragment.class .getName() + ":token_extra"; private static final int FIRST_LOAD_TIMELINE = 0; private static final int REFRESH_LISTVIEW = 1; private static final int NETWORK_ERROR = 2; private static final int LOAD_OLD_MESSAGE = 3; private SwipeRefreshLayout swipeRefreshLayout; private AccountBean accountBean; private UserBean userBean; private String token; private MessageListBean list; private List<MessageBean> msgBean; private LoadListView mListView; private Handler handler; private TimeLineAdapter adapter; private int totalPager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (view == null) { view = inflater.inflate(R.layout.fragment_comment_to_me, container, false); } return view; } @SuppressLint("ResourceAsColor") @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mListView = ViewUtility.findViewById(view, R.id.list); swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh_layout); swipeRefreshLayout.setOnRefreshListener(this); swipeRefreshLayout.setColorSchemeColors(getResources().getColor(SettingUtility.getThemeColor())); swipeRefreshLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics())); swipeRefreshLayout.setRefreshing(true); mListView.setPullLoadEnable(true); mListView.setXListViewListener(this); mListView.getFooterView().hide(); totalPager = 1; handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case FIRST_LOAD_TIMELINE: FavListBean firstData = (FavListBean) msg.obj; msgBean = firstData.getItemList(); adapter = new TimeLineAdapter(FavFragment.this, mListView, msgBean); mListView.setVisibility(View.VISIBLE); mListView.setAdapter(adapter); swipeRefreshLayout.setRefreshing(false); mListView.getFooterView().show(); break; case REFRESH_LISTVIEW: List<MessageBean> newList = (List<MessageBean>) msg.obj; int number = newList.size(); msgBean.clear(); msgBean.addAll(newList); newList = null; adapter.notifyDataSetChanged(); swipeRefreshLayout.setRefreshing(false); break; case LOAD_OLD_MESSAGE: FavListBean oldList = (FavListBean) msg.obj; msgBean.addAll(oldList.getItemList()); mListView.requestLayout(); adapter.notifyDataSetChanged(); int oldnumber = oldList.getItemList().size(); oldList = null; if (oldnumber > 0) { Toast.makeText( GlobalContext.getInstance(), String.format( getString(R.string.old_messages_count), oldnumber), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(GlobalContext.getInstance(), getString(R.string.older_message_empty), Toast.LENGTH_SHORT).show(); mListView.getFooterView().hide(); mListView.setPullLoadEnable(false); } mListView.stopLoadMore(); break; case NETWORK_ERROR: String errorStr = (String) msg.obj; Toast.makeText(GlobalContext.getInstance(), errorStr, Toast.LENGTH_SHORT) .show(); swipeRefreshLayout.setRefreshing(false); mListView.stopLoadMore(); break; } } }; } public BaseAdapter getAdapter() { return adapter; } public static FavFragment newInstance(AccountBean accountBean, UserBean userBean, String token) { FavFragment fragment = new FavFragment(); Bundle bundle = new Bundle(); bundle.putParcelable(ARGUMENTS_ACCOUNT_EXTRA, accountBean); bundle.putParcelable(ARGUMENTS_USER_EXTRA, userBean); bundle.putString(ARGUMENTS_TOKEN_EXTRA, token); fragment.setArguments(bundle); return fragment; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.getFooterView().hide(); userBean = getArguments().getParcelable(ARGUMENTS_USER_EXTRA); accountBean = getArguments().getParcelable(ARGUMENTS_ACCOUNT_EXTRA); token = getArguments().getString(ARGUMENTS_TOKEN_EXTRA); msgBean = new ArrayList<MessageBean>(); int total = FavouriteDBTask.getTotalNumber(accountBean.getUid()); if (SettingUtility.firstOpenFav() || total == 0) { mListView.setVisibility(View.INVISIBLE); getNewStatusTask(); } else { mListView.setVisibility(View.INVISIBLE); readStatusFromDBTask(); } mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: TimeLineBitmapDownloader.getInstance() .setPauseDownloadWork(false); TimeLineBitmapDownloader.getInstance().setPauseReadWork( false); break; case OnScrollListener.SCROLL_STATE_FLING: adapter.setIsFling(true); TimeLineBitmapDownloader.getInstance() .setPauseDownloadWork(true); TimeLineBitmapDownloader.getInstance().setPauseReadWork( true); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: adapter.setIsFling(true); TimeLineBitmapDownloader.getInstance() .setPauseDownloadWork(true); TimeLineBitmapDownloader.getInstance().setPauseReadWork( true); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } public void getNewStatusTask() { new Thread() { public void run() { FavListDao dao = new FavListDao( accountBean.getAccess_token()); try { FavListBean newlist = dao.getGSONMsgList(); FavouriteDBTask.asyncReplace(newlist, 1, accountBean .getInfo().getId()); Message msg = Message.obtain(); msg.what = FIRST_LOAD_TIMELINE; msg.obj = newlist; handler.sendMessage(msg); } catch (WeiboException e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = NETWORK_ERROR; msg.obj = e.getError(); handler.sendMessage(msg); } } ; }.start(); } private void asyncLoadOldMessage() { new Thread() { public void run() { FavListDao dao = new FavListDao( accountBean.getAccess_token()); totalPager++; dao.setPage(String.valueOf(totalPager)); try { FavListBean newlist = dao.getGSONMsgList(); Message msg = Message.obtain(); msg.what = LOAD_OLD_MESSAGE; msg.obj = newlist; handler.sendMessage(msg); } catch (WeiboException e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = NETWORK_ERROR; msg.obj = e.getError(); handler.sendMessage(msg); } } ; }.start(); } private void readStatusFromDBTask() { new Thread() { public void run() { int total = FavouriteDBTask .getTotalNumber(accountBean.getUid()); FavListBean newlist = FavouriteDBTask .getFavouriteMsgList(accountBean.getInfo().getId(), total); Message msg = Message.obtain(); msg.what = FIRST_LOAD_TIMELINE; msg.obj = newlist; handler.sendMessage(msg); } ; }.start(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onPause() { super.onPause(); } @Override public void onResume() { super.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onViewStateRestored(@Nullable Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); } @Override public void onRefresh() { new Thread() { public void run() { FavListDao dao = new FavListDao( accountBean.getAccess_token()); try { FavListBean favListBean = dao.getGSONMsgList(); List<MessageBean> newlist = favListBean.getItemList(); FavouriteDBTask.asyncReplace(favListBean, 1, accountBean .getInfo().getId()); Message msg = Message.obtain(); msg.what = REFRESH_LISTVIEW; msg.obj = newlist; handler.sendMessage(msg); } catch (WeiboException e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = NETWORK_ERROR; msg.obj = e.getError(); handler.sendMessage(msg); } } ; }.start(); } @Override public void onLoadMore() { asyncLoadOldMessage(); } private List<MessageBean> getList() { return adapter.getList(); } }