1. 移除远古时代的光环3.0数据同步代码 2. 清理部分无用的弹窗构建代码 3. 将默认头像修改完全放置到网络数据中 (原来是本地 drawable,但提交固定 url 的形式) 4. 移除部分没有引用的代码 5. 合并重复的日志类 6. 移除已经没有入口的玩过的游戏 activity 7. 整理部分含有无用入参的方法 8. 重命名部分不合规范的命名
203 lines
8.5 KiB
Java
203 lines
8.5 KiB
Java
package com.gh.common.util;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Color;
|
|
import android.graphics.drawable.GradientDrawable;
|
|
import android.text.TextUtils;
|
|
import android.util.TypedValue;
|
|
import android.view.View;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.LinearLayout.LayoutParams;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
import com.gh.gamecenter.common.utils.ExtensionsKt;
|
|
import com.gh.gamecenter.core.AppExecutor;
|
|
import com.gh.gamecenter.common.view.DrawableView;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.core.utils.DisplayUtils;
|
|
import com.gh.gamecenter.feature.entity.TagStyleEntity;
|
|
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.TimeZone;
|
|
|
|
/**
|
|
* 设置列表中game item视图上的工具类
|
|
*/
|
|
public class GameViewUtils {
|
|
|
|
public static void setLabelList(Context context, LinearLayout labelLayout, List<TagStyleEntity> tagStyle) {
|
|
setLabelList(context, labelLayout, tagStyle, 8);
|
|
}
|
|
|
|
public static void setLabelList(Context context, LinearLayout labelLayout, List<TagStyleEntity> tagEntityList, int margin) {
|
|
int childTvCount = labelLayout.getChildCount();
|
|
|
|
for (int k = 0; k < childTvCount; k++) {
|
|
labelLayout.getChildAt(k).setVisibility(View.GONE);
|
|
}
|
|
|
|
if (tagEntityList == null || tagEntityList.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
for (int i = 0, size = tagEntityList.size(); i < size; i++) {
|
|
TextView tagTv;
|
|
TagStyleEntity tagEntity = tagEntityList.get(i);
|
|
int marginRight = i == size - 1 ? 0 : DisplayUtils.dip2px(context, margin);
|
|
|
|
if (i < childTvCount) {
|
|
tagTv = (TextView) labelLayout.getChildAt(i);
|
|
updateTagStyle(context, tagTv, tagEntity, marginRight);
|
|
} else {
|
|
AppExecutor.getLightWeightIoExecutor().execute(() -> {
|
|
TextView tv = getNewGameTagView(context, tagEntity, marginRight);
|
|
AppExecutor.getUiExecutor().execute(() -> {
|
|
// 快速刷新列表会出现重复标签被添加到布局中的问题,这里在实际执行代码前再检查一次数量
|
|
if (labelLayout.getChildCount() >= tagEntityList.size()) return;
|
|
|
|
labelLayout.addView(tv);
|
|
});
|
|
});
|
|
}
|
|
|
|
if (i >= 2) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 新的游戏标签样式 version>=4.0.0
|
|
private static TextView getNewGameTagView(Context context, TagStyleEntity tagEntity, int rightMargin) {
|
|
// 参数不全,用旧样式实现
|
|
if (TextUtils.isEmpty(tagEntity.getBackground())) {
|
|
return getGameTagView(context, tagEntity.getName(), rightMargin, "type", tagEntity);
|
|
}
|
|
|
|
TextView tag = new TextView(context);
|
|
updateTagStyle(context, tag, tagEntity, rightMargin);
|
|
return tag;
|
|
}
|
|
|
|
private static void updateTagStyle(Context context, TextView textView, TagStyleEntity tagEntity, int rightMargin) {
|
|
textView.setVisibility(View.VISIBLE);
|
|
|
|
// 同样的内容不用再更新
|
|
if (textView.getText() == tagEntity.getName()) return;
|
|
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
|
lparams.rightMargin = rightMargin;
|
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
|
|
textView.setSingleLine(true);
|
|
textView.setText(tagEntity.getName());
|
|
textView.setLayoutParams(lparams);
|
|
textView.setPadding(
|
|
DisplayUtils.dip2px(context, 4),
|
|
0,
|
|
DisplayUtils.dip2px(context, 4),
|
|
DisplayUtils.dip2px(context, 1));
|
|
|
|
textView.setTextColor(ExtensionsKt.hexStringToIntColor("#" + tagEntity.getColor(), Color.WHITE));
|
|
textView.setBackground(DrawableView.getServerDrawable(ExtensionsKt.hexStringToIntColor("#" + tagEntity.getBackground(), Color.WHITE)));
|
|
}
|
|
|
|
private static TextView getGameTagView(Context context, String tagStr, int rightMargin, String tagType, TagStyleEntity tagEntity) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
|
lparams.rightMargin = rightMargin;
|
|
TextView tag = new TextView(context);
|
|
tag.setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
|
|
tag.setSingleLine(true);
|
|
tag.setText(tagStr);
|
|
if ("官方版".equals(tagStr) || "已关注".equals(tagStr)) {
|
|
tag.setBackgroundResource(R.drawable.border_green_bg);
|
|
tag.setTextColor(ContextCompat.getColor(context, R.color.tag_green));
|
|
} else {
|
|
String colorStr;
|
|
|
|
if (!TextUtils.isEmpty(tagType) && "type".equals(tagType) && tagEntity != null) { // 游戏标签
|
|
colorStr = "#" + tagEntity.getColor();
|
|
GradientDrawable gradientDrawable = new GradientDrawable();
|
|
|
|
if ("border".equals(tagEntity.getStyle())) {
|
|
gradientDrawable.setColor(Color.TRANSPARENT);
|
|
gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1f), ExtensionsKt.hexStringToIntColor(colorStr, Color.WHITE));
|
|
tag.setTextColor(ExtensionsKt.hexStringToIntColor(colorStr, Color.WHITE));
|
|
} else {
|
|
gradientDrawable.setColor(ExtensionsKt.hexStringToIntColor(colorStr, Color.WHITE));
|
|
gradientDrawable.setShape(GradientDrawable.RECTANGLE);
|
|
tag.setTextColor(Color.WHITE);
|
|
}
|
|
gradientDrawable.setCornerRadius(DisplayUtils.dip2px(3F));
|
|
tag.setBackgroundDrawable(gradientDrawable);
|
|
} else {
|
|
colorStr = TagUtils.getInstance(context).getColor(tagStr);
|
|
if (colorStr == null) {
|
|
return null;
|
|
}
|
|
int color = ExtensionsKt.hexStringToIntColor(colorStr, Color.WHITE);
|
|
GradientDrawable gradientDrawable = new GradientDrawable();
|
|
gradientDrawable.setColor(Color.TRANSPARENT);
|
|
gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1f), color);
|
|
gradientDrawable.setCornerRadius(DisplayUtils.dip2px(3F));
|
|
tag.setBackgroundDrawable(gradientDrawable);
|
|
tag.setTextColor(color);
|
|
}
|
|
}
|
|
tag.setLayoutParams(lparams);
|
|
tag.setPadding(DisplayUtils.dip2px(context, 4),
|
|
0,
|
|
DisplayUtils.dip2px(context, 4),
|
|
DisplayUtils.dip2px(context, 1));
|
|
return tag;
|
|
}
|
|
|
|
public static String getGameTestDate(long testTime) {
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
|
format.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
|
|
|
|
String testDate;
|
|
try {
|
|
long today = format.parse(format.format(new Date())).getTime();
|
|
long day = Long.parseLong(testTime + "000");
|
|
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm", Locale.CHINA);
|
|
String time = timeFormat.format(day);
|
|
|
|
if (day >= today && day < today + 86400 * 1000) {
|
|
testDate = "今天 " + time;
|
|
} else if (day >= today + 86400 * 1000
|
|
&& day < today + 86400 * 1000 * 2) {
|
|
testDate = "明天 " + time;
|
|
} else if (day >= today + 86400 * 1000 * 2
|
|
&& day < today + 86400 * 1000 * 3) {
|
|
testDate = "后天 " + time;
|
|
} else if (day >= today - 86400 * 1000 && day < today) {
|
|
testDate = "昨天 " + time;
|
|
} else {
|
|
testDate = new SimpleDateFormat("MM-dd HH:mm", Locale.CHINA).format(day);
|
|
}
|
|
return testDate;
|
|
} catch (ParseException e) {
|
|
e.printStackTrace();
|
|
long day = Long.parseLong(testTime + "000");
|
|
Calendar calendar = Calendar.getInstance(TimeZone
|
|
.getTimeZone("Asia/Shanghai"));
|
|
calendar.setTimeInMillis(day);
|
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
|
format = new SimpleDateFormat("MM-dd", Locale.CHINA);
|
|
testDate = format.format(day) + " " + hour + "点";
|
|
return testDate;
|
|
}
|
|
|
|
}
|
|
|
|
}
|