305 lines
14 KiB
Java
305 lines
14 KiB
Java
package com.gh.common.util;
|
|
|
|
import android.app.Dialog;
|
|
import android.content.Context;
|
|
import android.graphics.Color;
|
|
import android.net.Uri;
|
|
import android.support.v4.content.ContextCompat;
|
|
import android.text.TextUtils;
|
|
import android.view.View;
|
|
import android.view.Window;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
|
|
import com.gh.gamecenter.CommentDetailActivity;
|
|
import com.gh.gamecenter.MessageDetailActivity;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.adapter.OnCommentCallBackListener;
|
|
import com.gh.gamecenter.adapter.viewholder.CommentViewHolder;
|
|
import com.gh.gamecenter.entity.CommentEntity;
|
|
import com.gh.gamecenter.entity.UserDataEntity;
|
|
import com.gh.gamecenter.entity.UserInfoEntity;
|
|
import com.lightgame.utils.Utils;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
|
|
import retrofit2.HttpException;
|
|
|
|
/**
|
|
* Created by khy on 2017/3/22.
|
|
*/
|
|
public class CommentUtils {
|
|
|
|
public static void setCommentTime(TextView textView, long time) {
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
|
|
try {
|
|
long today = format.parse(format.format(new Date())).getTime();
|
|
long day = time * 1000;
|
|
if (day >= today && day < today + 86400 * 1000) {
|
|
long min = new Date().getTime() / 1000 - day / 1000;
|
|
int hour = (int) (min / (60 * 60));
|
|
if (hour == 0) {
|
|
if (min < 60) {
|
|
textView.setText("刚刚");
|
|
} else {
|
|
textView.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60)));
|
|
}
|
|
} else {
|
|
textView.setText(String.format(Locale.getDefault(), "%d小时前", hour));
|
|
}
|
|
} else if (day >= today - 86400 * 1000 && day < today) {
|
|
format.applyPattern("HH:mm");
|
|
textView.setText("昨天 ");
|
|
} else {
|
|
format.applyPattern("yyyy-MM-dd");
|
|
textView.setText(format.format(day));
|
|
}
|
|
} catch (ParseException e) {
|
|
e.printStackTrace();
|
|
format.applyPattern("yyyy-MM-dd");
|
|
textView.setText(format.format(time * 1000));
|
|
}
|
|
}
|
|
|
|
public static void showReportDialog(final CommentEntity commentEntity, final Context context,
|
|
final OnCommentCallBackListener listener, final String newsId) {
|
|
|
|
final Dialog dialog = new Dialog(context);
|
|
|
|
LinearLayout container = new LinearLayout(context);
|
|
container.setOrientation(LinearLayout.VERTICAL);
|
|
container.setBackgroundColor(Color.WHITE);
|
|
container.setPadding(0, DisplayUtils.dip2px(context, 12), 0, DisplayUtils.dip2px(context, 12));
|
|
|
|
List<String> dialogType = new ArrayList<>();
|
|
|
|
if (commentEntity.getUserData() == null || !commentEntity.getUserData().isCommentOwn()) {
|
|
dialogType.add("回复");
|
|
}
|
|
|
|
dialogType.add("复制");
|
|
dialogType.add("举报");
|
|
|
|
if (commentEntity.getParent() != null) {
|
|
dialogType.add("查看对话");
|
|
}
|
|
|
|
for (String s : dialogType) {
|
|
final TextView reportTv = new TextView(context);
|
|
reportTv.setText(s);
|
|
reportTv.setTextSize(17);
|
|
reportTv.setTextColor(ContextCompat.getColor(context, R.color.title));
|
|
reportTv.setBackgroundResource(R.drawable.textview_white_style);
|
|
int widthPixels = context.getResources().getDisplayMetrics().widthPixels;
|
|
reportTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9) / 10,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT));
|
|
reportTv.setPadding(DisplayUtils.dip2px(context, 20), DisplayUtils.dip2px(context, 12),
|
|
0, DisplayUtils.dip2px(context, 12));
|
|
container.addView(reportTv);
|
|
|
|
reportTv.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
dialog.cancel();
|
|
switch (reportTv.getText().toString()) {
|
|
case "回复":
|
|
CheckLoginUtils.checkLogin(context, new CheckLoginUtils.OnLoggenInListener() {
|
|
@Override
|
|
public void onLoggedIn() {
|
|
if (listener != null) {
|
|
listener.onCommentCallback(commentEntity);
|
|
} else if (!TextUtils.isEmpty(newsId)) {
|
|
context.startActivity(MessageDetailActivity.getMessageDetailIntent(context, commentEntity, newsId));
|
|
} else {
|
|
Utils.toast(context, "缺少关键属性");
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case "复制":
|
|
LibaoUtils.copyLink(commentEntity.getContent(), context);
|
|
break;
|
|
case "举报":
|
|
CheckLoginUtils.checkLogin(context, new CheckLoginUtils.OnLoggenInListener() {
|
|
@Override
|
|
public void onLoggedIn() {
|
|
showReportTypeDialog(commentEntity, context);
|
|
}
|
|
});
|
|
|
|
break;
|
|
case "查看对话":
|
|
context.startActivity(CommentDetailActivity.getCommentDetailIntent(context, commentEntity.getId()));
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
dialog.setContentView(container);
|
|
dialog.show();
|
|
|
|
}
|
|
|
|
private static void showReportTypeDialog(final CommentEntity commentEntity, final Context mContext) {
|
|
final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息",
|
|
"违法有害信息", "其它"};
|
|
int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
|
|
|
|
final Dialog reportTypeDialog = new Dialog(mContext);
|
|
LinearLayout container = new LinearLayout(mContext);
|
|
container.setOrientation(LinearLayout.VERTICAL);
|
|
container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
|
|
container.setBackgroundColor(Color.WHITE);
|
|
|
|
for (final String s : arrReportType) {
|
|
TextView reportTypeTv = new TextView(mContext);
|
|
reportTypeTv.setText(s);
|
|
reportTypeTv.setTextSize(17);
|
|
reportTypeTv.setTextColor(ContextCompat.getColor(mContext, R.color.title));
|
|
reportTypeTv.setBackgroundResource(R.drawable.textview_white_style);
|
|
reportTypeTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9) / 10,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT));
|
|
reportTypeTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
|
|
0, DisplayUtils.dip2px(mContext, 12));
|
|
container.addView(reportTypeTv);
|
|
|
|
reportTypeTv.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
JSONObject jsonObject = new JSONObject();
|
|
try {
|
|
jsonObject.put("comment_id", commentEntity.getId());
|
|
jsonObject.put("reason", s);
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
PostCommentUtils.addReportData(mContext, jsonObject.toString(),
|
|
new PostCommentUtils.PostCommentListener() {
|
|
@Override
|
|
public void postSuccess(JSONObject response) {
|
|
Utils.toast(mContext, "感谢您的举报");
|
|
}
|
|
|
|
@Override
|
|
public void postFailed(Throwable error) {
|
|
Utils.toast(mContext, "举报失败,请检查网络设置");
|
|
}
|
|
});
|
|
reportTypeDialog.cancel();
|
|
}
|
|
});
|
|
}
|
|
|
|
reportTypeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
reportTypeDialog.setContentView(container);
|
|
reportTypeDialog.show();
|
|
}
|
|
|
|
public static void postVote(final Context context, final CommentEntity commentEntity,
|
|
final TextView commentLikeCountTv, final ImageView commentLikeIv, final OnVoteListener listener) {
|
|
CheckLoginUtils.checkLogin(context, new CheckLoginUtils.OnLoggenInListener() {
|
|
@Override
|
|
public void onLoggedIn() {
|
|
if (commentLikeCountTv.getCurrentTextColor() == ContextCompat.getColor(context, R.color.theme)) {
|
|
Utils.toast(context, "已经点过赞啦!");
|
|
return;
|
|
}
|
|
commentEntity.setVote(commentEntity.getVote() + 1);
|
|
commentLikeCountTv.setTextColor(ContextCompat.getColor(context, R.color.theme));
|
|
commentLikeIv.setImageResource(R.drawable.ic_like_select);
|
|
commentLikeCountTv.setText(String.valueOf(commentEntity.getVote()));
|
|
commentLikeCountTv.setVisibility(View.VISIBLE);
|
|
|
|
PostCommentUtils.addCommentVoto(context, commentEntity.getId(),
|
|
new PostCommentUtils.PostCommentListener() {
|
|
@Override
|
|
public void postSuccess(JSONObject response) {
|
|
if (listener != null) {
|
|
listener.onVote();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void postFailed(Throwable e) {
|
|
|
|
commentEntity.setVote(commentEntity.getVote() - 1);
|
|
commentLikeCountTv.setTextColor(ContextCompat.getColor(context, R.color.hint));
|
|
commentLikeIv.setImageResource(R.drawable.ic_like_unselect);
|
|
commentLikeCountTv.setText(String.valueOf(commentEntity.getVote()));
|
|
if (commentEntity.getVote() == 0) {
|
|
commentLikeCountTv.setVisibility(View.GONE);
|
|
} else {
|
|
commentLikeCountTv.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
if (e instanceof HttpException) {
|
|
HttpException exception = (HttpException) e;
|
|
if (exception.code() == 403) {
|
|
try {
|
|
String detail = new JSONObject(exception.response().errorBody().string()).getString("detail");
|
|
if (detail.equals("voted")) {
|
|
Utils.toast(context, "已经点过赞啦!");
|
|
}
|
|
} catch (Exception ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
Utils.toast(context, "网络异常,点赞失败");
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// 设置评论item 用户相关的view(点赞/头像/用户名)
|
|
public static void setCommentUserView(Context mContext, CommentViewHolder holder, CommentEntity entity) {
|
|
UserDataEntity userDataEntity = entity.getUserData();
|
|
holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.hint));
|
|
holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect);
|
|
|
|
if (entity.getVote() == 0) {
|
|
holder.commentLikeCountTv.setVisibility(View.GONE);
|
|
} else { // 检查是否已点赞
|
|
if (userDataEntity != null && userDataEntity.isCommentVoted()) {
|
|
holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.theme));
|
|
holder.commentLikeIv.setImageResource(R.drawable.ic_like_select);
|
|
}
|
|
holder.commentLikeCountTv.setVisibility(View.VISIBLE);
|
|
holder.commentLikeCountTv.setText(String.valueOf(entity.getVote()));
|
|
}
|
|
|
|
//检查是否是自身评论
|
|
UserInfoEntity userInfo = LoginUtils.getUserInfo(mContext);
|
|
if (userDataEntity != null && userDataEntity.isCommentOwn() && userInfo != null) {
|
|
holder.commentUserNameTv.setText(userInfo.getName());
|
|
ImageUtils.Companion.display(holder.commentUserIconDv, userInfo.getIcon());
|
|
} else {
|
|
holder.commentUserNameTv.setText(entity.getUser().getName());
|
|
if (TextUtils.isEmpty(entity.getUser().getIcon())) {
|
|
holder.commentUserIconDv.setImageURI(Uri.parse("res:///" + R.drawable.user_default_icon_comment));
|
|
} else {
|
|
ImageUtils.Companion.display(holder.commentUserIconDv, entity.getUser().getIcon());
|
|
}
|
|
}
|
|
}
|
|
|
|
public interface OnVoteListener {
|
|
void onVote();
|
|
}
|
|
}
|