package org.aisen.weibo.sina.ui.fragment.comment; import java.util.ArrayList; import java.util.List; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.bean.TimelineGroupBean; import org.aisen.weibo.sina.support.paging.CommentsPagingProcessor; import org.aisen.weibo.sina.support.utils.AisenUtil; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.ui.activity.main.MainActivity; import org.aisen.weibo.sina.ui.component.CommentItemView; import org.aisen.weibo.sina.ui.fragment.base.ARefreshProxyFragment; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.aisen.weibo.sina.ui.fragment.base.BizFragment.RemindType; import org.sina.android.SinaSDK; import org.sina.android.bean.StatusComment; import org.sina.android.bean.StatusComments; import org.sina.android.bean.WeiBoUser; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.TextView; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.support.paging.IPaging; import com.m.support.task.TaskException; import com.m.ui.fragment.ABaseFragment; import com.m.ui.fragment.ATabTitlePagerFragment; /** * 我收到的、发出的所有评论 * * @author wangdan * */ public class CommentsFragment extends ARefreshProxyFragment<StatusComment, StatusComments> implements OnItemClickListener, OnItemLongClickListener { public static ABaseFragment newInstance(TimelineGroupBean bean) { ABaseFragment fragment = new CommentsFragment(); Bundle args = new Bundle(); args.putSerializable("bean", bean); fragment.setArguments(args); return fragment; } private TimelineGroupBean mBean; private WeiBoUser loggedIn; @Override protected int inflateContentView() { return R.layout.ui_mention_comments; } @Override protected RefreshListType configListType() { return RefreshListType.androidPulltorefresh; } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { super.layoutInit(inflater, savedInstanceSate); loggedIn = AppContext.getUser(); mBean = savedInstanceSate == null ? (TimelineGroupBean) getArguments().getSerializable("bean") : (TimelineGroupBean) savedInstanceSate.getSerializable("bean"); getRefreshView().setOnItemClickListener(this); getRefreshView().setOnItemLongClickListener(this); setHasOptionsMenu(true); ((TextView) findViewById(R.id.layoutEmpty).findViewById(R.id.txtLoadFailed)).setText(R.string.empty_cmts); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("bean", mBean); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView listView = (ListView) getRefreshView(); position -= listView.getHeaderViewsCount(); if (position >= 0 && position < getAdapter().getCount()) BizFragment.getBizFragment(this).replyComment(null, getAdapterItems().get(position)); } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { view.findViewById(R.id.btnMenus).performClick(); return true; } @Override protected IPaging<StatusComment, StatusComments> configPaging() { return new CommentsPagingProcessor(); } @Override protected AbstractItemView<StatusComment> newItemView() { return new CommentItemView(this); } @Override protected void requestData(RefreshMode mode) { if ("200".equals(mBean.getType())) new CommentToMe(mode).execute(); else if ("201".equals(mBean.getType())) new CommentByMe(mode).execute(); } // 发给我的评论 class CommentToMe extends CommentsTask { public CommentToMe(RefreshMode mode) { super(mode); } @Override protected StatusComments workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException { String sinceId = null; String maxId = null; String filterByAuthor = null; if (mode == RefreshMode.refresh && !TextUtils.isEmpty(previousPage)) sinceId = previousPage; if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage)) maxId = nextPage; filterByAuthor = "0"; return SinaSDK.getInstance(AppContext.getToken(), getTaskCacheMode(this)) .commentsToMe(sinceId, maxId, filterByAuthor, String.valueOf(AppSettings.getCommentCount())); } @Override protected void onSuccess(StatusComments result) { super.onSuccess(result); if (AppContext.getUnreadCount() != null && AppContext.getUnreadCount().getCmt() > 0) { requestDataDelay(1000); // fuck sina AppContext.getUnreadCount().setCmt(0); BizFragment.getBizFragment(CommentsFragment.this).remindSetCount(RemindType.cmt); } } }; // 我发出的评论 class CommentByMe extends CommentsTask { public CommentByMe(RefreshMode mode) { super(mode); } @Override protected StatusComments workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException { String sinceId = null; String maxId = null; if (mode == RefreshMode.refresh && !TextUtils.isEmpty(previousPage)) sinceId = previousPage; if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage)) maxId = nextPage; return SinaSDK.getInstance(AppContext.getToken(), getTaskCacheMode(this)) .commentsByMe(sinceId, maxId, String.valueOf(AppSettings.getCommentCount())); } }; abstract class CommentsTask extends PagingTask<Void, Void, StatusComments> { public CommentsTask(RefreshMode mode) { super("CommentsTask", mode); } @Override protected List<StatusComment> parseResult(StatusComments result) { return result.getComments(); } @Override protected boolean handleResult(RefreshMode mode, List<StatusComment> datas) { // 如果是重置或者刷新数据,加载数据大于分页大小,则清空之前的数据 if (mode == RefreshMode.refresh) // 目前微博加载分页大小是默认大小 if (datas.size() >= AppSettings.getCommentCount()) { setAdapterItems(new ArrayList<StatusComment>()); return true; } return super.handleResult(mode, datas); } @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); } } @Override public String getLastReadKey() { return AisenUtil.getUserKey(mBean.getType(), loggedIn); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.removeGroup(R.id.timeline); if (getActivity() instanceof MainActivity) { inflater.inflate(R.menu.refresh_comments, menu); } } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); if (getActivity() instanceof MainActivity) { MainActivity mainActivity = (MainActivity) getActivity(); menu.findItem(R.id.refresh).setVisible(!mainActivity.isDrawerOpened()); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.refresh) requestDataDelay(100); return super.onOptionsItemSelected(item); } @Override public boolean onAcUnusedDoubleClicked() { ABaseFragment aFragment = (ABaseFragment) getActivity().getFragmentManager().findFragmentByTag("MainFragment"); if (aFragment instanceof ATabTitlePagerFragment) { @SuppressWarnings("rawtypes") ATabTitlePagerFragment tabTitlePagerFragment = (ATabTitlePagerFragment) aFragment; if (tabTitlePagerFragment.getCurrentFragment() == this) return super.onAcUnusedDoubleClicked(); else return false; } return super.onAcUnusedDoubleClicked(); } }