package org.qii.weiciyuan.ui.browser; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.CommentBean; import org.qii.weiciyuan.bean.CommentListBean; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.bean.android.AsyncTaskLoaderResult; import org.qii.weiciyuan.dao.destroy.DestroyCommentDao; import org.qii.weiciyuan.dao.send.CommentNewMsgDao; import org.qii.weiciyuan.support.error.WeiboException; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.AppConfig; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.ui.actionmenu.CommentByIdSingleChoiceModeLinstener; import org.qii.weiciyuan.ui.adapter.CommentListAdapter; import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment; import org.qii.weiciyuan.ui.common.QuickSendProgressFragment; import org.qii.weiciyuan.ui.interfaces.IRemoveItem; import org.qii.weiciyuan.ui.loader.CommentsByIdMsgLoader; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; /** * User: qii * Date: 12-7-29 */ @Deprecated public class CommentsByIdTimeLineFragment extends AbstractTimeLineFragment<CommentListBean> implements IRemoveItem { private LinearLayout quick_repost; private RemoveTask removeTask; private CommentListBean bean = new CommentListBean(); private EditText et; private String token; private MessageBean msg; private BroadcastReceiver sendCompletedReceiver; @Override public CommentListBean getList() { return bean; } public CommentsByIdTimeLineFragment(String token, MessageBean msg) { this.token = token; this.msg = msg; } public CommentsByIdTimeLineFragment() { } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("bean", bean); outState.putParcelable("msg", msg); outState.putString("token", token); } //restore from activity destroy public void load() { String sss = token; if ((bean == null || bean.getItemList().size() == 0)) { if (pullToRefreshListView != null) { pullToRefreshListView.setRefreshing(); loadNewMsg(); } } } private boolean canSend() { boolean haveContent = !TextUtils.isEmpty(et.getText().toString()); boolean haveToken = !TextUtils.isEmpty(token); boolean contentNumBelow140 = (et.getText().toString().length() < 140); if (haveContent && haveToken && contentNumBelow140) { return true; } else { if (!haveContent && !haveToken) { Toast.makeText(getActivity(), getString(R.string.content_cant_be_empty_and_dont_have_account), Toast.LENGTH_SHORT).show(); } else if (!haveContent) { et.setError(getString(R.string.content_cant_be_empty)); } else if (!haveToken) { Toast.makeText(getActivity(), getString(R.string.dont_have_account), Toast.LENGTH_SHORT).show(); } if (!contentNumBelow140) { et.setError(getString(R.string.content_words_number_too_many)); } } Animation shake = AnimationUtils.loadAnimation(getActivity(), R.anim.shake); et.startAnimation(shake); return false; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); switch (getCurrentState(savedInstanceState)) { case FIRST_TIME_START: new Handler().postDelayed(new Runnable() { @Override public void run() { if (getActivity() != null) { getPullToRefreshListView().setRefreshing(); loadNewMsg(); } } }, AppConfig.REFRESH_DELAYED_MILL_SECOND_TIME); break; case SCREEN_ROTATE: //nothing refreshLayout(bean); break; case ACTIVITY_DESTROY_AND_CREATE: getList().replaceAll((CommentListBean) savedInstanceState.getParcelable("bean")); token = savedInstanceState.getString("token"); msg = (MessageBean) savedInstanceState.getParcelable("msg"); timeLineAdapter.notifyDataSetChanged(); refreshLayout(bean); break; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bean = new CommentListBean(); setHasOptionsMenu(true); setRetainInstance(false); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater .inflate(R.layout.commentsbyidtimelinefragment_layout, container, false); buildLayout(inflater, view); quick_repost = (LinearLayout) view.findViewById(R.id.quick_repost); et = (EditText) view.findViewById(R.id.content); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendComment(); } }); getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); getListView().setOnItemLongClickListener(onItemLongClickListener); } private AdapterView.OnItemLongClickListener onItemLongClickListener = new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { if (position - 1 < getList().getSize() && position - 1 >= 0) { if (actionMode != null) { actionMode.finish(); actionMode = null; getListView().setItemChecked(position, true); timeLineAdapter.notifyDataSetChanged(); actionMode = getActivity().startActionMode( new CommentByIdSingleChoiceModeLinstener(getListView(), timeLineAdapter, CommentsByIdTimeLineFragment.this, quick_repost, bean.getItemList().get(position - 1))); return true; } else { getListView().setItemChecked(position, true); timeLineAdapter.notifyDataSetChanged(); actionMode = getActivity().startActionMode( new CommentByIdSingleChoiceModeLinstener(getListView(), timeLineAdapter, CommentsByIdTimeLineFragment.this, quick_repost, bean.getItemList().get(position - 1))); return true; } } return false; } }; @Override protected void buildListAdapter() { timeLineAdapter = new CommentListAdapter(this, getList().getItemList(), getListView(), false, false); pullToRefreshListView.setAdapter(timeLineAdapter); } private void sendComment() { if (canSend()) { new QuickCommentTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } @Override public void removeItem(int position) { clearActionMode(); if (removeTask == null || removeTask.getStatus() == MyAsyncTask.Status.FINISHED) { removeTask = new RemoveTask(GlobalContext.getInstance().getSpecialToken(), bean.getItemList().get(position).getId(), position); removeTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } @Override public void removeCancel() { clearActionMode(); } @Override public void onResume() { super.onResume(); sendCompletedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { getPullToRefreshListView().setRefreshing(); loadNewMsg(); } }; LocalBroadcastManager.getInstance(getActivity()).registerReceiver(sendCompletedReceiver, new IntentFilter("org.qii.weiciyuan.SEND.COMMENT.COMPLETED")); } @Override public void onPause() { super.onPause(); LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(sendCompletedReceiver); } class RemoveTask extends MyAsyncTask<Void, Void, Boolean> { String token; String id; int positon; WeiboException e; public RemoveTask(String token, String id, int positon) { this.token = token; this.id = id; this.positon = positon; } @Override protected Boolean doInBackground(Void... params) { DestroyCommentDao dao = new DestroyCommentDao(token, id); try { return dao.destroy(); } 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 (aBoolean) { ((CommentListAdapter) timeLineAdapter).removeItem(positon); } } } private class QuickCommentTask extends AsyncTask<Void, Void, CommentBean> { WeiboException e; QuickSendProgressFragment progressFragment = new QuickSendProgressFragment(); @Override protected void onPreExecute() { progressFragment.onCancel(new DialogInterface() { @Override public void cancel() { QuickCommentTask.this.cancel(true); } @Override public void dismiss() { QuickCommentTask.this.cancel(true); } }); progressFragment.show(getFragmentManager(), ""); } @Override protected CommentBean doInBackground(Void... params) { CommentNewMsgDao dao = new CommentNewMsgDao(token, msg.getId(), et.getText().toString()); try { return dao.sendNewMsg(); } catch (WeiboException e) { this.e = e; cancel(true); return null; } } @Override protected void onCancelled(CommentBean commentBean) { super.onCancelled(commentBean); progressFragment.dismissAllowingStateLoss(); if (this.e != null) { Toast.makeText(getActivity(), e.getError(), Toast.LENGTH_SHORT).show(); } } @Override protected void onPostExecute(CommentBean s) { progressFragment.dismissAllowingStateLoss(); if (s != null) { et.setText(""); loadNewMsg(); } else { Toast.makeText(getActivity(), getString(R.string.send_failed), Toast.LENGTH_SHORT) .show(); } super.onPostExecute(s); } } protected void listViewItemClick(AdapterView parent, View view, int position, long id) { // CommentByIdFloatingMenu menu = new CommentByIdFloatingMenu(getList().getItem(position)); // menu.show(getFragmentManager(), ""); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_refresh: getPullToRefreshListView().setRefreshing(); loadNewMsg(); return true; } return super.onOptionsItemSelected(item); } @Override protected void newMsgLoaderSuccessCallback(CommentListBean newValue, Bundle loaderArgs) { if (newValue != null && newValue.getSize() > 0) { getList().replaceAll(newValue); getAdapter().notifyDataSetChanged(); getListView().setSelectionAfterHeaderView(); invlidateTabText(); } else if (newValue != null && newValue.getSize() == 0) { getList().clear(); getAdapter().notifyDataSetChanged(); invlidateTabText(); } } @Override protected void oldMsgLoaderSuccessCallback(CommentListBean newValue) { if (newValue != null && newValue.getItemList().size() > 1) { getList().addOldData(newValue); getAdapter().notifyDataSetChanged(); invlidateTabText(); } } private void invlidateTabText() { Activity activity = getActivity(); if (activity != null) { // ActionBar.Tab tab = activity.getActionBar().getTabAt(1); // Utility.buildTabCount(tab, getString(R.string.comments), bean.getTotal_number()); ((BrowserWeiboMsgActivity) activity).updateCommentCount(bean.getTotal_number()); } } @Override public void loadMiddleMsg(String beginId, String endId, int position) { getLoaderManager().destroyLoader(NEW_MSG_LOADER_ID); getLoaderManager().destroyLoader(OLD_MSG_LOADER_ID); getPullToRefreshListView().onRefreshComplete(); dismissFooterView(); Bundle bundle = new Bundle(); bundle.putString("beginId", beginId); bundle.putString("endId", endId); bundle.putInt("position", position); getLoaderManager().restartLoader(MIDDLE_MSG_LOADER_ID, bundle, msgAsyncTaskLoaderCallback); } @Override public void loadNewMsg() { getLoaderManager().destroyLoader(MIDDLE_MSG_LOADER_ID); getLoaderManager().destroyLoader(OLD_MSG_LOADER_ID); dismissFooterView(); getLoaderManager().restartLoader(NEW_MSG_LOADER_ID, null, msgAsyncTaskLoaderCallback); } @Override protected void loadOldMsg(View view) { getLoaderManager().destroyLoader(NEW_MSG_LOADER_ID); getPullToRefreshListView().onRefreshComplete(); getLoaderManager().destroyLoader(MIDDLE_MSG_LOADER_ID); getLoaderManager().restartLoader(OLD_MSG_LOADER_ID, null, msgAsyncTaskLoaderCallback); } protected android.support.v4.content.Loader<AsyncTaskLoaderResult<CommentListBean>> onCreateNewMsgLoader( int loaderId, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String sinceId = null; // if (getList().getItemList().size() > 0) { // sinceId = getList().getItemList().get(0).getId(); // } return new CommentsByIdMsgLoader(getActivity(), msg.getId(), token, sinceId, null); } protected android.support.v4.content.Loader<AsyncTaskLoaderResult<CommentListBean>> onCreateMiddleMsgLoader( int loaderId, Bundle args, String middleBeginId, String middleEndId, String middleEndTag, int middlePosition) { String token = GlobalContext.getInstance().getSpecialToken(); return new CommentsByIdMsgLoader(getActivity(), msg.getId(), token, middleBeginId, middleEndId); } protected android.support.v4.content.Loader<AsyncTaskLoaderResult<CommentListBean>> onCreateOldMsgLoader( int loaderId, Bundle args) { String token = GlobalContext.getInstance().getSpecialToken(); String maxId = null; if (getList().getItemList().size() > 0) { maxId = getList().getItemList().get(getList().getItemList().size() - 1).getId(); } return new CommentsByIdMsgLoader(getActivity(), msg.getId(), token, null, maxId); } }