package org.qii.weiciyuan.ui.browser;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.MessageBean;
import org.qii.weiciyuan.bean.RepostListBean;
import org.qii.weiciyuan.bean.android.AsyncTaskLoaderResult;
import org.qii.weiciyuan.dao.send.RepostNewMsgDao;
import org.qii.weiciyuan.support.error.WeiboException;
import org.qii.weiciyuan.support.lib.VelocityListView;
import org.qii.weiciyuan.support.lib.pulltorefresh.PullToRefreshBase;
import org.qii.weiciyuan.support.lib.pulltorefresh.PullToRefreshListView;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.support.utils.Utility;
import org.qii.weiciyuan.ui.actionmenu.RepostSingleChoiceModeListener;
import org.qii.weiciyuan.ui.adapter.StatusListAdapter;
import org.qii.weiciyuan.ui.basefragment.AbstractMessageTimeLineFragment;
import org.qii.weiciyuan.ui.common.QuickSendProgressFragment;
import org.qii.weiciyuan.ui.loader.RepostByIdMsgLoader;
import android.app.ActionBar;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
* User: qii
* Date: 12-8-13
*/
@Deprecated
public class RepostsByIdTimeLineFragment extends AbstractMessageTimeLineFragment<RepostListBean> {
private MessageBean msg;
private EditText et;
private LinearLayout quick_repost;
private String token;
private String id;
private RepostListBean bean = new RepostListBean();
@Override
public RepostListBean getList() {
return bean;
}
public RepostsByIdTimeLineFragment(String token, String id, MessageBean msg) {
this.token = token;
this.id = id;
this.msg = msg;
}
public RepostsByIdTimeLineFragment() {
}
//restore from activity destroy
public void load() {
if ((bean == null || bean.getSize() == 0)) {
if (pullToRefreshListView != null) {
pullToRefreshListView.setRefreshing();
loadNewMsg();
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("bean", bean);
outState.putString("id", id);
outState.putString("token", token);
outState.putParcelable("msg", msg);
}
private boolean canSend() {
boolean haveToken = !TextUtils.isEmpty(token);
boolean contentNumBelow140 = (et.getText().toString().length() < 140);
if (haveToken && contentNumBelow140) {
return true;
} 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));
}
}
return false;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
switch (getCurrentState(savedInstanceState)) {
case FIRST_TIME_START:
//nothing
break;
case SCREEN_ROTATE:
//nothing
refreshLayout(bean);
break;
case ACTIVITY_DESTROY_AND_CREATE:
clearAndReplaceValue((RepostListBean) savedInstanceState.getParcelable("bean"));
token = savedInstanceState.getString("token");
id = savedInstanceState.getString("id");
msg = (MessageBean) savedInstanceState.getParcelable("msg");
timeLineAdapter.notifyDataSetChanged();
refreshLayout(bean);
break;
}
getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
getListView().setOnItemLongClickListener(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 RepostSingleChoiceModeListener(getListView(),
(StatusListAdapter) timeLineAdapter,
RepostsByIdTimeLineFragment.this, quick_repost,
bean.getItemList().get(position - 1)));
return true;
} else {
getListView().setItemChecked(position, true);
timeLineAdapter.notifyDataSetChanged();
actionMode = getActivity().startActionMode(
new RepostSingleChoiceModeListener(getListView(),
(StatusListAdapter) timeLineAdapter,
RepostsByIdTimeLineFragment.this, quick_repost,
bean.getItemList().get(position - 1)));
return true;
}
}
return false;
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
setRetainInstance(false);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.repostsbyidtimelinefragment_layout, container, false);
empty = (TextView) view.findViewById(R.id.empty);
progressBar = (ProgressBar) view.findViewById(R.id.progressbar);
quick_repost = (LinearLayout) view.findViewById(R.id.quick_repost);
pullToRefreshListView = (PullToRefreshListView) view.findViewById(R.id.listView);
pullToRefreshListView
.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
loadNewMsg();
}
});
pullToRefreshListView
.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
loadOldMsg(null);
}
});
getListView().setScrollingCacheEnabled(false);
getListView().setHeaderDividersEnabled(false);
footerView = inflater.inflate(R.layout.listview_footer_layout, null);
getListView().addFooterView(footerView);
dismissFooterView();
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (actionMode != null) {
getListView().clearChoices();
actionMode.finish();
actionMode = null;
return;
}
getListView().clearChoices();
if (position - 1 < getList().getSize() && position - 1 >= 0) {
listViewItemClick(parent, view, position - 1, id);
} else if (position - 1 >= getList().getSize()) {
loadOldMsg(view);
}
}
});
if (savedInstanceState == null && msg != null) {
if (msg.getRetweeted_status() == null) {
quick_repost.setVisibility(View.VISIBLE);
}
} else if (savedInstanceState != null) {
msg = (MessageBean) savedInstanceState.getParcelable("msg");
if (msg.getRetweeted_status() == null) {
quick_repost.setVisibility(View.VISIBLE);
}
}
et = (EditText) view.findViewById(R.id.content);
view.findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRepost();
}
});
buildListAdapter();
return view;
}
protected void buildListAdapter() {
timeLineAdapter = new StatusListAdapter(this, getList().getItemList(), getListView(),
false);
pullToRefreshListView.setAdapter(timeLineAdapter);
}
private void sendRepost() {
if (canSend()) {
new SimpleTask().execute();
}
}
class SimpleTask extends AsyncTask<Void, Void, MessageBean> {
WeiboException e;
QuickSendProgressFragment progressFragment = new QuickSendProgressFragment();
@Override
protected void onPreExecute() {
progressFragment.onCancel(new DialogInterface() {
@Override
public void cancel() {
SimpleTask.this.cancel(true);
}
@Override
public void dismiss() {
SimpleTask.this.cancel(true);
}
});
progressFragment.show(getFragmentManager(), "");
}
@Override
protected MessageBean doInBackground(Void... params) {
String content = et.getText().toString();
if (TextUtils.isEmpty(content)) {
content = getString(R.string.repost);
}
RepostNewMsgDao dao = new RepostNewMsgDao(token, id);
dao.setStatus(content);
try {
return dao.sendNewMsg();
} catch (WeiboException e) {
this.e = e;
cancel(true);
return null;
}
}
@Override
protected void onCancelled(MessageBean s) {
super.onCancelled(s);
if (this.e != null && getActivity() != null) {
Toast.makeText(getActivity(), e.getError(), Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPostExecute(MessageBean s) {
if (progressFragment != null) {
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) {
startActivity(BrowserWeiboMsgActivity
.newIntent(bean.getItemList().get(position),
GlobalContext.getInstance().getSpecialToken()));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_refresh:
pullToRefreshListView.setRefreshing();
loadNewMsg();
return true;
}
return super.onOptionsItemSelected(item);
}
private void invlidateTabText() {
Activity activity = getActivity();
if (activity != null) {
ActionBar.Tab tab = activity.getActionBar().getTabAt(2);
Utility.buildTabCount(tab, getString(R.string.repost), bean.getTotal_number());
((BrowserWeiboMsgActivity) activity).updateRepostCount(bean.getTotal_number());
}
}
@Override
protected void newMsgLoaderSuccessCallback(RepostListBean newValue, Bundle loaderArgs) {
if (Utility.isAllNotNull(getActivity(), newValue) && newValue.getSize() > 0) {
getList().replaceAll(newValue);
getAdapter().notifyDataSetChanged();
getListView().setSelectionAfterHeaderView();
invlidateTabText();
}
}
@Override
protected void oldMsgLoaderSuccessCallback(RepostListBean newValue) {
if (Utility.isAllNotNull(getActivity(), newValue) && newValue.getSize() > 1) {
getList().addOldData(newValue);
invlidateTabText();
} else {
Toast.makeText(getActivity(), getString(R.string.older_message_empty),
Toast.LENGTH_SHORT).show();
}
}
@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);
VelocityListView velocityListView = (VelocityListView) getListView();
bundle.putBoolean("towardsBottom",
velocityListView.getTowardsOrientation() == VelocityListView.TOWARDS_BOTTOM);
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 Loader<AsyncTaskLoaderResult<RepostListBean>> onCreateNewMsgLoader(int loaderId,
Bundle args) {
String sinceId = null;
if (getList().getItemList().size() > 0) {
sinceId = getList().getItemList().get(0).getId();
}
return new RepostByIdMsgLoader(getActivity(), id, token, sinceId, null);
}
protected Loader<AsyncTaskLoaderResult<RepostListBean>> onCreateMiddleMsgLoader(int loaderId,
Bundle args, String middleBeginId, String middleEndId, String middleEndTag,
int middlePosition) {
return new RepostByIdMsgLoader(getActivity(), id, token, middleBeginId, middleEndId);
}
protected Loader<AsyncTaskLoaderResult<RepostListBean>> onCreateOldMsgLoader(int loaderId,
Bundle args) {
String maxId = null;
if (getList().getSize() > 0) {
maxId = getList().getItemList().get(getList().getSize() - 1).getId();
}
return new RepostByIdMsgLoader(getActivity(), id, token, null, maxId);
}
}