package com.ladjzero.uzlee; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import com.ladjzero.hipda.Forum; import com.ladjzero.hipda.Response; import com.ladjzero.hipda.Threads; import com.ladjzero.uzlee.utils.Utils; import com.ladjzero.uzlee.widget.HorizontalTagsView; import java.util.List; /** * Created by chenzhuo on 15-12-14. */ public class FragmentNormalThreads extends FragmentThreadsAbs implements SwipeRefreshLayout.OnRefreshListener, HorizontalTagsView.TagStateChangeListener, App.OnEventListener { private int mFid; private boolean mVisibleInPager = false; private AsyncTask mParseTask; private Forum.Type mType; private HorizontalTagsView mTags; public static FragmentThreadsAbs newInstance() { FragmentNormalThreads f = new FragmentNormalThreads(); f.mType = new Forum.Type(); f.mType.setId(-1); return f; } private String getOrder() { int i = Integer.parseInt(((ActivityBase) getActivity()).getSettings().getString("sort_thread", "2")); switch (i) { case 1: return "dateline"; default: return "lastpost"; } } @Override protected void onListViewReady(ListView listView, LayoutInflater inflater) { List<Integer> selected = Utils.getForumsShowingTypes(App.getInstance().getSharedPreferences()); if (selected.contains(mFid)) { mTags = (HorizontalTagsView) inflater.inflate(R.layout.horizontal_tags_view, null); mTags.setOnInterceptTouchEvent(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return model.isFetchingAndParsing(); } }); List<Forum> forums = App.getInstance().getFlattenForums(); Forum f = Forum.findById(forums, mFid); List<Forum.Type> types = f.getTypes(); if (types != null && types.size() > 0) { mType = types.get(0); mTags.setTags(types.toArray(), mType); mTags.setTagActiveListener(this); listView.addHeaderView(mTags); } } else { listView.addHeaderView(new View(getActivity())); } } @Override public int layout() { return R.layout.threads_can_refresh; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle args = getArguments(); mFid = args.getInt("fid", -1); assert mFid != -1; App.getInstance().addEventListener(this); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDestroyView() { super.onDestroyView(); App.getInstance().removeEventListener(this); } // Lazy load. @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); mVisibleInPager = isVisibleToUser; if (isVisibleToUser && getView() != null && mThreads.size() == 0) { fetch(1); } } @Override public void onResume() { super.onResume(); if (mVisibleInPager && mThreads != null && mThreads.size() == 0 && !model.isFetchingAndParsing()) { fetch(1); mAdapter.notifyDataSetChanged(); } } @Override void fetchPageAt(int page) { App.getInstance().getApi().getThreads(page, mFid, mType.getId(), getOrder(), new Api.OnRespond() { @Override public void onRespond(Response res) { model.setFetchingAndParsing(false); if (res.isSuccess()) { onThreads((Threads) res.getData()); } else { ((ActivityBase) getActivity()).showToast(res.getData().toString()); } } }); } @Override public void onDestroy() { super.onDestroy(); if (mParseTask != null && !mParseTask.isCancelled()) { mParseTask.cancel(true); } } @Override protected String keyOfThreadsToCache() { return "threads-normal-fid-" + mFid + "-typeId-" + (mType != null ? mType.getId() : -1); } @Override public void onRefresh() { mThreads.clear(); mAdapter.notifyDataSetChanged(); fetch(1); } @Override public void onTagActive(Object tag, int i) { mTags.toggle(false); mTags.toggle(i, true); mType = (Forum.Type) tag; mThreads.clear(); mAdapter.notifyDataSetChanged(); fetch(1); } @Override public void onTagInactive(Object tag, int i) { } @Override public void onEvent(Object o) { if ((o instanceof EventRefresh) && mVisibleInPager && !model.isFetchingAndParsing()) { onRefresh(); } } }