664 lines
31 KiB
Java
664 lines
31 KiB
Java
package com.gh.common.databind;
|
||
|
||
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_SELLING_POINT;
|
||
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TEST;
|
||
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TYPE;
|
||
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_UPDATE;
|
||
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.graphics.Color;
|
||
import android.text.Spannable;
|
||
import android.text.SpannableString;
|
||
import android.text.TextUtils;
|
||
import android.text.style.ForegroundColorSpan;
|
||
import android.view.View;
|
||
import android.view.ViewParent;
|
||
import android.widget.LinearLayout;
|
||
import android.widget.TextView;
|
||
|
||
import androidx.annotation.Nullable;
|
||
import androidx.appcompat.app.AppCompatActivity;
|
||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||
import androidx.constraintlayout.widget.ConstraintSet;
|
||
|
||
import com.gh.common.chain.BrowserInstallHandler;
|
||
import com.gh.common.chain.CheckDownloadHandler;
|
||
import com.gh.common.chain.CheckStoragePermissionHandler;
|
||
import com.gh.common.chain.DownloadChainBuilder;
|
||
import com.gh.common.chain.DownloadChainHandler;
|
||
import com.gh.common.chain.DownloadDialogHelperHandler;
|
||
import com.gh.common.chain.GamePermissionHandler;
|
||
import com.gh.common.chain.LandPageAddressHandler;
|
||
import com.gh.common.chain.OverseaDownloadHandler;
|
||
import com.gh.common.chain.PackageCheckHandler;
|
||
import com.gh.common.chain.UnsupportedFeatureHandler;
|
||
import com.gh.common.chain.ValidateVSpaceHandler;
|
||
import com.gh.common.chain.VersionNumberHandler;
|
||
import com.gh.common.filter.RegionSetting;
|
||
import com.gh.common.filter.RegionSettingHelper;
|
||
import com.gh.common.history.HistoryHelper;
|
||
import com.gh.common.repository.ReservationRepository;
|
||
import com.gh.common.simulator.SimulatorDownloadManager;
|
||
import com.gh.common.simulator.SimulatorGameManager;
|
||
import com.gh.common.util.CheckLoginUtils;
|
||
import com.gh.common.util.DialogUtils;
|
||
import com.gh.common.util.GameUtils;
|
||
import com.gh.common.util.GameViewUtils;
|
||
import com.gh.common.util.LogUtils;
|
||
import com.gh.common.util.PackageInstaller;
|
||
import com.gh.common.util.PackageLauncher;
|
||
import com.gh.common.util.PackageUtils;
|
||
import com.gh.common.util.ReservationHelper;
|
||
import com.gh.download.DownloadManager;
|
||
import com.gh.download.dialog.DownloadDialog;
|
||
import com.gh.download.server.BrowserInstallHelper;
|
||
import com.gh.gamecenter.DownloadManagerActivity;
|
||
import com.gh.gamecenter.R;
|
||
import com.gh.gamecenter.WebActivity;
|
||
import com.gh.gamecenter.common.databinding.LayoutGameItemSellingPointBinding;
|
||
import com.gh.gamecenter.common.entity.LinkEntity;
|
||
import com.gh.gamecenter.common.utils.DarkModeUtils;
|
||
import com.gh.gamecenter.common.utils.ExtensionsKt;
|
||
import com.gh.gamecenter.common.utils.FileUtils;
|
||
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
|
||
import com.gh.gamecenter.common.utils.SensorsBridge;
|
||
import com.gh.gamecenter.core.utils.MtaHelper;
|
||
import com.gh.gamecenter.core.utils.TimeUtils;
|
||
import com.gh.gamecenter.core.utils.ToastUtils;
|
||
import com.gh.gamecenter.feature.entity.ApkEntity;
|
||
import com.gh.gamecenter.feature.entity.GameEntity;
|
||
import com.gh.gamecenter.feature.entity.PluginLocation;
|
||
import com.gh.gamecenter.feature.entity.TagStyleEntity;
|
||
import com.gh.gamecenter.feature.entity.TestEntity;
|
||
import com.gh.gamecenter.feature.exposure.ExposureEvent;
|
||
import com.gh.gamecenter.feature.utils.PlatformUtils;
|
||
import com.gh.gamecenter.feature.view.DownloadButton;
|
||
import com.gh.gamecenter.feature.view.GameIconView;
|
||
import com.gh.gamecenter.gamedetail.dialog.GamePermissionDialogFragment;
|
||
import com.gh.gamecenter.manager.PackagesManager;
|
||
import com.gh.vspace.VHelper;
|
||
import com.lightgame.download.DownloadEntity;
|
||
import com.lightgame.utils.Utils;
|
||
|
||
import java.io.File;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
import kotlin.collections.CollectionsKt;
|
||
|
||
/**
|
||
* Created by khy on 12/02/18.
|
||
*/
|
||
public class BindingAdapters {
|
||
|
||
public static void setMessageUnread(TextView view, int unreadCount) {
|
||
if (unreadCount < 100) {
|
||
view.setText(String.valueOf(unreadCount));
|
||
} else {
|
||
view.setText("99+");
|
||
}
|
||
}
|
||
|
||
public static void setGame(View view, GameEntity gameEntity) {
|
||
if (gameEntity != null && view instanceof GameIconView) {
|
||
((GameIconView) view).displayGameIcon(gameEntity);
|
||
}
|
||
}
|
||
|
||
public static void setDownloadButton(DownloadButton progressBar,
|
||
GameEntity gameEntity,
|
||
ExposureEvent traceEvent,
|
||
@Nullable View.OnClickListener clickCallBack,
|
||
@Nullable String entrance,
|
||
@Nullable String location) {
|
||
setDownloadButton(progressBar, gameEntity, traceEvent, clickCallBack, entrance, location, "其他");
|
||
}
|
||
|
||
// 大图下的进度条
|
||
public static void setDownloadButton(DownloadButton progressBar,
|
||
GameEntity gameEntity,
|
||
ExposureEvent traceEvent,
|
||
@Nullable View.OnClickListener clickCallBack,
|
||
@Nullable String entrance,
|
||
@Nullable String location,
|
||
String sourceEntrance) {
|
||
|
||
// 恢复DialogFragment
|
||
restoreDialogFragment(progressBar);
|
||
|
||
// 判断是否显示按钮
|
||
if (gameEntity != null
|
||
&& !"光环助手".equals(gameEntity.getName())) {
|
||
progressBar.setVisibility(View.VISIBLE);
|
||
} else {
|
||
progressBar.setVisibility(View.GONE);
|
||
return;
|
||
}
|
||
|
||
// 点击事件
|
||
progressBar.setOnClickListener(v -> {
|
||
if (clickCallBack != null) clickCallBack.onClick(v);
|
||
switch (progressBar.getButtonStyle()) {
|
||
case DOWNLOADING_PLUGIN:
|
||
case DOWNLOADING_NORMAL:
|
||
Intent intent = DownloadManagerActivity.getDownloadMangerIntent(v.getContext(),
|
||
gameEntity.getApk().isEmpty() ? "" : gameEntity.getApk().get(0).getUrl(), entrance);
|
||
v.getContext().startActivity(intent);
|
||
break;
|
||
case NONE:
|
||
Utils.toast(v.getContext(), "该游戏已关闭下载");
|
||
break;
|
||
case NORMAL:
|
||
case PLUGIN:
|
||
final RegionSetting.GameH5Download gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(gameEntity.getId());
|
||
if (gameH5Download != null) {
|
||
DialogUtils.showGameH5DownloadDialog(v.getContext(), gameEntity, gameH5Download);
|
||
} else {
|
||
if (gameEntity.getApk().size() == 1) {
|
||
ApkEntity apk = gameEntity.getApk().get(0);
|
||
DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apk.getUrl());
|
||
if (gameEntity.getSimulator() != null) {
|
||
boolean isInstalled = PackageUtils.isInstalledFromAllPackage(v.getContext(), gameEntity.getSimulator().getApk().getPackageName());
|
||
if (downloadEntity != null && SimulatorGameManager.isSimulatorGame(gameEntity) && !isInstalled) {
|
||
SimulatorDownloadManager.getInstance().showDownloadDialog(v.getContext(), gameEntity.getSimulator(),
|
||
SimulatorDownloadManager.SimulatorLocation.LAUNCH, gameEntity.getId(), gameEntity.getName(), gameEntity.getCategoryChinese(), null);
|
||
return;
|
||
}
|
||
}
|
||
|
||
DownloadChainBuilder builder = new DownloadChainBuilder();
|
||
builder.addHandler(new UnsupportedFeatureHandler());
|
||
builder.addHandler(new GamePermissionHandler());
|
||
builder.addHandler(new CheckStoragePermissionHandler());
|
||
builder.addHandler(new ValidateVSpaceHandler());
|
||
builder.addHandler(new BrowserInstallHandler());
|
||
builder.addHandler(new PackageCheckHandler());
|
||
builder.addHandler(new DownloadDialogHelperHandler());
|
||
builder.addHandler(new VersionNumberHandler());
|
||
builder.addHandler(new LandPageAddressHandler());
|
||
builder.addHandler(new OverseaDownloadHandler());
|
||
builder.addHandler(new CheckDownloadHandler());
|
||
|
||
builder.setProcessEndCallback(gameEntity.getId(), (asVGame, isSubscribe) -> {
|
||
download(v.getContext(),
|
||
progressBar,
|
||
gameEntity,
|
||
traceEvent,
|
||
asVGame,
|
||
(boolean) isSubscribe,
|
||
entrance,
|
||
location);
|
||
return null;
|
||
});
|
||
final DownloadChainHandler chainHandler = builder.buildHandlerChain();
|
||
if (chainHandler != null) {
|
||
chainHandler.handleRequest(
|
||
v.getContext(),
|
||
gameEntity,
|
||
GameUtils.shouldPerformAsVGame(gameEntity)
|
||
);
|
||
}
|
||
} else {
|
||
DownloadChainBuilder builder = new DownloadChainBuilder();
|
||
builder.addHandler(new UnsupportedFeatureHandler());
|
||
builder.addHandler(new GamePermissionHandler());
|
||
builder.addHandler(new VersionNumberHandler());
|
||
|
||
builder.setProcessEndCallback(gameEntity.getId(), (asVGame, isSubscribe) -> {
|
||
DownloadDialog.showDownloadDialog(
|
||
v.getContext(),
|
||
gameEntity,
|
||
traceEvent,
|
||
entrance,
|
||
location + ":" + gameEntity.getName(),
|
||
null);
|
||
return null;
|
||
});
|
||
final DownloadChainHandler chainHandler = builder.buildHandlerChain();
|
||
if (chainHandler != null) {
|
||
chainHandler.handleRequest(
|
||
v.getContext(),
|
||
gameEntity,
|
||
GameUtils.shouldPerformAsVGame(gameEntity)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case LAUNCH_OR_OPEN:
|
||
if (gameEntity.getApk().size() == 1) {
|
||
//启动模拟器游戏
|
||
if (SimulatorGameManager.isSimulatorGame(gameEntity)) {
|
||
DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(gameEntity.getApk().isEmpty() ? "" : gameEntity.getApk().get(0).getUrl());
|
||
if (downloadEntity != null) {
|
||
File file = new File(downloadEntity.getPath());
|
||
if (!file.exists()) {
|
||
download(v.getContext(),
|
||
progressBar,
|
||
gameEntity,
|
||
traceEvent,
|
||
false,
|
||
false,
|
||
entrance,
|
||
location);
|
||
return;
|
||
}
|
||
|
||
SimulatorGameManager.launchSimulatorGame(downloadEntity, gameEntity);
|
||
}
|
||
return;
|
||
}
|
||
|
||
PackageLauncher.launch(v.getContext(), gameEntity, null);
|
||
} else {
|
||
DownloadDialog.showDownloadDialog(
|
||
v.getContext(),
|
||
gameEntity,
|
||
traceEvent,
|
||
entrance,
|
||
location + ":" + gameEntity.getName(),
|
||
null);
|
||
}
|
||
break;
|
||
case INSTALL_PLUGIN:
|
||
case INSTALL_NORMAL:
|
||
if (gameEntity.getApk().size() == 1) {
|
||
|
||
NewFlatLogUtils.INSTANCE.logGameInstall(
|
||
gameEntity.getId(),
|
||
gameEntity.getName() != null ? gameEntity.getName() : "",
|
||
"主动安装"
|
||
);
|
||
|
||
SensorsBridge.trackInstallGameClick(
|
||
gameEntity.getId(),
|
||
gameEntity.getName() != null ? gameEntity.getName() : "",
|
||
"主动安装",
|
||
gameEntity.isDspGame(),
|
||
gameEntity.getDspAdId()
|
||
);
|
||
|
||
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity);
|
||
|
||
if (downloadEntity != null) {
|
||
if (ExtensionsKt.isLocalDownloadInDualDownloadMode(downloadEntity)) {
|
||
PackageInstaller.install(v.getContext(), downloadEntity);
|
||
} else {
|
||
VHelper.installOrLaunch(v.getContext(), gameEntity, null);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case RESERVABLE:
|
||
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
|
||
CheckLoginUtils.checkLogin(progressBar.getContext(), "", () -> {
|
||
ReservationHelper.reserve(v.getContext(), gameEntity, sourceEntrance, () -> {
|
||
LogUtils.logReservation(gameEntity, traceEvent);
|
||
updateReservation(progressBar, gameEntity);
|
||
});
|
||
});
|
||
});
|
||
break;
|
||
case RESERVED:
|
||
ReservationHelper.showCancelReservationDialog(progressBar.getContext(), gameEntity, () -> {
|
||
ReservationHelper.cancelReservation(gameEntity, () -> {
|
||
updateReservation(progressBar, gameEntity);
|
||
});
|
||
});
|
||
break;
|
||
case H5_GAME:
|
||
LinkEntity linkEntity = gameEntity.getH5Link();
|
||
boolean isPlay = "play".equals(linkEntity.getType()); // 是否为开始玩
|
||
MtaHelper.onEvent("H5页面", "入口", "列表页_" + gameEntity.getName());
|
||
|
||
if (isPlay) {
|
||
HistoryHelper.insertGameEntity(gameEntity);
|
||
}
|
||
|
||
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
|
||
Intent i = new Intent(WebActivity.getIntentForWebGame(progressBar.getContext(), linkEntity.getLink(), gameEntity.getName(), isPlay, linkEntity.getCloseButton()));
|
||
progressBar.getContext().startActivity(i);
|
||
});
|
||
break;
|
||
case UPDATING:
|
||
Utils.toast(progressBar.getContext(), "正在加急更新版本,敬请后续留意");
|
||
break;
|
||
}
|
||
});
|
||
|
||
// 显示预约
|
||
if (gameEntity.isReservable()) {
|
||
if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.getId())) {
|
||
progressBar.setText("预约");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVABLE);
|
||
} else {
|
||
progressBar.setText("已预约");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVED);
|
||
}
|
||
return;
|
||
}
|
||
|
||
// 显示下载按钮状态
|
||
if (gameEntity.getApk().isEmpty() || gameEntity.getDownloadOffStatus() != null) {
|
||
LinkEntity h5LinkEntity = gameEntity.getH5Link();
|
||
String offStatus = gameEntity.getDownloadOffStatus();
|
||
if (h5LinkEntity != null) {
|
||
if ("play".equals(h5LinkEntity.getType())) {
|
||
progressBar.setText("开始玩");
|
||
} else {
|
||
progressBar.setText("查看");
|
||
}
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.H5_GAME);
|
||
} else {
|
||
if (("dialog".equals(offStatus) || "third_party".equals(offStatus))) {
|
||
progressBar.setText("查看");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE_WITH_HINT);
|
||
} else if ("updating".equals(offStatus)) {
|
||
progressBar.setText("更新中");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.UPDATING);
|
||
} else {
|
||
progressBar.setText("暂无");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE);
|
||
}
|
||
}
|
||
|
||
} else {
|
||
String status = GameUtils.getDownloadBtnText(progressBar.getContext(), gameEntity, true, false, PluginLocation.only_game);
|
||
switch (status) {
|
||
case "插件化":
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.PLUGIN);
|
||
break;
|
||
case "打开":
|
||
case "启动":
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.LAUNCH_OR_OPEN);
|
||
break;
|
||
default:
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.NORMAL);
|
||
break;
|
||
}
|
||
progressBar.setText(status);
|
||
}
|
||
|
||
// 显示下载过程状态
|
||
if (gameEntity.getApk().size() == 1) {
|
||
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity);
|
||
if (downloadEntity != null) {
|
||
progressBar.setProgress((int) (downloadEntity.getPercent() * 10));
|
||
switch (downloadEntity.getStatus()) {
|
||
case downloading:
|
||
case pause:
|
||
case timeout:
|
||
case neterror:
|
||
case diskisfull:
|
||
case diskioerror:
|
||
case waiting:
|
||
progressBar.setText(com.gh.gamecenter.feature.R.string.downloading);
|
||
if (downloadEntity.isPluggable() && PackagesManager.isInstalled(downloadEntity.getPackageName())) {
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN);
|
||
} else {
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_NORMAL);
|
||
}
|
||
break;
|
||
case done:
|
||
progressBar.setText(com.gh.gamecenter.feature.R.string.install);
|
||
if (downloadEntity.isPluggable()
|
||
&& PackagesManager.isInstalled(downloadEntity.getPackageName())) {
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_PLUGIN);
|
||
} else {
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_NORMAL);
|
||
}
|
||
break;
|
||
case cancel:
|
||
case hijack:
|
||
case notfound:
|
||
case uncertificated:
|
||
case unqualified:
|
||
case unavailable:
|
||
case banned:
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 当页面完全重建时,若存在重建的DialogFragment,则需要手动恢复该DialogFragment之前配置的回调(因为DialogFragment重建时只会从arguments中获取之前的配置内容,
|
||
* 而arguments无法传递回调),或者dismiss该DialogFragment
|
||
*/
|
||
private static void restoreDialogFragment(DownloadButton progressBar) {
|
||
GamePermissionDialogFragment gamePermissionDialogFragment =
|
||
((GamePermissionDialogFragment) ((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getName()));
|
||
if (gamePermissionDialogFragment != null) {
|
||
gamePermissionDialogFragment.dismissAllowingStateLoss();
|
||
}
|
||
}
|
||
|
||
private static void updateReservation(DownloadButton progressBar, GameEntity gameEntity) {
|
||
// 显示预约
|
||
if (gameEntity.isReservable()) {
|
||
if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.getId())) {
|
||
progressBar.setText("预约");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVABLE);
|
||
} else {
|
||
progressBar.setText("已预约");
|
||
progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVED);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// 开始下载
|
||
private static void download(Context context,
|
||
DownloadButton progressBar,
|
||
GameEntity gameEntity,
|
||
ExposureEvent traceEvent,
|
||
boolean asVGame,
|
||
boolean isSubscribe,
|
||
String entrance,
|
||
String location) {
|
||
if (BrowserInstallHelper.shouldAutoSwitchAssistantInstall(gameEntity)) {
|
||
ToastUtils.toast(context.getString(R.string.unsupported_browser_install_hint));
|
||
}
|
||
String buttonText = progressBar.getText();
|
||
ApkEntity apkEntity = CollectionsKt.firstOrNull(gameEntity.getApk());
|
||
String msg = FileUtils.isCanDownload(progressBar.getContext(), apkEntity == null ? "" : apkEntity.getSize());
|
||
if (apkEntity != null && TextUtils.isEmpty(msg)) {
|
||
DownloadManager.createDownload(progressBar.getContext(),
|
||
apkEntity,
|
||
gameEntity,
|
||
asVGame,
|
||
gameEntity.isDualBtnModeEnabled(),
|
||
entrance,
|
||
location + gameEntity.getName(),
|
||
isSubscribe,
|
||
traceEvent);
|
||
|
||
progressBar.setProgress(0);
|
||
progressBar.setButtonStyle(buttonText.contains("插件化") ?
|
||
DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN : DownloadButton.ButtonStyle.DOWNLOADING_NORMAL);
|
||
} else {
|
||
Utils.toast(progressBar.getContext(), msg);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 包含测试开服标签
|
||
*
|
||
* @param layout
|
||
* @param gameEntity
|
||
* @param subjectTag 默认为 “”,只有游戏专题可以配置subjectTag
|
||
*/
|
||
public static void setGameTags(LinearLayout layout, GameEntity gameEntity, String subjectTag) {
|
||
try {
|
||
if (layout.getVisibility() == View.GONE) return;
|
||
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
|
||
TestEntity test = gameEntity.getTest();
|
||
if (test != null && subjectTag.equals(SUBJECT_TAG_TEST)) {
|
||
// 显示开测表标签
|
||
TagStyleEntity typeTag = new TagStyleEntity();
|
||
boolean isDarkModeOn = DarkModeUtils.INSTANCE.isDarkModeOn(layout.getContext());
|
||
typeTag.setName(test.getType() != null ? test.getType() : "");
|
||
typeTag.setBackground("1AFFA142");
|
||
typeTag.setColor(isDarkModeOn ? "EB9238" : "FFA142");
|
||
tagStyle.add(typeTag);
|
||
|
||
TagStyleEntity timeTag = new TagStyleEntity();
|
||
if (test.getStartPending()) {
|
||
timeTag.setName(test.getStartText());
|
||
} else {
|
||
timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
|
||
}
|
||
timeTag.setBackground("1A06CEA8");
|
||
timeTag.setColor(isDarkModeOn ? "07A385" : "06CEA8");
|
||
tagStyle.add(timeTag);
|
||
|
||
} else {
|
||
tagStyle = gameEntity.getTagStyle();
|
||
}
|
||
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
public static void setGameTagsWithSellingPoint(LinearLayout layout, LayoutGameItemSellingPointBinding binding, GameEntity gameEntity, String subjectTag) {
|
||
if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
|
||
layout.setVisibility(View.GONE);
|
||
binding.getRoot().setVisibility(View.VISIBLE);
|
||
GameEntity.SellingPoints sellingPoints = gameEntity.getSellingPoints();
|
||
if (sellingPoints != null) {
|
||
binding.tvSellingPoints.setVisibility(View.VISIBLE);
|
||
binding.tvSellingPoints.setText(sellingPoints.getText());
|
||
} else {
|
||
binding.tvSellingPoints.setVisibility(View.GONE);
|
||
}
|
||
|
||
ArrayList<TagStyleEntity> tagStyle = gameEntity.getTagStyle();
|
||
StringBuilder tagText = new StringBuilder();
|
||
for (int i = 0; i < tagStyle.size(); i++) {
|
||
if (i < 3) {
|
||
tagText.append(i == 0 ? "" : "·").append(tagStyle.get(i).getName());
|
||
}
|
||
}
|
||
binding.gtcvTags.setText(tagText);
|
||
} else {
|
||
layout.setVisibility(View.VISIBLE);
|
||
binding.getRoot().setVisibility(View.GONE);
|
||
switch (subjectTag) {
|
||
case SUBJECT_TAG_UPDATE:
|
||
List<TagStyleEntity> updateTags = new ArrayList<>();
|
||
TagStyleEntity updateTag = new TagStyleEntity(
|
||
"local_generated",
|
||
TimeUtils.getFormatTime(gameEntity.getUpdateTime(), "MM-dd") + " 更新",
|
||
"",
|
||
"1383EB",
|
||
"E8F3FF",
|
||
"1383EB",
|
||
false
|
||
);
|
||
updateTags.add(updateTag);
|
||
GameViewUtils.setLabelList(layout.getContext(), layout, updateTags);
|
||
break;
|
||
case SUBJECT_TAG_TYPE:
|
||
GameViewUtils.setLabelList(layout.getContext(), layout, gameEntity.getTagStyle());
|
||
break;
|
||
default:
|
||
setGameTags(layout, gameEntity, subjectTag);
|
||
break;
|
||
}
|
||
}
|
||
|
||
ViewParent parent = binding.getRoot().getParent();
|
||
if (parent instanceof ConstraintLayout) {
|
||
ConstraintLayout constraintLayout = (ConstraintLayout) parent;
|
||
ConstraintSet constraintSet = new ConstraintSet();
|
||
constraintSet.clone(constraintLayout);
|
||
constraintSet.clear(R.id.gameDesSpace, ConstraintSet.BOTTOM);
|
||
if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
|
||
constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.layout_selling_points, ConstraintSet.TOP);
|
||
} else {
|
||
constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.label_list, ConstraintSet.TOP);
|
||
}
|
||
constraintSet.applyTo(constraintLayout);
|
||
}
|
||
}
|
||
|
||
public static void setVideoDetailGameTags(LinearLayout layout, GameEntity gameEntity) {
|
||
try {
|
||
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
|
||
TestEntity test = gameEntity.getTest();
|
||
if (test != null
|
||
// 这个判断用于开测表列表
|
||
&& !"type_tag".equals(test.getGameTag())) {
|
||
TagStyleEntity typeTag = new TagStyleEntity();
|
||
typeTag.setName(test.getType() != null ? test.getType() : "");
|
||
typeTag.setBackground("FFF3E0");
|
||
typeTag.setColor("FA8500");
|
||
tagStyle.add(typeTag);
|
||
|
||
TagStyleEntity timeTag = new TagStyleEntity();
|
||
timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
|
||
timeTag.setBackground("E0FFF9");
|
||
timeTag.setColor("00A887");
|
||
tagStyle.add(timeTag);
|
||
} else {
|
||
tagStyle = gameEntity.getTagStyle();
|
||
}
|
||
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle, 4);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
public static void setGameName(TextView view, GameEntity game, boolean isShowPlatform) {
|
||
String gameName;
|
||
if (isShowPlatform && game.getApk().size() > 0) {
|
||
gameName = String.format("%s - %s", game.getName(),
|
||
PlatformUtils.getInstance(view.getContext()).getPlatformName(
|
||
game.getApk().get(0).getPlatform()));
|
||
if (!gameName.equals((String) view.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id))) {
|
||
view.setText(gameName);
|
||
view.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, gameName);
|
||
}
|
||
} else {
|
||
gameName = game.getName();
|
||
if (gameName != null && !gameName.equals((String) view.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id))) {
|
||
view.setText(gameName);
|
||
view.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, gameName);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
public static void setGameTags(TextView view, List<TagStyleEntity> tags, int maxTags) {
|
||
if (tags == null) {
|
||
view.setText("");
|
||
return;
|
||
}
|
||
|
||
int showCount = tags.size() > maxTags ? maxTags : tags.size(); // 最多显示3个
|
||
|
||
StringBuilder content = new StringBuilder();
|
||
for (int i = 0; i < showCount; i++) {
|
||
TagStyleEntity tag = tags.get(i);
|
||
content.append(tag.getName());
|
||
if (i != showCount - 1) content.append("/");
|
||
}
|
||
|
||
Spannable span = new SpannableString(content);
|
||
int index = 0;
|
||
for (int i = 0; i < showCount; i++) {
|
||
TagStyleEntity tag = tags.get(i);
|
||
int start = index;
|
||
int end = start + tag.getName().length() + ((i != showCount - 1) ? 1 : 0);
|
||
index = end;
|
||
span.setSpan(new ForegroundColorSpan(ExtensionsKt.hexStringToIntColor("#" + tag.getColor(), Color.WHITE)),
|
||
start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||
}
|
||
view.setText(span);
|
||
}
|
||
}
|