package com.jaf.biubiu;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.jaf.bean.BeanAnswerItem;
import com.jaf.bean.BeanNearbyItem;
import com.jaf.bean.ResponseQuestion;
import com.jaf.jcore.BindView;
import com.jaf.jcore.BindableView;
import com.jaf.jcore.Http;
import com.jaf.jcore.HttpCallBack;
import com.jaf.jcore.JacksonWrapper;
import org.json.JSONObject;
import java.util.ArrayList;
import master.flame.danmaku.ui.widget.DanmakuView;
/**
* Created by jarrah on 2015/4/23.
*/
public class ViewNearbyItem extends BindableView {
public static final int NO_EXPAND = -1;
public static int expandPosition = NO_EXPAND;
@BindView(id = R.id.name)
private TextView mName;
@BindView(id = R.id.content)
private TextView mContent;
@BindView(id = R.id.locDesc)
private TextView mLocDesc;
@BindView(id = R.id.replyCount)
private TextView mReplyCount;
@BindView(id = R.id.optionContainer)
private View mDanmuContainer;
@BindView(id = R.id.danmuLoadingTips)
private TextView mDanmuTips;
@BindView(id = R.id.danmu)
private DanmakuView mDanmakuView;
@BindView(id = R.id.itemContainer)
private View mItemContainer;
@BindView(id = R.id.itemSubContainer)
private View mItemSubContainer;
@BindView(id = R.id.itemClickArea, onClick = "onItemClick")
private View mItemClickArea;
@BindView(id = R.id.itemClickArea2, onClick = "onItemClick")
private View mItemClickArea2;
private BeanNearbyItem mBeanNearbyItem;
private Http http;
private ArrayList<BeanAnswerItem> mDanmuSouce;
@BindView(id = R.id.listMode, onClick = "onListModeClick")
View btnListMode;
private LikePanelHolder mLikePanelHolder;
@BindView(id = R.id.likeCheck)
public CheckBox mLike;
@BindView(id = R.id.unlikeCheck)
public CheckBox mUnLike;
@BindView(id = R.id.likePanelContainer, onClick = "doNothing")
private View mLikePanelContainer;
private int mPosition;
public ViewNearbyItem(Context context) {
super(context);
}
@Override
public void onViewDidLoad() {
http = new Http();
}
private void toggleDanmuPanel() {
if (mDanmuContainer.getVisibility() == View.VISIBLE) {
hideDamu();
} else {
showDamu();
}
}
public void onShow(int position) {
}
public void onHide() {
}
private void showDamu() {
mDanmuContainer.setVisibility(View.VISIBLE);
if (mBeanNearbyItem.getAnsNum() == 0) {
mDanmuTips.setVisibility(View.VISIBLE);
mDanmuTips.setText(R.string.commentCome);
} else {
mDanmuTips.setVisibility(View.VISIBLE);
mDanmuTips.setText(R.string.danmuComming);
}
DanmuHelper.setupDanmu(mDanmakuView);
requestDanmuData();
onShow(mPosition);
}
private void hideDamu() {
mDanmuContainer.setVisibility(View.GONE);
if(mDanmakuView.isShown()) {
mDanmakuView.clearDanmakusOnScreen();
mDanmakuView.stop();
}
onHide();
}
private void requestDanmuData() {
http.url(Constant.API)
.JSON(U.buildQuestion(false, 999, mBeanNearbyItem.getQuestId()))
.post(new HttpCallBack() {
@Override
public void onResponse(JSONObject response) {
super.onResponse(response);
ResponseQuestion responseQuestion = JacksonWrapper
.json2Bean(response, ResponseQuestion.class);
if (responseQuestion != null) {
L.dbg("danmu get!");
mDanmuSouce = responseQuestion.getReturnData()
.getContData();
if (mDanmuSouce.size() > 0) {
mDanmuTips.setVisibility(View.GONE);
}
delayDanmu();
}
}
});
}
int startIndex = 0;
private void delayDanmu() {
if (mDanmuSouce == null || mDanmuSouce.isEmpty() || mDanmuContainer.getVisibility() == View.GONE)
return;
postDelayed(new Runnable() {
@Override
public void run() {
BeanAnswerItem item = null;
try {
item = mDanmuSouce.get(startIndex);
} catch (Exception e) {
item = null;
}
if (item == null)
return;
DanmuHelper.addDanmaku(mDanmakuView, false, item.getAns());
startIndex++;
startIndex = startIndex == mDanmuSouce.size() ? 0 : startIndex;
delayDanmu();
}
}, 300);
}
@Override
public int onLoadViewResource() {
return R.layout.view_nearby_item;
}
public void setData(BeanNearbyItem beanNearbyItem, int position) {
mPosition = position;
mBeanNearbyItem = beanNearbyItem;
String name = TextUtils.isEmpty(beanNearbyItem.getSign())
? getContext().getString(R.string.anonymity)
: beanNearbyItem.getSign();
mName.setText(name);
mContent.setText(beanNearbyItem.getQuest());
// mLocDesc.setText(beanNearbyItem.getSelfLocDesc());
mReplyCount.setText(getContext().getString(R.string.replyCount,
beanNearbyItem.getAnsNum()));
// distance
String distance = beanNearbyItem.getDistance() < 3 ? " <3" : String
.valueOf(beanNearbyItem.getDistance());
mLocDesc.setText(getContext().getString(R.string.distance, distance));
// manage sign color
if (beanNearbyItem.getIsYellow() == 1) {
mName.setTextColor(getResources().getColor(R.color.dfYellow));
} else {
mName.setTextColor(getResources().getColor(R.color.dfBlue));
}
//danmu
if(expandPosition == position) {
showDamu();
}else {
hideDamu();
}
// padding color
int index = position % 3;
int res = R.color.tagYellow;
switch (index) {
case 1:
res = R.color.tagRed;
break;
case 2:
res = R.color.tagGreen;
break;
default:
break;
}
setLikePanel(beanNearbyItem);
// List ITEM INTERVAL COLOR
int color = getResources().getColor(R.color.white);
if (position % 2 == 1) {
color = getResources().getColor(R.color.listItemDark);
} else {
color = getResources().getColor(R.color.white);
}
mItemSubContainer.setBackgroundColor(color);
mItemContainer.setBackgroundColor(getResources().getColor(res));
}
public void setLikePanel(BeanNearbyItem beanNearbyItem) {
//like unlike
boolean likeEnable = true;
boolean isUnlike;
boolean isLike;
switch (beanNearbyItem.getLikeFlag()) {
case 1://zan
likeEnable = false;
isLike = true;
isUnlike = false;
break;
case 2://cai
likeEnable = false;
isUnlike = true;
isLike = false;
break;
default://no status
likeEnable= true;
isUnlike = false;
isLike = false;
break;
}
mLike.setChecked(isLike);
mUnLike.setChecked(isUnlike);
mLike.setEnabled(likeEnable);
mUnLike.setEnabled(likeEnable);
}
public void onListModeClick(View v) {
ActivityDetail.Extra extra = new ActivityDetail.Extra();
extra.fromNearby = mBeanNearbyItem;
extra.questId = mBeanNearbyItem.getQuestId();
ActivityDetail.start((Activity) getContext(), extra);
}
public void doNothing(View v) {
L.dbg("do nothing");
}
public void onItemClick(View v) {
toggleDanmuPanel();
}
public static void resetExpandPosition() {
expandPosition = NO_EXPAND;
}
}