package org.aisen.weibo.sina.ui.fragment.mention;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.aisen.android.common.utils.SystemUtils;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.support.paging.IPaging;
import org.aisen.android.ui.fragment.ARecycleViewSwipeRefreshFragment;
import org.aisen.android.ui.fragment.ATabsFragment;
import org.aisen.android.ui.fragment.itemview.BasicFooterView;
import org.aisen.android.ui.fragment.itemview.IITemView;
import org.aisen.android.ui.fragment.itemview.IItemViewCreator;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.base.AppSettings;
import org.aisen.weibo.sina.sinasdk.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.StatusComment;
import org.aisen.weibo.sina.sinasdk.bean.StatusComments;
import org.aisen.weibo.sina.support.paging.CommentPaging;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import java.util.ArrayList;
import java.util.List;
/**
* 提及的评论
*
* Created by wangdan on 16/1/24.
*/
public class MentionCmtsFragment extends ARecycleViewSwipeRefreshFragment<StatusComment, StatusComments>
implements ATabsFragment.ITabInitData {
public static MentionCmtsFragment newInstance() {
return new MentionCmtsFragment();
}
private BizFragment bizFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bizFragment = BizFragment.createBizFragment(this);
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
setViewPadding(getEmptyLayout());
setViewPadding(getLoadFailureLayout());
setViewPadding(getLoadingLayout());
}
private void setViewPadding(View viewGroup) {
viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(),
viewGroup.getPaddingRight(), SystemUtils.getNavigationBarHeight(getActivity()));
}
@Override
protected IPaging<StatusComment, StatusComments> newPaging() {
return new CommentPaging();
}
@Override
protected IItemViewCreator<StatusComment> configFooterViewCreator() {
return new IItemViewCreator<StatusComment>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(BasicFooterView.LAYOUT_RES, parent, false);
}
@Override
public IITemView<StatusComment> newItemView(View convertView, int viewType) {
return new BasicFooterView<StatusComment>(getActivity(), convertView, MentionCmtsFragment.this) {
@Override
protected String endpagingText() {
return getString(R.string.disable_comments);
}
@Override
protected String loadingText() {
return String.format(getString(R.string.loading_cmts), AppSettings.getCommentCount());
}
};
}
};
}
@Override
public IItemViewCreator<StatusComment> configItemViewCreator() {
return new IItemViewCreator<StatusComment>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(MentionCmtItemView.RES_LAYOUT_ID, parent, false);
}
@Override
public IITemView<StatusComment> newItemView(View convertView, int viewType) {
return new MentionCmtItemView(convertView, MentionCmtsFragment.this, bizFragment);
}
};
}
@Override
public void requestData(RefreshMode mode) {
boolean load = true;
// 如果还没有加载过数据,切且显示的是当前的页面
if (getTaskCount(PAGING_TASK_ID) == 0) {
load = AisenUtils.checkTabsFragmentCanRequestData(this);
}
if (load) {
new MentionCmtTask(mode).execute();
}
}
@Override
public void onTabRequestData() {
// 如果还没有加载过数据,就开始加载
if (getTaskCount(PAGING_TASK_ID) == 0) {
requestData(RefreshMode.reset);
}
}
class MentionCmtTask extends APagingTask<Void, Void, StatusComments> {
public MentionCmtTask(RefreshMode mode) {
super(mode);
}
@Override
protected List<StatusComment> parseResult(StatusComments statusComments) {
return statusComments.getComments();
}
@Override
protected boolean handleResult(RefreshMode mode, List datas) {
// 如果是重置或者刷新数据,加载数据大于分页大小,则清空之前的数据
if (mode == RefreshMode.refresh)
// 目前微博加载分页大小是默认大小
if (datas.size() >= AppSettings.getCommentCount()) {
setAdapterItems(new ArrayList<StatusComment>());
}
return super.handleResult(mode, datas);
}
@Override
protected StatusComments workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException {
String sinceId = null;
String maxId = null;
String filterByAuthor = "0";
if (mode == RefreshMode.refresh && !TextUtils.isEmpty(previousPage)) {
sinceId = previousPage;
}
if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage)) {
maxId = nextPage;
}
return SinaSDK.getInstance(AppContext.getAccount().getAccessToken(), getTaskCacheMode(this))
.commentsMentions(sinceId, maxId, filterByAuthor, String.valueOf(AppSettings.getCommentCount()));
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
if (!isContentEmpty())
showMessage(exception.getMessage());
}
@Override
protected void onSuccess(StatusComments result) {
super.onSuccess(result);
if (result == null)
return;
if (result.fromCache() &&
AppContext.getAccount().getUnreadCount() != null && AppContext.getAccount().getUnreadCount().getMention_cmt() > 0) {
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
bizFragment.remindSetCount(BizFragment.RemindType.mention_cmt);
}
}
}
@Override
public boolean onToolbarDoubleClick() {
if (AisenUtils.checkTabsFragmentCanRequestData(this)) {
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
getRefreshView().scrollToPosition(0);
return true;
}
return false;
}
}