package net.coding.program.maopao;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.text.Html;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.twotoasters.jazzylistview.JazzyListView;
import com.umeng.socialize.sso.UMSsoHandler;
import net.coding.program.FootUpdate;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.BlankViewDisplay;
import net.coding.program.common.ClickSmallImage;
import net.coding.program.common.Global;
import net.coding.program.common.ListModify;
import net.coding.program.common.MyImageGetter;
import net.coding.program.common.SimpleSHA1;
import net.coding.program.common.StartActivity;
import net.coding.program.common.TextWatcherAt;
import net.coding.program.common.base.MyJsonResponse;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.network.RefreshBaseFragment;
import net.coding.program.common.ui.BaseActivity;
import net.coding.program.common.widget.input.MainInputView;
import net.coding.program.maopao.item.CommentArea;
import net.coding.program.maopao.item.MaopaoLikeAnimation;
import net.coding.program.maopao.share.CustomShareBoard;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.DynamicObject;
import net.coding.program.model.Maopao;
import net.coding.program.setting.ValidePhoneActivity_;
import net.coding.program.third.EmojiFilter;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Created by chenchao on 15/9/22.
*/
@EFragment
public abstract class MaopaoListBaseFragment extends RefreshBaseFragment implements FootUpdate.LoadMore, StartActivity {
abstract protected String createUrl();
abstract protected String getMaopaoUrlFormat();
abstract protected void setActionTitle();
abstract protected void initMaopaoType();
abstract protected void initData();
@ViewById
protected JazzyListView listView;
@ViewById
protected View blankLayout;
@ViewById
protected View commonEnterRoot;
@ViewById
protected MainInputView mEnterLayout;
protected boolean mIsToMaopaoTopic = false;
protected int id = UPDATE_ALL_INT;
protected long lastTime = 0;
int needScrollY = 0;
int oldListHigh = 0;
int cal1 = 0;
// public final static int TAG_USER_GLOBAL_KEY = R.id.name;
public final static int TAG_MAOPAO_ID = R.id.maopaoMore;
public final static int TAG_MAOPAO = R.id.clickMaopao;
public final static int TAG_COMMENT = R.id.comment;
public final static int TAG_COMMENT_TEXT = R.id.commentArea;
public static final String HOST_GOOD = Global.HOST_API + "/tweet/%s/%s";
public static final String URI_COMMENT = Global.HOST_API + "/tweet/%s/comment";
public static final String TAG_DELETE_MAOPAO = "TAG_DELETE_MAOPAO";
public static final String TAG_DELETE_MAOPAO_COMMENT = "TAG_DELETE_MAOPAO_COMMENT";
static final int RESULT_EDIT_MAOPAO = 100;
static final int RESULT_AT = 101;
private MyImageGetter myImageGetter;
private int mPxImageWidth;
boolean mNoMore = false;
protected ArrayList<Maopao.MaopaoObject> mData = new ArrayList<>();
View.OnClickListener onClickRetry = new View.OnClickListener() {
@Override
public void onClick(View v) {
onRefresh();
}
};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
protected void initImageWidth() {
// 图片显示,单位为 dp
// 62 photo 3 photo 3 photo 34
final int divide = 3;
mPxImageWidth = Global.dpToPx(MyApp.sWidthDp - 62 - 34 - divide * 2) / 3;
int pxPadding = getResources().getDimensionPixelSize(R.dimen.padding_12);
mPxImageWidth = (MyApp.sWidthPix - pxPadding * 2 - Global.dpToPx(divide) * 2) / 3;
myImageGetter = new MyImageGetter(getActivity());
}
protected void initMaopaoListBaseFragmen() {
initRefreshLayout();
initImageWidth();
// 图片显示,单位为 dp
// 62 photo 3 photo 3 photo 34
final int divide = 3;
mPxImageWidth = Global.dpToPx(MyApp.sWidthDp - 62 - 34 - divide * 2) / 3;
// mData = AccountInfo.loadMaopao(getActivity(), mType.toString(), userId);
setActionTitle();
if (mData.isEmpty()) {
showDialogLoading();
} else {
setRefreshing(true);
}
initMaopaoType();
myImageGetter = new MyImageGetter(getActivity());
mFootUpdate.init(listView, mInflater, this);
listView.setAdapter(mAdapter);
ViewTreeObserver vto = listView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int listHeight = listView.getHeight();
if (oldListHigh > listHeight) {
if (cal1 == 0) {
cal1 = 1;
needScrollY = needScrollY + oldListHigh - listHeight;
} else if (cal1 == 1) {
int scrollResult = needScrollY + oldListHigh - listHeight;
listView.smoothScrollBy(scrollResult, 1);
needScrollY = 0;
}
oldListHigh = listHeight;
}
}
});
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) {
hideSoftkeyboard();
}
return false;
}
});
// mEnterLayout = new EnterEmojiLayout(getActivity(), onClickSendText, EnterLayout.Type.TextOnly, EnterEmojiLayout.EmojiType.SmallOnly);
mEnterLayout.setClickSend(onClickSendText);
mEnterLayout.addTextWatcher(new TextWatcherAt(getActivity(), this, RESULT_AT));
mEnterLayout.hide();
initData();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RESULT_EDIT_MAOPAO) {
if (resultCode == Activity.RESULT_OK || data != null) {
int type = data.getIntExtra(ListModify.TYPE, 0);
if (type == ListModify.Edit) {
Maopao.MaopaoObject maopao = (Maopao.MaopaoObject) data.getSerializableExtra(ListModify.DATA);
for (int i = 0; i < mData.size(); ++i) {
Maopao.MaopaoObject item = mData.get(i);
if (item.id == maopao.id) {
mData.remove(i);
mData.add(i, maopao);
mAdapter.notifyDataSetChanged();
break;
}
}
} else if (type == ListModify.Delete) {
int maopaoId = data.getIntExtra(ListModify.ID, 0);
for (int i = 0; i < mData.size(); ++i) {
Maopao.MaopaoObject item = mData.get(i);
if (item.id == (maopaoId)) {
mData.remove(i);
mAdapter.notifyDataSetChanged();
break;
}
}
} else if (type == ListModify.Add) {
Maopao.MaopaoObject addItem = (Maopao.MaopaoObject) data.getSerializableExtra(ListModify.DATA);
mData.add(0, addItem);
mAdapter.notifyDataSetChanged();
}
}
} else if (requestCode == RESULT_AT) {
if (resultCode == Activity.RESULT_OK) {
String name = data.getStringExtra("name");
mEnterLayout.insertText(name);
}
}
super.onActivityResult(requestCode, resultCode, data);
UMSsoHandler ssoHandler = CustomShareBoard.getShareController().getConfig().getSsoHandler(
requestCode);
if (ssoHandler != null) {
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
protected void hideSoftkeyboard() {
if (!mEnterLayout.isShow()) {
return;
}
mEnterLayout.restoreSaveStop();
mEnterLayout.clearContent();
mEnterLayout.hideKeyboard();
mEnterLayout.hide();
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(getMaopaoUrlFormat())) {
hideProgressDialog();
setRefreshing(false);
if (code == 0) {
if (id == UPDATE_ALL_INT) {
mData.clear();
}
JSONArray jsonArray = respanse.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); ++i) {
Maopao.MaopaoObject item = new Maopao.MaopaoObject(jsonArray.getJSONObject(i));
mData.add(item);
}
ArrayList<Maopao.MaopaoObject> mSaveData = new ArrayList<>();
int minSize = Math.min(mData.size(), 5);
for (int i = 0; i < minSize; ++i) {
mSaveData.add(mData.get(i));
}
// AccountInfo.saveMaopao(getActivity(), mSaveData, mType.toString(), userId);
if (jsonArray.length() == 0) {
mNoMore = true;
} else {
int oldId = id;
Maopao.MaopaoObject maopaoObject = mData.get(mData.size() - 1);
id = maopaoObject.id;
lastTime = maopaoObject.sortTime;
mAdapter.notifyDataSetChanged();
if (oldId == UPDATE_ALL_INT) {
// 当单个的冒泡item大于一屏时,smoothScrollToPosition(0)不会滚动到listview的顶端
listView.setSelectionAfterHeaderView();
}
}
if (mNoMore) {
mFootUpdate.dismiss();
} else {
mFootUpdate.showLoading();
}
BlankViewDisplay.setBlank(mData.size(), this, true, blankLayout, onClickRetry);
} else {
if (mData.size() > 0) {
mFootUpdate.showFail();
} else {
mFootUpdate.dismiss();
}
showErrorMsg(code, respanse);
BlankViewDisplay.setBlank(mData.size(), this, false, blankLayout, onClickRetry);
}
} else if (tag.equals(URI_COMMENT)) {
showProgressBar(false);
if (code == 0) {
mEnterLayout.clearContent();
Maopao.Comment myComment = new Maopao.Comment(respanse.getJSONObject("data"));
myComment.owner = new DynamicObject.Owner(MyApp.sUserObject);
Maopao.Comment otherComment = (Maopao.Comment) data;
mEnterLayout.restoreDelete(myComment);
for (int i = 0; i < mData.size(); ++i) {
Maopao.MaopaoObject item = mData.get(i);
if (otherComment.tweet_id == item.id) {
item.comment_list.add(0, myComment);
++item.comments;
mAdapter.notifyDataSetChanged();
hideSoftkeyboard();
return;
}
}
} else {
showErrorMsg(code, respanse);
}
// } else if (tag.equals(HOST_GOOD)) {
// if (code == 0) {
//// int headCount = listView.getHeaderViewsCount();
// for (int i = 0; i < mData.size(); ++i) {
// Maopao.MaopaoObject maopao = mData.get(i);
// if (maopao.id == ((Maopao.MaopaoObject) data).id) {
// maopao.liked = !maopao.liked;
// if (maopao.liked) {
// Maopao.Like_user like_user = new Maopao.Like_user(MyApp.sUserObject);
// maopao.like_users.add(0, like_user);
// ++maopao.likes;
// } else {
// for (int j = 0; j < maopao.like_users.size(); ++j) {
// if (maopao.like_users.get(j).global_key.equals(MyApp.sUserObject.global_key)) {
// maopao.like_users.remove(j);
// --maopao.likes;
// break;
// }
// }
// }
//
// mAdapter.notifyDataSetChanged();
//
// break;
// }
// }
// } else {
// showErrorMsg(code, respanse);
// }
} else if (tag.equals(TAG_DELETE_MAOPAO)) {
int maopaoId = (int) data;
if (code == 0) {
for (int i = 0; i < mData.size(); ++i) {
Maopao.MaopaoObject item = mData.get(i);
if (item.id == maopaoId) {
mData.remove(i);
mAdapter.notifyDataSetChanged();
}
}
} else {
showButtomToast("删除失败");
}
} else if (tag.equals(TAG_DELETE_MAOPAO_COMMENT)) {
Maopao.Comment comment = (Maopao.Comment) data;
if (code == 0) {
for (int i = 0; i < mData.size(); ++i) {
Maopao.MaopaoObject item = mData.get(i);
if (item.id == (comment.tweet_id)) {
for (int j = 0; j < item.comment_list.size(); ++j) {
if (item.comment_list.get(j).id == (comment.id)) {
item.comment_list.remove(j);
--item.comments;
mAdapter.notifyDataSetChanged();
return;
}
}
}
}
} else {
showButtomToast("删除失败");
}
}
}
@Override
protected void initSetting() {
super.initSetting();
id = UPDATE_ALL_INT;
lastTime = 0;
}
@Override
public void loadMore() {
getNetwork(createUrl(), getMaopaoUrlFormat());
}
@Override
public void onRefresh() {
initSetting();
getNetwork(createUrl(), getMaopaoUrlFormat());
}
View.OnClickListener onClickSendText = new View.OnClickListener() {
@Override
public void onClick(View v) {
String input = mEnterLayout.getContent();
if (EmojiFilter.containsEmptyEmoji(v.getContext(), input)) {
return;
}
Maopao.Comment commentObject = (Maopao.Comment) mEnterLayout.getEditText().getTag();
String uri = String.format(URI_COMMENT, commentObject.tweet_id);
RequestParams params = new RequestParams();
String commentString;
if (commentObject.id == 0) {
commentString = input;
} else {
commentString = Global.encodeInput(commentObject.owner.name, input);
}
params.put("content", commentString);
postNetwork(uri, params, URI_COMMENT, 0, commentObject);
showProgressBar(R.string.sending_comment);
}
};
View.OnClickListener onClickDeleteMaopao = new View.OnClickListener() {
@Override
public void onClick(View v) {
final int maopaoId = (int) v.getTag(TAG_MAOPAO_ID);
showDialog("冒泡", "删除冒泡?", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String HOST_MAOPAO_DELETE = Global.HOST_API + "/tweet/%s";
deleteNetwork(String.format(HOST_MAOPAO_DELETE, maopaoId), TAG_DELETE_MAOPAO,
-1, maopaoId);
}
});
}
};
public static void popReward(final BaseActivity activity, View v, final BaseAdapter adapter) {
Object data = v.getTag();
if (data instanceof Maopao.MaopaoObject) {
final Maopao.MaopaoObject maopaoData = (Maopao.MaopaoObject) data;
if (maopaoData.rewarded) {
activity.showMiddleToast("您已给该用户打赏过");
return;
}
if (maopaoData.owner.isMe() || maopaoData.owner_id == MyApp.sUserObject.id) {
activity.showMiddleToast("您不能给自己打赏");
return;
}
// show loading
View root = LayoutInflater.from(activity).inflate(R.layout.maopao_reward_dialog, null);
final AlertDialog dialog = new AlertDialog.Builder(activity)
.setView(root)
.show();
final TextView myPoints = (TextView) root.findViewById(R.id.myPoints);
final String MY_POINT_FORMAT = "我的码币余额: <font color=\"#F5A623\">%.2f</font>";
myPoints.setText(Html.fromHtml(String.format(MY_POINT_FORMAT, MyApp.sUserObject.points_left)));
final EditText password = (EditText) root.findViewById(R.id.password);
ImageView userIcon = (ImageView) root.findViewById(R.id.userIcon);
activity.getImageLoad().loadImageDefaultCoding(userIcon, maopaoData.owner.avatar);
TextView title = (TextView) root.findViewById(R.id.title);
title.setText(Html.fromHtml("打赏给该用户 <font color=\"#F5A623\">0.01</font> 码币"));
final View inputLayout = root.findViewById(R.id.inputLayout);
final View editLayout = root.findViewById(R.id.editLayout);
final View rewardButton = root.findViewById(R.id.buttonReward);
final TextView cannotRewardLayout = (TextView) root.findViewById(R.id.cannotReward);
inputLayout.setVisibility(View.VISIBLE);
editLayout.setVisibility(View.GONE);
rewardButton.setVisibility(View.VISIBLE);
cannotRewardLayout.setVisibility(View.GONE);
rewardButton.setOnClickListener(new View.OnClickListener() {
boolean mNeedPassword = false;
@Override
public void onClick(View v) {
String passwordString = "";
if (mNeedPassword) {
passwordString = password.getText().toString();
if (passwordString.isEmpty()) {
activity.showMiddleToast("请输入密码");
return;
}
}
final String format = "%s/tweet/%d/app_reward";
String url = String.format(format, Global.HOST_API, maopaoData.id);
RequestParams params = new RequestParams();
if (mNeedPassword) {
params.put("encodedPassword", SimpleSHA1.sha1(passwordString));
}
AsyncHttpClient client = MyAsyncHttpClient.createClient(activity);
client.post(activity, url, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
if (!dialog.isShowing()) {
return;
}
int code = response.optInt("code");
if (code == 0) {
activity.showMiddleToast("打赏成功");
maopaoData.rewarded = true;
++maopaoData.rewards;
Maopao.Like_user me = new Maopao.Like_user(MyApp.sUserObject);
MyApp.sUserObject.reward();
AccountInfo.saveAccount(activity, MyApp.sUserObject);
me.setType(Maopao.Like_user.Type.Reward);
maopaoData.reward_users.add(0, me);
dialog.dismiss();
if (adapter != null) {
adapter.notifyDataSetChanged();
}
} else if (code == 1401) {
mNeedPassword = true;
editLayout.setVisibility(View.VISIBLE);
} else if (2900 <= code && response.has("msg")) {
editLayout.setVisibility(View.GONE);
rewardButton.setVisibility(View.GONE);
cannotRewardLayout.setVisibility(View.VISIBLE);
JSONObject jsonMsg = response.optJSONObject("msg");
String rewardFailString = "";
if (jsonMsg != null && jsonMsg.length() > 0) {
Iterator<String> iterator = jsonMsg.keys();
String key = iterator.next();
rewardFailString = jsonMsg.optString(key, "打赏失败");
cannotRewardLayout.setText(rewardFailString);
}
if (rewardFailString.contains("验证了手机才能打赏")) { // 自己的手机未验证
cannotRewardLayout.setOnClickListener(v1 -> {
ValidePhoneActivity_.intent(activity).start();
dialog.dismiss();
});
}
} else {
activity.showErrorMsg(code, response);
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
if (!dialog.isShowing()) {
return;
}
activity.showMiddleToast("打赏失败");
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
if (!dialog.isShowing()) {
return;
}
activity.showMiddleToast("打赏失败");
}
});
}
});
root.findViewById(R.id.closeDialog).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
AsyncHttpClient client = MyAsyncHttpClient.createClient(activity);
String urlBalance = Global.HOST_API + "/point/balance";
client.get(activity, urlBalance, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
if (!dialog.isShowing()) {
return;
}
int code = response.optInt("code");
if (code == 0) {
double points = response.optJSONObject("data").optDouble("point_left");
myPoints.setVisibility(View.VISIBLE);
myPoints.setText(Html.fromHtml(String.format(MY_POINT_FORMAT, points)));
} else {
activity.showErrorMsg(code, response);
}
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
if (!dialog.isShowing()) {
return;
}
activity.showMiddleToast("获取码币余额失败");
}
});
}
}
protected void popComment(View v) {
EditText comment = mEnterLayout.getEditText();
Object data = v.getTag();
Maopao.Comment commentObject = null;
if (data instanceof Maopao.Comment) {
commentObject = (Maopao.Comment) v.getTag();
comment.setHint("回复 " + commentObject.owner.name);
comment.setTag(commentObject);
} else if (data instanceof Maopao.MaopaoObject) {
commentObject = new Maopao.Comment((Maopao.MaopaoObject) data);
comment.setHint("评论冒泡");
comment.setTag(commentObject);
} else {
data = v.getTag(TAG_COMMENT);
if (data instanceof Maopao.Comment) {
commentObject = (Maopao.Comment) data;
comment.setHint("回复 " + commentObject.owner.name);
comment.setTag(commentObject);
}
}
mEnterLayout.show();
mEnterLayout.restoreLoad(commentObject);
Object tag1 = v.getTag(R.id.likeBtn);
int itemLocation[] = new int[2];
v.getLocationOnScreen(itemLocation);
int itemHeight = v.getHeight();
int listLocation[] = new int[2];
listView.getLocationOnScreen(listLocation);
int listHeight = listView.getHeight();
oldListHigh = listHeight;
if (tag1 == null) {
needScrollY = (itemLocation[1] + itemHeight) - (listLocation[1] + listHeight);
} else {
needScrollY = (itemLocation[1] + itemHeight + commonEnterRoot.getHeight()) - (listLocation[1] + listHeight);
}
cal1 = 0;
comment.requestFocus();
mEnterLayout.showSystemInput(true);
}
protected BaseAdapter mAdapter = new BaseAdapter() {
final int[] commentsId = new int[]{
R.id.comment0,
R.id.comment1,
R.id.comment2,
R.id.comment3,
R.id.comment4,
};
protected View.OnClickListener mOnClickMaopaoItem = new View.OnClickListener() {
@Override
public void onClick(View v) {
Maopao.MaopaoObject data = (Maopao.MaopaoObject) v.getTag();
Fragment parent = getParentFragment();
MaopaoDetailActivity_
.intent(parent != null ? parent : MaopaoListBaseFragment.this)
.mMaopaoObject(data)
.startForResult(RESULT_EDIT_MAOPAO);
}
};
ClickSmallImage onClickImage = new ClickSmallImage(MaopaoListBaseFragment.this);
View.OnClickListener onClickMaopaoMore = new View.OnClickListener() {
@Override
public void onClick(View v) {
final int maopaoId = (int) v.getTag(TAG_MAOPAO_ID);
showDialog(new String[]{"删除冒泡"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showDialog("冒泡", "删除冒泡?", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String HOST_MAOPAO_DELETE = Global.HOST_API + "/tweet/%s";
deleteNetwork(String.format(HOST_MAOPAO_DELETE, maopaoId), TAG_DELETE_MAOPAO,
-1, maopaoId);
}
});
}
}
});
}
};
View.OnClickListener onClickComment = new View.OnClickListener() {
@Override
public void onClick(View v) {
final Maopao.Comment comment = (Maopao.Comment) v.getTag(TAG_COMMENT);
if (MyApp.sUserObject.id == (comment.owner_id)) {
showDialog("冒泡", "删除评论?", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final String URI_COMMENT_DELETE = Global.HOST_API + "/tweet/%d/comment/%d";
deleteNetwork(String.format(URI_COMMENT_DELETE, comment.tweet_id, comment.id), TAG_DELETE_MAOPAO_COMMENT, -1, comment);
}
});
} else {
popComment(v);
}
}
};
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
void action_share_third(Maopao.MaopaoObject mMaopaoObject) {
mEnterLayout.hideKeyboard();
CustomShareBoard.ShareData shareData = new CustomShareBoard.ShareData(mMaopaoObject);
CustomShareBoard shareBoard = new CustomShareBoard(getActivity(), shareData);
shareBoard.showAtLocation(getActivity().getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.fragment_maopao_list_item, parent, false);
holder.maopaoItemTop = convertView.findViewById(R.id.maopao_item_top);
holder.maopaoItem = convertView.findViewById(R.id.MaopaoItem);
holder.maopaoItem.setOnClickListener(mOnClickMaopaoItem);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.icon.setOnClickListener(mOnClickUser);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.name.setOnClickListener(mOnClickUser);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.contentArea = new ContentArea(convertView, mOnClickMaopaoItem, onClickImage, myImageGetter, getImageLoad(), mPxImageWidth);
holder.commentLikeArea = convertView.findViewById(R.id.commentLikeArea);
holder.likeUsersArea = new LikeUsersArea(convertView, MaopaoListBaseFragment.this, getImageLoad(), mOnClickUser);
holder.location = (TextView) convertView.findViewById(R.id.location);
holder.photoType = (TextView) convertView.findViewById(R.id.photoType);
holder.likeBtn = (CheckBox) convertView.findViewById(R.id.likeBtn);
holder.commentBtn = (TextView) convertView.findViewById(R.id.commentBtn);
holder.reward = (TextView) convertView.findViewById(R.id.rewardCount);
holder.likeBtn.setTag(R.id.likeBtn, holder);
holder.maopaoGoodView = convertView.findViewById(R.id.maopaoGood);
holder.likeAreaDivide = convertView.findViewById(R.id.likeAreaDivide);
holder.commentBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popComment(v);
}
});
holder.reward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popReward((BaseActivity) getActivity(), v, mAdapter);
}
});
holder.shareBtn = convertView.findViewById(R.id.shareBtn);
holder.shareBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Object item = v.getTag();
if (item instanceof Maopao.MaopaoObject) {
action_share_third((Maopao.MaopaoObject) item);
}
}
});
holder.maopaoDelete = convertView.findViewById(R.id.deleteButton);
holder.maopaoDelete.setOnClickListener(onClickDeleteMaopao);
holder.commentArea = new CommentArea(convertView, onClickComment, myImageGetter);
View[] divides = new View[commentsId.length];
for (int i = 0; i < commentsId.length; ++i) {
divides[i] = convertView.findViewById(commentsId[i]).findViewById(R.id.commentTopDivider);
}
holder.divides = divides;
convertView.setTag(R.id.MaopaoItem, holder);
} else {
holder = (ViewHolder) convertView.getTag(R.id.MaopaoItem);
}
final Maopao.MaopaoObject data = (Maopao.MaopaoObject) getItem(position);
holder.likeUsersArea.likeUsersLayout.setTag(TAG_MAOPAO, data);
holder.likeUsersArea.displayLikeUser();
holder.commentBtn.setText(String.valueOf(data.comments));
holder.reward.setText(String.valueOf(data.rewards));
Drawable rewardIcon = getResources().getDrawable(data.rewarded ?
R.drawable.maopao_extra_rewarded : R.drawable.maopao_extra_reward);
rewardIcon.setBounds(0, 0, rewardIcon.getIntrinsicWidth(), rewardIcon.getIntrinsicHeight());
holder.reward.setCompoundDrawables(rewardIcon,
null, null, null);
holder.reward.setTag(data);
if (data.likes > 0 || data.rewards > 0 || data.comments > 0) {
holder.commentLikeArea.setVisibility(View.VISIBLE);
} else {
holder.commentLikeArea.setVisibility(View.GONE);
}
if (position == 0 && mIsToMaopaoTopic) {
holder.maopaoItemTop.setVisibility(View.VISIBLE);
} else {
holder.maopaoItemTop.setVisibility(View.GONE);
}
MaopaoLocationArea.bind(holder.location, data);
if (!data.device.isEmpty()) {
String device = String.format("来自 %s", data.device);
holder.photoType.setVisibility(View.VISIBLE);
holder.photoType.setText(device);
} else {
holder.photoType.setVisibility(View.GONE);
}
iconfromNetwork(holder.icon, data.owner.avatar);
holder.icon.setTag(data.owner.global_key);
holder.name.setText(data.owner.name);
holder.name.setTag(data.owner.global_key);
holder.maopaoItem.setTag(data);
holder.contentArea.setData(data);
holder.time.setText(Global.dayToNow(data.created_at));
if (data.owner_id == (MyApp.sUserObject.id)) {
holder.maopaoDelete.setVisibility(View.VISIBLE);
holder.maopaoDelete.setTag(TAG_MAOPAO_ID, data.id);
} else {
holder.maopaoDelete.setVisibility(View.INVISIBLE);
}
holder.likeBtn.setOnCheckedChangeListener(null);
holder.likeBtn.setChecked(data.liked);
holder.likeBtn.setText(String.valueOf(data.likes));
holder.likeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean like = ((CheckBox) v).isChecked();
if (like) {
MaopaoLikeAnimation.playAnimation(holder.maopaoGoodView, v);
}
String type = like ? "like" : "unlike";
String uri = String.format(HOST_GOOD, data.id, type);
v.setTag(data);
// postNetwork(uri, new RequestParams(), HOST_GOOD, 0, data);
MyAsyncHttpClient.post(getActivity(), uri, new RequestParams(), new MyJsonResponse(getActivity()) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
data.liked = !data.liked;
if (data.liked) {
Maopao.Like_user like_user = new Maopao.Like_user(MyApp.sUserObject);
data.like_users.add(0, like_user);
++data.likes;
} else {
for (int j = 0; j < data.like_users.size(); ++j) {
if (data.like_users.get(j).global_key.equals(MyApp.sUserObject.global_key)) {
data.like_users.remove(j);
--data.likes;
break;
}
}
}
mAdapter.notifyDataSetChanged();
}
@Override
public void onMyFailure(JSONObject response) {
super.onMyFailure(response);
mAdapter.notifyDataSetChanged();
}
});
}
});
holder.shareBtn.setTag(data);
if (data.likes > 0 || data.rewards > 0) {
holder.likeAreaDivide.setVisibility(data.comments > 0 ? View.VISIBLE : View.INVISIBLE);
}
holder.commentBtn.setTag(data);
holder.commentArea.displayContentData(data);
int commentCount = data.comment_list.size();
int needShow = commentCount - 1;
for (int i = 0; i < commentsId.length; ++i) {
if (i < needShow) {
holder.divides[i].setVisibility(View.VISIBLE);
} else {
holder.divides[i].setVisibility(View.INVISIBLE);
}
}
if (commentsId.length < data.comments) { // 评论数超过5时
holder.divides[commentsId.length - 1].setVisibility(View.VISIBLE);
}
if (mData.size() - position <= 1) {
if (!mNoMore) {
getNetwork(createUrl(), getMaopaoUrlFormat());
}
}
return convertView;
}
};
static class ViewHolder {
View maopaoItemTop;
View maopaoItem;
ImageView icon;
TextView name;
TextView time;
ContentArea contentArea;
// View maopaoDelete;
TextView photoType;
CheckBox likeBtn;
TextView commentBtn;
TextView reward;
View shareBtn;
LikeUsersArea likeUsersArea;
View commentLikeArea;
CommentArea commentArea;
View[] divides;
View likeAreaDivide;
TextView location;
View maopaoGoodView;
View maopaoDelete;
}
}