package org.aisen.weibo.sina.ui.fragment.comment;
import android.app.Fragment;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.network.http.Params;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.support.paging.IPaging;
import org.aisen.android.ui.fragment.AListFragment;
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.sinasdk.bean.StatusContent;
import org.aisen.weibo.sina.support.paging.CommentPaging;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import java.util.ArrayList;
import java.util.List;
/**
* 微博评论
*
* Created by wangdan on 16/1/7.
*/
public class TimelineCommentFragment extends AListFragment<StatusComment, StatusComments> {
public static TimelineCommentFragment newInstance(StatusContent status) {
Bundle arts = new Bundle();
arts.putSerializable("status", status);
TimelineCommentFragment fragment = new TimelineCommentFragment();
fragment.setArguments(arts);
return fragment;
}
private StatusContent mStatusContent;
@Override
public int inflateContentView() {
return R.layout.ui_timeline_comment;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
getContentView().setBackgroundColor(Color.WHITE);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mStatusContent = savedInstanceState != null ? (StatusContent) savedInstanceState.getSerializable("status")
: (StatusContent) getArguments().getSerializable("status");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
BizFragment.createBizFragment(getActivity()).getFabAnimator().attachToListView(getRefreshView(), null, this);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("status", mStatusContent);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
super.onItemClick(parent, view, position, id);
if (getAdapterItems().size() == 0) {
return;
}
final StatusComment comment = getAdapterItems().get(position);
final String[] commentMenuArr = GlobalContext.getInstance().getResources().getStringArray(R.array.cmt_menus);
if (mStatusContent != null)
comment.setStatus(mStatusContent);
final List<String> menuList = new ArrayList<String>();
// 回复
if (comment.getUser() != null && !comment.getUser().getId().equals(AppContext.getAccount().getUser().getId()))
menuList.add(commentMenuArr[3]);
// 转发
if (comment.getStatus() != null &&
(comment.getUser() != null && !comment.getUser().getIdstr().equals(AppContext.getAccount().getUser().getIdstr())))
menuList.add(commentMenuArr[1]);
// 复制
menuList.add(commentMenuArr[0]);
// 删除
if (comment.getUser() != null && AppContext.getAccount().getUser().getIdstr().equals(comment.getUser().getIdstr()))
menuList.add(commentMenuArr[2]);
new AlertDialogWrapper.Builder(getActivity())
.setTitle(comment.getUser().getScreen_name())
.setItems(menuList.toArray(new String[0]), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AisenUtils.commentMenuSelected(TimelineCommentFragment.this, menuList.toArray(new String[0])[which], comment);
}
})
.show();
}
@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, TimelineCommentFragment.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(TimelineCommentItemView.LAYOUT_RES, parent, false);
}
@Override
public IITemView<StatusComment> newItemView(View convertView, int viewType) {
return new TimelineCommentItemView(TimelineCommentFragment.this, convertView);
}
};
}
@Override
protected IPaging<StatusComment, StatusComments> newPaging() {
return new CommentPaging();
}
@Override
public void requestData(RefreshMode mode) {
new CommentTask(mode).execute();
}
class CommentTask extends APagingTask<Void, Void, StatusComments> {
public CommentTask(RefreshMode mode) {
super(mode);
}
@Override
protected List<StatusComment> parseResult(StatusComments statusComments) {
return statusComments.getComments();
}
@Override
protected boolean handleResult(RefreshMode mode, List<StatusComment> datas) {
// 如果是重置或者刷新数据,加载数据大于分页大小,则清空之前的数据
if (mode == RefreshMode.reset || mode == RefreshMode.refresh)
// 目前微博加载分页大小是默认大小
if (datas.size() >= AppSettings.getCommentCount()) {
setAdapterItems(new ArrayList<StatusComment>());
return true;
}
return super.handleResult(mode, datas);
}
@Override
protected StatusComments workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... p) throws TaskException {
Params params = new Params();
if ((mode == RefreshMode.refresh || mode == RefreshMode.reset) && !TextUtils.isEmpty(previousPage))
params.addParameter("since_id", previousPage);
if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage))
params.addParameter("max_id", nextPage);
params.addParameter("id", mStatusContent.getId() + "");
params.addParameter("count", String.valueOf(AppSettings.getCommentCount()));
StatusComments statusComments = SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).commentsShow(params);
statusComments.setEndPaging(statusComments.getComments().size() <= 10);
return statusComments;
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
@Override
protected void onFinished() {
super.onFinished();
if (getActivity() != null) {
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
if (fragment != null && fragment instanceof TimelineDetailPagerFragment) {
((TimelineDetailPagerFragment) fragment).refreshEnd();
}
}
}
}
@Override
public boolean onToolbarDoubleClick() {
if (AisenUtils.checkTabsFragmentCanRequestData(this)) {
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
if (fragment != null && fragment instanceof TimelineDetailPagerFragment) {
((TimelineDetailPagerFragment) fragment).swipeRefreshLayout.setRefreshing(true);
}
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
getRefreshView().setSelectionFromTop(0, 0);
return true;
}
return false;
}
}