package com.jaf.biubiu;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.jaf.bean.BeanAnswerItem;
import com.jaf.bean.BeanNearbyItem;
import com.jaf.bean.BeanRequestAnswerList;
import com.jaf.bean.ResponseQuestion;
import com.jaf.jcore.AbsWorker;
import com.jaf.jcore.BindView;
import com.jaf.jcore.BindableFragment;
import com.jaf.jcore.Http;
import com.jaf.jcore.HttpCallBack;
import com.jaf.jcore.JacksonWrapper;
import com.jaf.jcore.NetworkListView;
import com.jarrah.photo.PopupUtil;
import org.json.JSONObject;
import java.util.ArrayList;
/**
* Created by jarrah on 2015/4/16. 一个完整的问答模块 包含一个 问题header 一些答案list 附近 , 板块 公共
*/
public class FragmentQA extends BindableFragment {
private static final String KEY_ARGS = "args";
@BindView(id = R.id.questionList)
public NetworkListView<ViewAnswerItem, BeanAnswerItem> mListView;
private com.jaf.jcore.AbsWorker.AbsLoader<ViewAnswerItem, com.jaf.bean.BeanAnswerItem> mLoader;
private View mHeader;
private HeaderHolder mHeaderHolder;
private ArrayList<BeanAnswerItem> mDataSource;
private BeanNearbyItem mFromNearby;
private Dialog mPopupDialog;
private BeanAnswerItem mBeanAnswerItem;
private int mFloorNum;
private BeanRequestAnswerList mData;
//0 qid 1 aid
private int[] mCommentParams = new int[2];
public FragmentQA() {
}
public static FragmentQA newInstance(BeanRequestAnswerList b) {
Bundle args = new Bundle();
args.putSerializable(KEY_ARGS, b);
FragmentQA fragmentQuestionList = new FragmentQA();
fragmentQuestionList.setArguments(args);
return fragmentQuestionList;
}
@Override
protected int onLoadViewResource() {
return R.layout.fragment_qa;
}
@Override
protected void onViewDidLoad(Bundle savedInstanceState) {
super.onViewDidLoad(savedInstanceState);
mData = getData();
mDataSource = new ArrayList<BeanAnswerItem>();
if (mData != null) {
headerViewFromNearby();
setupList();
} else {
L.dbg("get data is null!");
}
}
private void headerViewFromNearby() {
mHeaderHolder = new HeaderHolder();
mHeader = getActivity().getLayoutInflater().inflate(
R.layout.layout_question_top, null);
mHeaderHolder.author = (TextView) mHeader.findViewById(R.id.author);
mHeaderHolder.title = (TextView) mHeader
.findViewById(R.id.questionText);
mHeaderHolder.locDesc = (TextView) mHeader
.findViewById(R.id.topLocDesc);
mListView.getRefreshableView().addHeaderView(mHeader);
Activity activity = getActivity();
if (activity instanceof ActivityDetail) {
ActivityDetail activityDetail = (ActivityDetail) activity;
mFromNearby = activityDetail.getData().fromNearby;
if (mFromNearby == null)
return;
if(!TextUtils.isEmpty(mFromNearby.getSign()))
mHeaderHolder.author.setText(mFromNearby.getSign());
mHeaderHolder.title.setText(mFromNearby.getQuest());
if(!TextUtils.isEmpty(mFromNearby.getSelfLocDesc()))
mHeaderHolder.locDesc.setText(mFromNearby.getSelfLocDesc());
LikePanelHolder.Extra extra = new LikePanelHolder.Extra();
extra.aid = 0;
extra.qid = mFromNearby.getQuestId();
LikePanelHolder likePanelHolder = new LikePanelHolder(extra,
mHeader) {
@Override
public void onPostSuccess(boolean isLike) {
super.onPostSuccess(isLike);
}
@Override
public void onPrePost(boolean isLike) {
super.onPrePost(isLike);
int count = isLike ? Integer.valueOf(like.getText()
.toString()) : Integer.valueOf(unLike.getText()
.toString());
count++;
if (isLike) {
mFromNearby.setLikeNum(count);
mFromNearby.setLikeFlag(1);
} else {
mFromNearby.setUnlikeNum(count);
mFromNearby.setLikeFlag(2);
}
setData(mFromNearby);
}
};
likePanelHolder.listenForChecking();
likePanelHolder.setData(mFromNearby);
}
}
private void setupList() {
mLoader = new AbsWorker.AbsLoader<ViewAnswerItem, BeanAnswerItem>() {
@Override
public String parseNextUrl(JSONObject response) {
return Constant.API;
}
@Override
public JSONObject parseNextJSON(JSONObject response) {
ResponseQuestion responseQuestion = JacksonWrapper.json2Bean(
response, ResponseQuestion.class);
ArrayList<BeanAnswerItem> data = responseQuestion
.getReturnData().getContData();
if (data.size() > 0) {
int lastId = data.get(data.size() - 1).getAnsId();
BeanRequestAnswerList bean = getData();
bean.setIdType(1);
bean.setLastId(lastId);
return JacksonWrapper.bean2Json(bean);
}
return null;
}
@Override
public ArrayList<BeanAnswerItem> parseJSON2ArrayList(
JSONObject response) {
ResponseQuestion responseQuestion = JacksonWrapper.json2Bean(
response, ResponseQuestion.class);
L.dbg("FragmentAnswerList response :" + response);
ArrayList<BeanAnswerItem> contData = new ArrayList<>();
if (responseQuestion != null) {
contData = responseQuestion.getReturnData().getContData();
}
if(mListView.isLoadMore()) {
mDataSource.addAll(contData);
}else{
mDataSource.clear();
mDataSource.addAll(contData);
}
return contData;
}
@Override
public void updateItemUI(final int position,final BeanAnswerItem data,
ViewAnswerItem itemView) {
mBeanAnswerItem = data;
itemView.setData(data, position);
itemView.setFloor(position);
onLikePanelEvent(position, data, itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mFloorNum = data.getFloorId();
setReplyCommentParams(mDataSource.get(position).getQuestId(), mDataSource.get(position).getAnsId());
popup();
}
});
}
private void popup() {
final View view = getActivity().getLayoutInflater().inflate(
R.layout.popup_answer_item, null);
mPopupDialog = PopupUtil.makePopup(getActivity(), view);
view.findViewById(R.id.btnReply).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupDialog.dismiss();
view.postDelayed(new Runnable() {
@Override
public void run() {
prepareReply();
}
}, 400);
}
});
view.findViewById(R.id.btnReportAbuse).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupDialog.dismiss();
reportAbuse(mBeanAnswerItem);
}
});
view.findViewById(R.id.btnCancel).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupDialog.dismiss();
}
});
mPopupDialog.show();
}
private void prepareReply() {
// L.dbg("do prepareReply set prepareReply data aid %d", mBeanAnswerItem.getAnsId());
ActivityDetail activityDetail = (ActivityDetail) getActivity();
Device.showSoftKeyboard(activityDetail.mEditText, activityDetail);
activityDetail.mEditText.setHint(getString(R.string.replyFloor, mFloorNum));
activityDetail.isReplyComment = true;
// setReplyCommentParams(mBeanAnswerItem.getQuestId(), mBeanAnswerItem.getAnsId());
// activityDetail.ansId = mBeanAnswerItem.getAnsId();
}
private void reportAbuse(BeanAnswerItem item) {
if (item == null)
return;
Http http = new Http();
// type 1 举报问题 2 举报评论
http.url(Constant.API)
.JSON(U.buildReportAbuse(item.getAnsId(), 2, ""))
.post(new HttpCallBack() {
@Override
public void onResponse(JSONObject response) {
super.onResponse(response);
Toast.makeText(getActivity(),
R.string.reportSuccess,
Toast.LENGTH_SHORT).show();
}
});
}
private void onLikePanelEvent(final int position,final BeanAnswerItem data,
final ViewAnswerItem itemView) {
LikePanelHolder.Extra extra = new LikePanelHolder.Extra();
extra.qid = data.getQuestId();
extra.aid = data.getAnsId();
LikePanelHolder likePanelHolder = new LikePanelHolder(extra,
itemView) {
@Override
public void onPostSuccess(boolean isLike) {
// mListView.notifyDataSetChanged();
}
@Override
public void onPrePost(boolean isLike) {
int count = isLike ? Integer.valueOf(like.getText()
.toString()) : Integer.valueOf(unLike.getText()
.toString());
count++;
BeanAnswerItem item = null;
try {
item = mDataSource.get(position);
}catch (Exception e) {
Toast.makeText(getActivity(), R.string.data_error, Toast.LENGTH_SHORT).show();
return;
}
if (isLike) {
item.setLikeFlag(1);
item.setLikeNum(count);
} else {
item.setLikeFlag(2);
item.setUnlikeNum(count);
}
mListView.notifyDataSetChanged();
}
};
likePanelHolder.listenForChecking();
}
@Override
public ViewAnswerItem makeItem(LayoutInflater inflater,
int position, View convertView, ViewGroup parent) {
return new ViewAnswerItem(getActivity());
}
};
requestListView();
}
private void requestListView() {
mData.setLastId(0);
JSONObject jo = JacksonWrapper.bean2Json(mData);
L.dbg("refresh detail list : " + mData);
mListView.request(Constant.API, mLoader, jo);
}
//index 0 - qid 1- ansId
public int[] getRelyCommentParams() {
return mCommentParams;
}
public void setReplyCommentParams(int... params) {
if(params.length == mCommentParams.length) {
L.dbg(String.format("set replay params qid: %d, aid: %d", params[0], params[1]));
mCommentParams[0] = params[0];
mCommentParams[1] = params[1];
}
}
public BeanRequestAnswerList getData() {
return (BeanRequestAnswerList) getArguments().getSerializable(KEY_ARGS);
}
public void refreshAnswer() {
requestListView();
}
static class HeaderHolder {
TextView title;
TextView author;
TextView locDesc;
}
}