package org.qii.weiciyuan.ui.topic; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.TopicResultListBean; import org.qii.weiciyuan.bean.android.AsyncTaskLoaderResult; import org.qii.weiciyuan.dao.topic.TopicDao; import org.qii.weiciyuan.support.error.WeiboException; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.ui.basefragment.AbstractMessageTimeLineFragment; import org.qii.weiciyuan.ui.browser.BrowserWeiboMsgActivity; import org.qii.weiciyuan.ui.loader.SearchTopicByNameLoader; import org.qii.weiciyuan.ui.send.WriteWeiboActivity; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.Loader; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.Toast; /** * User: qii * Date: 12-9-26 */ public class SearchTopicByNameFragment extends AbstractMessageTimeLineFragment<TopicResultListBean> { private String q; //page 0 and page 1 data is same private int page = 1; private TopicResultListBean bean = new TopicResultListBean(); private FollowTopicTask followTopicTask; private UnFollowTopicTask unFollowTopicTask; @Override public TopicResultListBean getList() { return bean; } public SearchTopicByNameFragment() { } public SearchTopicByNameFragment(String q) { this.q = q; } @Override public void onDetach() { super.onDetach(); Utility.cancelTasks(followTopicTask, unFollowTopicTask); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("q", q); outState.putInt("page", page); outState.putParcelable("bean", bean); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); switch (getCurrentState(savedInstanceState)) { case FIRST_TIME_START: getPullToRefreshListView().setRefreshing(); loadNewMsg(); break; case SCREEN_ROTATE: //nothing refreshLayout(bean); break; case ACTIVITY_DESTROY_AND_CREATE: q = savedInstanceState.getString("q"); page = savedInstanceState.getInt("page"); getList() .addNewData((TopicResultListBean) savedInstanceState.getParcelable("bean")); getAdapter().notifyDataSetChanged(); refreshLayout(getList()); break; } } @Override protected void newMsgLoaderSuccessCallback(TopicResultListBean newValue, Bundle loaderArgs) { if (newValue != null && getActivity() != null && newValue.getSize() > 0) { getList().addNewData(newValue); getAdapter().notifyDataSetChanged(); getListView().setSelectionAfterHeaderView(); buildActionBatSubtitle(); } } @Override protected void oldMsgLoaderSuccessCallback(TopicResultListBean newValue) { if (newValue != null && newValue.getSize() > 0) { getList().addOldData(newValue); page++; buildActionBatSubtitle(); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.actionbar_menu_searchtopicbynamefragment, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_write: Intent intent = new Intent(getActivity(), WriteWeiboActivity.class); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("account", GlobalContext.getInstance().getAccountBean()); intent.putExtra("content", "#" + q + "#"); startActivity(intent); break; case R.id.menu_refresh: pullToRefreshListView.setRefreshing(); loadNewMsg(); break; case R.id.menu_follow_topic: if (Utility.isTaskStopped(followTopicTask)) { followTopicTask = new FollowTopicTask(); followTopicTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } break; case R.id.menu_unfollow_topic: if (Utility.isTaskStopped(unFollowTopicTask)) { unFollowTopicTask = new UnFollowTopicTask(); unFollowTopicTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } break; } return super.onOptionsItemSelected(item); } @Override protected void listViewItemClick(AdapterView parent, View view, int position, long id) { startActivity(BrowserWeiboMsgActivity.newIntent(bean.getItemList().get(position), GlobalContext.getInstance().getSpecialToken())); } private void buildActionBatSubtitle() { int newSize = bean.getTotal_number(); String number = bean.getSize() + "/" + newSize; getActivity().getActionBar().setSubtitle(number); } private class FollowTopicTask extends MyAsyncTask<Void, Boolean, Boolean> { WeiboException e; @Override protected Boolean doInBackground(Void... params) { try { return new TopicDao(GlobalContext.getInstance().getSpecialToken()).follow(q); } catch (WeiboException e) { this.e = e; cancel(true); } return false; } @Override protected void onCancelled(Boolean aBoolean) { super.onCancelled(aBoolean); if (Utility.isAllNotNull(getActivity(), this.e)) { Toast.makeText(getActivity(), e.getError(), Toast.LENGTH_SHORT).show(); } } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if (getActivity() == null) { return; } if (aBoolean) { Toast.makeText(getActivity(), getString(R.string.follow_topic_successfully), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), getString(R.string.follow_topic_failed), Toast.LENGTH_SHORT).show(); } } } private class UnFollowTopicTask extends MyAsyncTask<Void, Boolean, Boolean> { WeiboException e; @Override protected Boolean doInBackground(Void... params) { try { return new TopicDao(GlobalContext.getInstance().getSpecialToken()).destroy(q); } catch (WeiboException e) { this.e = e; cancel(true); } return false; } @Override protected void onCancelled(Boolean aBoolean) { super.onCancelled(aBoolean); if (Utility.isAllNotNull(getActivity(), this.e)) { Toast.makeText(getActivity(), e.getError(), Toast.LENGTH_SHORT).show(); } } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if (getActivity() == null) { return; } if (aBoolean) { Toast.makeText(getActivity(), getString(R.string.unfollow_topic_successfully), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), getString(R.string.unfollow_topic_failed), Toast.LENGTH_SHORT).show(); } } } @Override protected Loader<AsyncTaskLoaderResult<TopicResultListBean>> onCreateNewMsgLoader(int id, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String word = this.q; page = 1; return new SearchTopicByNameLoader(getActivity(), token, word, String.valueOf(page)); } @Override protected Loader<AsyncTaskLoaderResult<TopicResultListBean>> onCreateOldMsgLoader(int id, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String word = this.q; return new SearchTopicByNameLoader(getActivity(), token, word, String.valueOf(page + 1)); } }