diff --git a/app/build.gradle b/app/build.gradle index 020db2cf8e..a97c6f9446 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -165,7 +165,7 @@ android { buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\"" - buildConfigField "String", "DEV_VAPI_HOST", "\"${API_HOST}\"" + buildConfigField "String", "DEV_VAPI_HOST", "\"${VAPI_HOST}\"" } tea { @@ -173,7 +173,7 @@ android { buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\"" - buildConfigField "String", "DEV_VAPI_HOST", "\"${API_HOST}\"" + buildConfigField "String", "DEV_VAPI_HOST", "\"${VAPI_HOST}\"" manifestPlaceholders.put("APPLOG_SCHEME", "rangersapplog.byAx6uYt".toLowerCase()) } diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 8d17a4bbe9..1f189c4a80 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -32,11 +32,14 @@ import com.gh.common.chain.ValidateVSpaceHandler; import com.gh.common.chain.VersionNumberHandler; import com.gh.common.constant.Config; import com.gh.common.exposure.ExposureEvent; +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; @@ -377,55 +380,60 @@ public class BindingAdapters { break; case NORMAL: case PLUGIN: - 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(), null); - return; - } - } - - ChainBuilder builder = new ChainBuilder(); - builder.addHandler(new ValidateVSpaceHandler()); - builder.addHandler(new GamePermissionHandler()); - builder.addHandler(new BrowserInstallHandler()); - builder.addHandler(new PackageCheckHandler()); - builder.addHandler(new DownloadDialogHelperHandler()); - builder.addHandler(new CertificationHandler()); - builder.addHandler(new VersionNumberHandler()); - builder.addHandler(new OverseaDownloadHandler()); - builder.addHandler(new CheckDownloadHandler()); - - builder.setProcessEndCallback(o -> { - download(progressBar, gameEntity, traceEvent, (boolean) o, entrance, location); - return null; - }); - final ChainHandler chainHandler = builder.buildHandlerChain(); - if (chainHandler != null) { - chainHandler.handleRequest(v.getContext(), gameEntity); - } + final RegionSetting.GameH5Download gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(gameEntity.getId()); + if (gameH5Download != null) { + DialogUtils.showGameH5DownloadDialog(v.getContext(), gameEntity, gameH5Download); } else { - ChainBuilder builder = new ChainBuilder(); - builder.addHandler(new GamePermissionHandler()); - builder.addHandler(new CertificationHandler()); - builder.addHandler(new VersionNumberHandler()); + 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(), null); + return; + } + } - builder.setProcessEndCallback(o -> { - DownloadDialog.showDownloadDialog( - v.getContext(), - gameEntity, - traceEvent, - entrance, - location + ":" + gameEntity.getName()); - return null; - }); - final ChainHandler chainHandler = builder.buildHandlerChain(); - if (chainHandler != null) { - chainHandler.handleRequest(v.getContext(), gameEntity); + ChainBuilder builder = new ChainBuilder(); + builder.addHandler(new ValidateVSpaceHandler()); + builder.addHandler(new GamePermissionHandler()); + builder.addHandler(new BrowserInstallHandler()); + builder.addHandler(new PackageCheckHandler()); + builder.addHandler(new DownloadDialogHelperHandler()); + builder.addHandler(new CertificationHandler()); + builder.addHandler(new VersionNumberHandler()); + builder.addHandler(new OverseaDownloadHandler()); + builder.addHandler(new CheckDownloadHandler()); + + builder.setProcessEndCallback(o -> { + download(progressBar, gameEntity, traceEvent, (boolean) o, entrance, location); + return null; + }); + final ChainHandler chainHandler = builder.buildHandlerChain(); + if (chainHandler != null) { + chainHandler.handleRequest(v.getContext(), gameEntity); + } + } else { + ChainBuilder builder = new ChainBuilder(); + builder.addHandler(new GamePermissionHandler()); + builder.addHandler(new CertificationHandler()); + builder.addHandler(new VersionNumberHandler()); + + builder.setProcessEndCallback(o -> { + DownloadDialog.showDownloadDialog( + v.getContext(), + gameEntity, + traceEvent, + entrance, + location + ":" + gameEntity.getName()); + return null; + }); + final ChainHandler chainHandler = builder.buildHandlerChain(); + if (chainHandler != null) { + chainHandler.handleRequest(v.getContext(), gameEntity); + } } } break; diff --git a/app/src/main/java/com/gh/common/filter/RegionSetting.kt b/app/src/main/java/com/gh/common/filter/RegionSetting.kt index 098ec74df9..3ec3808451 100644 --- a/app/src/main/java/com/gh/common/filter/RegionSetting.kt +++ b/app/src/main/java/com/gh/common/filter/RegionSetting.kt @@ -5,17 +5,45 @@ import com.google.gson.annotations.SerializedName @Keep data class RegionSetting( - @SerializedName("game_mirror") - var mirrorGameIdSet: HashSet, - @SerializedName("game_block") - var filterGameIdSet: HashSet, - @SerializedName("channel_control") - var channelControl: ChannelControl) { + @SerializedName("game_mirror") + var mirrorGameIdSet: HashSet, + @SerializedName("game_block") + var filterGameIdSet: HashSet, + @SerializedName("channel_control") + var channelControl: ChannelControl, + @SerializedName("game_h5_download") + var gameH5DownloadList: List, + @SerializedName("game_special_download") + var gameSpecialDownloadInfoList: List +) { @Keep data class ChannelControl( - @SerializedName("game_category") - var gameCategory: String, - @SerializedName("effect") - var effect: Boolean) + @SerializedName("game_category") + var gameCategory: String, + @SerializedName("effect") + var effect: Boolean + ) + + @Keep + data class GameH5Download( + @SerializedName("game_id") + var gameId: String,// 游戏id + @SerializedName("h5_link") + var h5Link: String,// 网页链接 + @SerializedName("download_link") + var downloadLink: String,// 下载链接 + @SerializedName("button_text") + var buttonText: String,// 按钮文案 + ) + data class GameSpecialDownloadInfo( + @SerializedName("game_id") + var gameId: String = "", + @SerializedName("bbs_id") + var bbsId: String = "", + @SerializedName("top_id") + var topId: String = "", + @SerializedName("hint_text") + var hintText: String = "" + ) } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/filter/RegionSettingHelper.kt b/app/src/main/java/com/gh/common/filter/RegionSettingHelper.kt index b5eae07f58..edf632204f 100644 --- a/app/src/main/java/com/gh/common/filter/RegionSettingHelper.kt +++ b/app/src/main/java/com/gh/common/filter/RegionSettingHelper.kt @@ -19,6 +19,8 @@ object RegionSettingHelper { private var mChannelControl: RegionSetting.ChannelControl? = null private var mFilterGameIdSet: HashSet? = hashSetOf() private var mDisplayMirrorIfoGameIdSet: HashSet? = hashSetOf() + private var mGameH5DownloadList: List? = listOf() + private var mGameSpecialDownloadInfoList: List? = listOf() private const val SP_SETTING = "region_setting" @@ -31,6 +33,11 @@ object RegionSettingHelper { return mFilterGameIdSet?.contains(gameId) ?: false } + fun shouldThisGameShowSpecialDownload(gameId: String) = mGameSpecialDownloadInfoList?.any { it.gameId == gameId } ?: false + + @JvmStatic + fun getGameSpecialDownloadInfo(gameId: String) = mGameSpecialDownloadInfoList?.find { it.gameId == gameId } + @JvmStatic fun filterGame(list: List?): ArrayList { if (list == null) return arrayListOf() @@ -58,27 +65,33 @@ object RegionSettingHelper { } } + @JvmStatic + fun getGameH5DownloadByGameId(gameId: String): RegionSetting.GameH5Download? { + if (mGameH5DownloadList.isNullOrEmpty()) return null + return mGameH5DownloadList!!.find { it.gameId == gameId } + } + @SuppressLint("CheckResult") @JvmStatic fun getRegionSetting() { debounceActionWithInterval(R.string.app_name, 5000) { // 使用默认的 Schdulers.io() 可能会触发 OOM RetrofitManager.getInstance() - .api - .getRegionSetting(HaloApp.getInstance().channel) - .subscribeOn(Schedulers.io()) - .subscribe(object : BiResponse() { - override fun onSuccess(data: RegionSetting) { - updateSettingsInMemory(data) - SPUtils.setString(SP_SETTING, data.toJson()) - } + .api + .getRegionSetting(HaloApp.getInstance().channel) + .subscribeOn(Schedulers.io()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: RegionSetting) { + updateSettingsInMemory(data) + SPUtils.setString(SP_SETTING, data.toJson()) + } - override fun onFailure(exception: Exception) { - SPUtils.getString(SP_SETTING)?.toObject()?.let { - updateSettingsInMemory(it) - } + override fun onFailure(exception: Exception) { + SPUtils.getString(SP_SETTING)?.toObject()?.let { + updateSettingsInMemory(it) } - }) + } + }) } } @@ -86,6 +99,8 @@ object RegionSettingHelper { mFilterGameIdSet = data.filterGameIdSet mDisplayMirrorIfoGameIdSet = data.mirrorGameIdSet mChannelControl = data.channelControl + mGameH5DownloadList = data.gameH5DownloadList + mGameSpecialDownloadInfoList = data.gameSpecialDownloadInfoList } /** diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java index 3c71fdf6dc..b0390aba12 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -4,6 +4,8 @@ import android.text.TextUtils; import android.view.View; import com.gh.common.constant.Config; +import com.gh.common.filter.RegionSetting; +import com.gh.common.filter.RegionSettingHelper; import com.gh.common.repository.ReservationRepository; import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.view.DownloadButton; @@ -49,6 +51,12 @@ public class DetailDownloadUtils { return; } + if (viewHolder.gameEntity.isSpecialDownload()) { + viewHolder.mDownloadPb.setText("查看下载资源"); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.SPECIAL_DOWNLOAD); + return; + } + if (viewHolder.gameEntity.isReservable()) { if (!ReservationRepository.thisGameHasBeenReserved(viewHolder.gameEntity.getId())) { if (TextUtils.isEmpty(downloadAddWord)) { @@ -64,6 +72,13 @@ public class DetailDownloadUtils { return; } + final RegionSetting.GameH5Download gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(viewHolder.gameEntity.getId()); + if (gameH5Download != null) { + viewHolder.mDownloadPb.setText(TextUtils.isEmpty(viewHolder.gameEntity.getDownloadOffText()) ? "查看详情" : viewHolder.gameEntity.getDownloadOffText()); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.NORMAL); + return; + } + if (viewHolder.gameEntity.isVGame() && !viewHolder.gameEntity.getApk().isEmpty()) { String status = GameUtils.getDownloadBtnText(viewHolder.context, viewHolder.gameEntity, PluginLocation.only_game); if (viewHolder.context.getString(R.string.launch).equals(status)) { diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index a7fa7842ca..e7c0109ea5 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -40,9 +40,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; @@ -51,6 +49,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.common.constant.Config; +import com.gh.common.filter.RegionSetting; import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.adapter.ReportReasonAdapter; @@ -60,11 +59,9 @@ import com.gh.gamecenter.common.callback.CancelListener; import com.gh.gamecenter.common.callback.ConfirmListener; import com.gh.gamecenter.common.callback.SimpleCallback; import com.gh.gamecenter.common.databinding.DialogAlertDefaultBinding; -import com.gh.gamecenter.common.retrofit.Response; import com.gh.gamecenter.common.utils.ExtensionsKt; import com.gh.gamecenter.common.utils.ImageUtils; import com.gh.gamecenter.common.utils.NetworkUtils; -import com.gh.gamecenter.common.utils.PermissionHelper; import com.gh.gamecenter.common.view.CustomLinkMovementMethod; import com.gh.gamecenter.common.view.DrawableView; import com.gh.gamecenter.common.view.FixLinearLayoutManager; @@ -99,7 +96,6 @@ import com.gh.gamecenter.login.entity.Badge; import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.gamecenter.setting.GameDownloadSettingFragment; import com.gh.gamecenter.suggest.SuggestType; -import com.google.gson.JsonObject; import com.halo.assistant.HaloApp; import com.lightgame.adapter.BaseRecyclerAdapter; import com.lightgame.download.DownloadEntity; @@ -116,7 +112,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import kotlin.Unit; import kotlin.jvm.functions.Function0; -import retrofit2.HttpException; public class DialogUtils { @@ -1309,39 +1304,15 @@ public class DialogUtils { binding.gameNameTv.setText(context.getString(R.string.dialog_oversea_hint, gameEntity.getName())); binding.closeIv.setOnClickListener(v -> dialog.dismiss()); - Context finalContext = context; - RetrofitManager.getInstance().getApi().getThirdPartyAddress(gameEntity.getId()) - .compose(ExtensionsKt.observableToMain()) - .subscribe(new Response() { - @Override - public void onResponse(@Nullable JsonObject response) { - super.onResponse(response); - if (response == null) return; - String h5Link = response.get("h5_link").getAsString(); - String downloadLink = response.get("download_link").getAsString(); - String buttonText = response.get("button_text").getAsString(); - binding.urlTv.setText(downloadLink); - binding.downloadBtn.setText(buttonText); - binding.downloadBtn.setOnClickListener(v -> { - DirectUtils.directToExternalBrowser(finalContext, h5Link); - dialog.dismiss(); - }); - } - - @Override - public void onFailure(@Nullable HttpException e) { - super.onFailure(e); - if ("show&download".equals(gameEntity.getOverseasAddressDialog().getStatus())) { - gameEntity.getApk().get(0).setUrl(gameEntity.getOverseasAddressDialog().getLink()); - } - binding.urlTv.setText(gameEntity.getOverseasAddressDialog().getLink()); - binding.downloadBtn.setText("下载(" + gameEntity.getApk().get(0).getSize() + ")"); - binding.downloadBtn.setOnClickListener(v -> { - listener.onConfirm(); - dialog.dismiss(); - }); - } - }); + if ("show&download".equals(gameEntity.getOverseasAddressDialog().getStatus())) { + gameEntity.getApk().get(0).setUrl(gameEntity.getOverseasAddressDialog().getLink()); + } + binding.urlTv.setText(gameEntity.getOverseasAddressDialog().getLink()); + binding.downloadBtn.setText("下载(" + gameEntity.getApk().get(0).getSize() + ")"); + binding.downloadBtn.setOnClickListener(v -> { + listener.onConfirm(); + dialog.dismiss(); + }); Window window = dialog.getWindow(); if (window != null) { @@ -1353,6 +1324,36 @@ public class DialogUtils { dialog.show(); } } + public static void showGameH5DownloadDialog(Context context, GameEntity gameEntity, RegionSetting.GameH5Download gameH5Download) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.GhAlertDialog); + + DialogOverseaConfirmationBinding binding = DialogOverseaConfirmationBinding.inflate(LayoutInflater.from(context), null, false); + + View contentView = binding.getRoot(); + + binding.gameIcon.displayGameIcon(gameEntity); + binding.gameNameTv.setText(context.getString(R.string.dialog_oversea_hint, gameEntity.getName())); + binding.closeIv.setOnClickListener(v -> dialog.dismiss()); + + Context finalContext = context; + binding.urlTv.setText(gameH5Download.getDownloadLink()); + binding.downloadBtn.setText(gameH5Download.getButtonText()); + binding.downloadBtn.setOnClickListener(v -> { + DirectUtils.directToExternalBrowser(finalContext, gameH5Download.getH5Link()); + dialog.dismiss(); + }); + + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(contentView); + dialog.show(); + } public static void showImprintDialog(Context context, GameEntity gameEntity, String titleName) { context = checkDialogContext(context); diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt index d45553d1a1..8f50cad0cf 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt @@ -11,6 +11,7 @@ import com.gh.common.chain.* import com.gh.common.constant.Config import com.gh.common.dialog.DeviceRemindDialog import com.gh.common.exposure.ExposureEvent +import com.gh.common.filter.RegionSettingHelper import com.gh.common.history.HistoryHelper import com.gh.common.repository.ReservationRepository import com.gh.common.simulator.SimulatorDownloadManager @@ -26,6 +27,7 @@ import com.gh.gamecenter.WebActivity import com.gh.gamecenter.adapter.viewholder.GameViewHolder import com.gh.gamecenter.common.callback.CancelListener import com.gh.gamecenter.common.constant.Constants +import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.utils.* import com.gh.gamecenter.entity.GameEntity @@ -172,8 +174,8 @@ object DownloadItemUtils { ) { // 控制是否显示下载按钮 downloadBtn.goneIf(!Config.isShowDownload(gameEntity.id) || context.getString(R.string.app_name) == gameEntity.name) - // 青少年模式显示查看 - if (SPUtils.getBoolean(Constants.SP_TEENAGER_MODE)) { + // 青少年模式或者需要特殊处理显示查看 + if (SPUtils.getBoolean(Constants.SP_TEENAGER_MODE) || gameEntity.isSpecialDownload()) { downloadBtn.text = "查看" downloadBtn.buttonStyle = DownloadButton.ButtonStyle.TEENAGER_MODE return @@ -190,6 +192,15 @@ object DownloadItemUtils { } return } + if (RegionSettingHelper.getGameH5DownloadByGameId(gameEntity.id) != null) { + downloadBtn.apply { + isClickable = true + text = context.getString(R.string.check) + setBackgroundResource(R.drawable.download_button_normal_style) + setTextColor(R.color.white.toColor(context)) + } + return + } if (gameEntity.getApk().isEmpty() || gameEntity.downloadOffStatus != null) { val h5LinkEntity = gameEntity.h5Link val offStatus = gameEntity.downloadOffStatus @@ -535,6 +546,33 @@ object DownloadItemUtils { } return } + if (gameEntity.isSpecialDownload()) { + val info = RegionSettingHelper.getGameSpecialDownloadInfo(gameEntity.id) ?: return + downloadBtn.setOnClickListener { + DialogHelper.showDialog( + context, + "提示", + info.hintText, + "前往论坛", + "", + { + if (info.bbsId.isNotBlank()) { + if (info.topId.isNotBlank()) { + val data = hashMapOf(EntranceConsts.KEY_TOP_ID to info.topId) + PageSwitchDataHelper.pushCurrentPageData(data) + } + DirectUtils.directForumDetail(context, info.bbsId, entrance) + } + }, + {}, + DialogHelper.Config( + centerTitle = true, + centerContent = true + ) + ) + } + return + } if (gameEntity.isReservable) { if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.id)) { downloadBtn.setOnClickListener { @@ -594,6 +632,13 @@ object DownloadItemUtils { } return } + val gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(gameEntity.id) + if (gameH5Download != null) { + downloadBtn.setOnClickListener { + DialogUtils.showGameH5DownloadDialog(context, gameEntity, gameH5Download) + } + return + } if (gameEntity.getApk().size == 0 && gameEntity.h5Link != null) { downloadBtn.setOnClickListener { allStateClickCallback?.onCallback() diff --git a/app/src/main/java/com/gh/common/view/DownloadProgressBar.java b/app/src/main/java/com/gh/common/view/DownloadProgressBar.java index 4acc1a178f..e9481040b0 100644 --- a/app/src/main/java/com/gh/common/view/DownloadProgressBar.java +++ b/app/src/main/java/com/gh/common/view/DownloadProgressBar.java @@ -41,6 +41,7 @@ public class DownloadProgressBar extends ProgressBar { H5_GAME, UPDATING, TEENAGER_MODEL, + SPECIAL_DOWNLOAD, XAPK_UNZIPPING, XAPK_SUCCESS, @@ -231,6 +232,7 @@ public class DownloadProgressBar extends ProgressBar { mDefaultColor = ContextCompat.getColor(getContext(), R.color.white); break; case TEENAGER_MODEL: + case SPECIAL_DOWNLOAD: setProgressDrawable(getResources().getDrawable(R.drawable.download_button_normal_style)); mDefaultColor = ContextCompat.getColor(getContext(), R.color.white); break; diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index da3d3bb8b7..7c8e687bc0 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -69,7 +69,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; public class DownloadManager implements DownloadStatusListener { @@ -83,7 +85,7 @@ public class DownloadManager implements DownloadStatusListener { private final ArrayMap lastTimeMap; private final ArrayMap> platformMap; - private final ArrayMap> gameMap; + private final Map> gameMap; private final ArrayMap statusMap; private final ArrayMap downloadingMap; @@ -173,7 +175,7 @@ public class DownloadManager implements DownloadStatusListener { lastTimeMap = new ArrayMap<>(); platformMap = new ArrayMap<>(); - gameMap = new ArrayMap<>(); + gameMap = new ConcurrentHashMap<>(); statusMap = new ArrayMap<>(); downloadingMap = new ArrayMap<>(); // mDownloadSnapshotList = new ArrayList<>(); @@ -649,7 +651,7 @@ public class DownloadManager implements DownloadStatusListener { public void initGameMap() { gameMap.clear(); List list = getAllDownloadEntitySnapshots(); - if (list != null && list.size() != 0) { + if (list.size() != 0) { String name; for (DownloadEntity downloadEntity : list) { name = downloadEntity.getName(); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index 0fb2b344b2..24e5939f94 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -26,16 +26,22 @@ import com.gh.common.chain.VersionNumberHandler; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.GameOffServiceDialogFragment; import com.gh.common.exposure.ExposureEvent; +import com.gh.common.filter.RegionSetting; +import com.gh.common.filter.RegionSettingHelper; import com.gh.common.history.HistoryHelper; import com.gh.common.simulator.SimulatorDownloadManager; import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.util.CheckLoginUtils; +import com.gh.gamecenter.common.utils.DataLogUtils; import com.gh.common.util.DetailDownloadUtils; +import com.gh.gamecenter.common.utils.DialogHelper; import com.gh.common.util.DialogUtils; import com.gh.gamecenter.energy.utils.EnergyTaskHelper; import com.gh.common.util.LogUtils; +import com.gh.gamecenter.core.utils.MtaHelper; import com.gh.common.util.PackageInstaller; import com.gh.common.util.PackageUtils; +import com.gh.gamecenter.common.utils.PermissionHelper; import com.gh.common.util.ReservationHelper; import com.gh.common.view.DownloadButton; import com.gh.download.DownloadManager; @@ -67,6 +73,7 @@ import com.lightgame.utils.Utils; import org.greenrobot.eventbus.EventBus; import java.io.File; +import java.util.HashMap; /** * Created by khy on 27/06/17. @@ -202,7 +209,13 @@ public class DetailViewHolder { } break; case NORMAL: - DataLogUtils.uploadGameLog(mViewHolder.context, mGameEntity.getId(), mGameEntity.getName(), mEntrance); + final RegionSetting.GameH5Download gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(mGameEntity.getId()); + if (gameH5Download != null) { + DialogUtils.showGameH5DownloadDialog(mViewHolder.context, mGameEntity, gameH5Download); + break; + } else { + DataLogUtils.uploadGameLog(mViewHolder.context, mGameEntity.getId(), mGameEntity.getName(), mEntrance); + } case PLUGIN: ChainBuilder builder = new ChainBuilder(); builder.addHandler(new ValidateVSpaceHandler()); @@ -366,6 +379,19 @@ public class DetailViewHolder { } ); break; + case SPECIAL_DOWNLOAD: + RegionSetting.GameSpecialDownloadInfo info = RegionSettingHelper.getGameSpecialDownloadInfo(mGameEntity.getId()); + if (info != null) { + if (!TextUtils.isEmpty(info.getBbsId())) { + if (!TextUtils.isEmpty(info.getTopId())) { + HashMap map = new HashMap<>(); + map.put(EntranceConsts.KEY_TOP_ID, info.getTopId()); + PageSwitchDataHelper.pushCurrentPageData(map); + } + DirectUtils.directForumDetail(mViewHolder.context, info.getBbsId(), mEntrance); + } + } + break; default: if (mGameEntity.isVGame()) { mViewHolder.context.startActivity(VDownloadManagerActivity.getIntent(mViewHolder.context, true)); diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt index 8c88d4ddd0..cb3a1d0ff1 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -603,6 +603,8 @@ data class GameEntity( } } + fun isSpecialDownload() = RegionSettingHelper.shouldThisGameShowSpecialDownload(id) + fun toSimpleGame(): SimpleGame { val simpleGame = SimpleGame() simpleGame.id = id diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt index 0505633b0e..b5806fbbd0 100644 --- a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt @@ -1,6 +1,6 @@ package com.gh.gamecenter.eventbus -class EBPackage(var type: String, var packageName: String, var versionName: String) { +class EBPackage(var type: String, var packageName: String, var versionName: String?) { var gameId: String? = null } diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListViewModel.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListViewModel.kt index 6261858a1e..069c1acfa9 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListViewModel.kt @@ -4,6 +4,8 @@ import android.app.Application import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.gh.gamecenter.core.utils.UrlFilterUtils +import com.gh.gamecenter.common.constant.EntranceConsts +import com.gh.gamecenter.core.utils.PageSwitchDataHelper import com.gh.gamecenter.common.baselist.ListViewModel import com.gh.gamecenter.entity.ForumVideoEntity import com.gh.gamecenter.qa.entity.AnswerEntity @@ -20,7 +22,12 @@ class ForumArticleAskListViewModel(application: Application, val bbsId: String = override fun provideDataObservable(page: Int): Observable> { return when (mPath) { "全部" -> { - RetrofitManager.getInstance().api.getAllForumList(bbsId, UrlFilterUtils.getFilterQuery(sort, "-1"), page) + val data = PageSwitchDataHelper.popLastPageData() + val map = hashMapOf() + if (data != null && data.containsKey(EntranceConsts.KEY_TOP_ID)) { + map["top_id"] = data[EntranceConsts.KEY_TOP_ID] + } + RetrofitManager.getInstance().api.getAllForumList(bbsId, UrlFilterUtils.getFilterQuery(sort, "-1"), page, map) } "精华" -> { RetrofitManager.getInstance().api.getEssenceForumList(bbsId, page) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 0083cab730..2ac3a81b7d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -78,6 +78,7 @@ import com.gh.gamecenter.simulatorgame.SimulatorGameActivity import com.gh.gamecenter.tag.TagsActivity import com.gh.gamecenter.login.user.UserViewModel import com.gh.gamecenter.video.detail.CustomManager +import com.gh.vspace.VHelper import com.google.android.material.appbar.AppBarLayout import com.halo.assistant.HaloApp import com.halo.assistant.fragment.WebFragment @@ -154,7 +155,9 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { || downloadEntity.status == DownloadStatus.pause || downloadEntity.status == DownloadStatus.redirected) { showInstallHint() - SPUtils.setBoolean(Constants.SP_SHOULD_SHOW_GAME_DETAIL_INSTALL_GUIDE, true) + if (!SPUtils.getBoolean(Constants.SP_SHOULD_SHOW_GAME_DETAIL_INSTALL_GUIDE, false)) { + SPUtils.setBoolean(Constants.SP_SHOULD_SHOW_GAME_DETAIL_INSTALL_GUIDE, true) + } } if (mGameEntity?.getApk()?.size == 1) { @@ -1630,8 +1633,9 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } private fun showInstallHint() { + if (mDownloadBinding.installHintContainer.visibility == View.VISIBLE) return val gameGuidePopupEntity = Config.getGameGuidePopupEntity() - if (SPUtils.getBoolean(Constants.SP_GAME_DETAIL_INSTALL_GUIDE, true) && gameGuidePopupEntity != null) { + if (gameGuidePopupEntity != null && SPUtils.getBoolean(Constants.SP_GAME_DETAIL_INSTALL_GUIDE, true)) { mDownloadBinding.installHintTv.text = gameGuidePopupEntity.content mDownloadBinding.installHintContainer.visibility = View.VISIBLE NewLogUtils.logGuidePopShow(gameGuidePopupEntity.id) @@ -1831,7 +1835,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } private fun showVModeIconAtBottomBarIfNeeded(simpleGame: SimpleGame?, gameEntity: GameEntity) { - mDownloadBinding.groupVmode.goneIf(simpleGame == null) + mDownloadBinding.groupVmode.goneIf(simpleGame == null || !VHelper.isVGameOn()) simpleGame?.let { mDownloadBinding.ivVmode.displayGameIcon(simpleGame.getIcon(), simpleGame.iconSubscript) if (gameEntity.isVGame()) { diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt index 89c4d8df06..fec87c76de 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt @@ -70,9 +70,6 @@ class HomeFragment : LazyFragment() { mViewModel = viewModelProvider() mHomeSearchViewModel = viewModelProviderFromParent() mViewModel.homeOnlyWithoutOtherTab = arguments?.getInt(EntranceConsts.KEY_TAB_COUNT) == 1 - val homeDataEntity = mHomeSearchViewModel.homeDataLiveData.value - mViewModel.initData(homeDataEntity) - super.onFragmentFirstVisible() mViewModel.itemDataList.observeNonNull(this, callback = { diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt index c281addabb..c0c37b4f03 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt @@ -462,7 +462,7 @@ class HomeFragmentAdapter( fun getGameEntityByPackage(packageName: String): List { val positionList = ArrayList() - val positionMap = viewModel.positionAndPackageMap + val positionMap = viewModel.positionAndPackageMap.value ?: return positionList for (key in positionMap.keys) { if (key.contains(packageName)) { val position = positionMap[key]!! diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt index 8371f6fb24..06bf790cad 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt @@ -62,7 +62,8 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { var homeOnlyWithoutOtherTab = false var itemDataList: MediatorLiveData> = MediatorLiveData() - var positionAndPackageMap = HashMap() // key: packageName + position, value: position + private var mPositionAndPackageMap = HashMap() // key: packageName + position, value: position + var positionAndPackageMap = MutableLiveData>() val loadStatus = MutableLiveData() @@ -408,7 +409,7 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { for (entity in mVGameList!!) { val packageName = entity.downloadEntity.packageName - positionAndPackageMap[packageName + (mSnapshotItemList.size - 1)] = mSnapshotItemList.size - 1 + mPositionAndPackageMap[packageName + (mSnapshotItemList.size - 1)] = mSnapshotItemList.size - 1 } } @@ -572,7 +573,8 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { shouldShowDivider = false } } - itemDataList.postValue(mSnapshotItemList) + positionAndPackageMap.postValue(HashMap(mPositionAndPackageMap)) + itemDataList.postValue(ArrayList(mSnapshotItemList)) } } @@ -581,7 +583,7 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { for (apkEntity in game.getApk()) { packages += apkEntity.packageName } - positionAndPackageMap[packages + (mSnapshotItemList.size - 1)] = mSnapshotItemList.size - 1 + mPositionAndPackageMap[packages + (mSnapshotItemList.size - 1)] = mSnapshotItemList.size - 1 game.gameLocation = GameEntity.GameLocation.INDEX game.setEntryMap(DownloadManager.getInstance().getEntryMap(game.name)) } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 576e54d274..8578c4ac5d 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -2557,7 +2557,7 @@ public interface ApiService { * 获取论坛全部Tab内容(社区文章+问题) */ @GET("bbses/{bbs_id}/contents") - Observable> getAllForumList(@Path("bbs_id") String bbsId, @Query("sort") String sort, @Query("page") int page); + Observable> getAllForumList(@Path("bbs_id") String bbsId, @Query("sort") String sort, @Query("page") int page, @QueryMap Map params); /** * 获取论坛精华Tab内容(社区文章) diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 53972200d7..75210244fd 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -145,7 +145,7 @@ object VHelper { override fun onServiceConnectionFailed(failCode: Int) { if (failCode == BinderPool.CONNECT_STATE_NOT_INSTALLED) { - ToastUtils.toast("请先安装畅玩助手") + Utils.log(LOG_TAG, "未安装畅玩助手") } Utils.log(LOG_TAG, "V 服务连接失败") } @@ -644,10 +644,11 @@ object VHelper { if (vaConfig == null) { ToastUtils.toast("畅玩空间暂未上线") + return true } // TODO 检测 32 位 - if (!PackageUtils.isInstalled(context, vaConfig!!.arch64?.packageName)) { + if (!PackageUtils.isInstalled(context, vaConfig.arch64?.packageName)) { VSpaceDialogFragment.showDownloadDialog(context, getVSpaceDownloadEntity(false)) Utils.log(LOG_TAG, "显示下载畅玩空间弹窗") return true diff --git a/libraries/LGLibrary b/libraries/LGLibrary index fbc7818022..768dcec118 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit fbc7818022c42b7823b54ece34d6c9a094d9896f +Subproject commit 768dcec118e957f9ae3c64c88f2a3a282c0cc53f diff --git a/module_common/src/main/java/com/gh/gamecenter/common/baselist/DiffUtilAdapter.kt b/module_common/src/main/java/com/gh/gamecenter/common/baselist/DiffUtilAdapter.kt index a70fbe0b09..eca0cd04ef 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/baselist/DiffUtilAdapter.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/baselist/DiffUtilAdapter.kt @@ -5,6 +5,8 @@ import android.content.Context import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.gh.gamecenter.common.utils.safelyGetInRelease +import com.gh.gamecenter.common.utils.testChannelOnly +import com.gh.gamecenter.core.utils.ToastUtils import com.lightgame.adapter.BaseRecyclerAdapter abstract class DiffUtilAdapter(context: Context) : @@ -24,35 +26,43 @@ abstract class DiffUtilAdapter(context: Context) : // 这里用新的数组包裹原数据 val updateDataCopy = ArrayList(updateData) - ListExecutor.workerExecutor.execute { - val diffResult = DiffUtil.calculateDiff(object : DiffUtil.Callback() { - override fun getOldListSize(): Int { - return mDataList.size - } + try { + ListExecutor.workerExecutor.execute { + val diffResult = DiffUtil.calculateDiff(object : DiffUtil.Callback() { + override fun getOldListSize(): Int { + return mDataList.size + } - override fun getNewListSize(): Int { - return updateDataCopy.size - } + override fun getNewListSize(): Int { + return updateDataCopy.size + } - override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { - val oldItem = mDataList.safelyGetInRelease(oldItemPosition) - val newItem = updateDataCopy.safelyGetInRelease(newItemPosition) - return areItemsTheSame(oldItem, newItem) - } + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = mDataList.safelyGetInRelease(oldItemPosition) + val newItem = updateDataCopy.safelyGetInRelease(newItemPosition) + return areItemsTheSame(oldItem, newItem) + } - override fun areContentsTheSame( - oldItemPosition: Int, - newItemPosition: Int - ): Boolean { - val oldItem = mDataList.safelyGetInRelease(oldItemPosition) - val newItem = updateDataCopy.safelyGetInRelease(newItemPosition) - return areContentsTheSame(oldItem, newItem) + override fun areContentsTheSame( + oldItemPosition: Int, + newItemPosition: Int + ): Boolean { + val oldItem = mDataList.safelyGetInRelease(oldItemPosition) + val newItem = updateDataCopy.safelyGetInRelease(newItemPosition) + return areContentsTheSame(oldItem, newItem) + } + }) + ListExecutor.uiExecutor.execute { + mDataList = updateDataCopy + diffResult.dispatchUpdatesTo(this@DiffUtilAdapter) } - }) - ListExecutor.uiExecutor.execute { - mDataList = ArrayList(updateData) - diffResult.dispatchUpdatesTo(this@DiffUtilAdapter) } + } catch (e: IndexOutOfBoundsException) { + testChannelOnly { + ToastUtils.toast("DiffUtilAdapter 遇到数组越界异常,请检查") + } + mDataList = updateDataCopy + notifyDataSetChanged() } } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java b/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java index 6802e3a18e..bf5b7dc823 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java +++ b/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java @@ -253,4 +253,5 @@ public class EntranceConsts { public static final String KEY_FORMAT = "format"; public static final String KEY_VERSION_CODE = "version_code"; public static final String KEY_PLATFORM_REQUESTS_ID = "platform_requests_id"; + public static final String KEY_TOP_ID = "top_id"; } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/loghub/LoghubUtils.kt b/module_common/src/main/java/com/gh/gamecenter/common/loghub/LoghubUtils.kt index fa0a16a945..8150b4e782 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/loghub/LoghubUtils.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/loghub/LoghubUtils.kt @@ -4,6 +4,7 @@ import androidx.annotation.Keep import com.aliyun.sls.android.producer.Log import com.gh.gamecenter.common.entity.ExposureEntity import com.gh.gamecenter.common.exposure.meta.Meta +import com.gh.gamecenter.core.runOnUiThread import org.json.JSONObject object LoghubUtils { @@ -15,32 +16,36 @@ object LoghubUtils { @JvmStatic @JvmOverloads fun log(logJson: JSONObject, logStore: String, forcedUpload: Boolean, isFlat: Boolean = false) { - val event = LoghubEvent( - time = (System.currentTimeMillis() / 1000L).toString(), - content = logJson.toString(), - logStore = logStore, - isFlat = isFlat - ) - loghubEventSet.add(event) + runOnUiThread { + val event = LoghubEvent( + time = (System.currentTimeMillis() / 1000L).toString(), + content = logJson.toString(), + logStore = logStore, + isFlat = isFlat + ) + loghubEventSet.add(event) - if (forcedUpload || loghubEventSet.size >= STORE_SIZE) { - commitSavedLoghubEvents(forcedUpload) + if (forcedUpload || loghubEventSet.size >= STORE_SIZE) { + commitSavedLoghubEvents(forcedUpload) + } } } @JvmStatic @JvmOverloads fun log(jsonString: String, logStore: String, forcedUpload: Boolean, isFlat: Boolean = false) { - val event = LoghubEvent( - time = (System.currentTimeMillis() / 1000L).toString(), - content = jsonString, - logStore = logStore, - isFlat = isFlat - ) - loghubEventSet.add(event) + runOnUiThread { + val event = LoghubEvent( + time = (System.currentTimeMillis() / 1000L).toString(), + content = jsonString, + logStore = logStore, + isFlat = isFlat + ) + loghubEventSet.add(event) - if (forcedUpload || loghubEventSet.size >= STORE_SIZE) { - commitSavedLoghubEvents(forcedUpload) + if (forcedUpload || loghubEventSet.size >= STORE_SIZE) { + commitSavedLoghubEvents(forcedUpload) + } } } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt index fa18bc0f66..8f6bd309cb 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt @@ -12,6 +12,7 @@ import android.graphics.Rect import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable import android.os.Build +import android.os.Looper import android.text.* import android.text.format.Formatter import android.text.style.ClickableSpan @@ -44,14 +45,16 @@ import com.alibaba.android.arouter.launcher.ARouter import com.facebook.drawee.view.SimpleDraweeView import com.gh.gamecenter.common.BuildConfig import com.gh.gamecenter.common.R -import com.gh.gamecenter.common.constant.Constants -import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.callback.SimpleCallback import com.gh.gamecenter.common.constant.Config +import com.gh.gamecenter.common.constant.Constants +import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.view.CustomLinkMovementMethod import com.gh.gamecenter.common.view.ExpandTextView +import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.HaloApp import com.gh.gamecenter.core.provider.* +import com.gh.gamecenter.core.runOnUiThread import com.gh.gamecenter.core.utils.* import com.google.gson.reflect.TypeToken import com.lightgame.download.DownloadEntity diff --git a/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt b/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt index 66f0cb3cf9..7cbec3dc4e 100644 --- a/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt +++ b/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt @@ -72,5 +72,9 @@ fun runOnIoThread( } fun runOnUiThread(f: () -> Unit) { - uiExecutor.execute(f) + if (Thread.currentThread() == Looper.getMainLooper().thread) { + f.invoke() + } else { + uiExecutor.execute(f) + } } \ No newline at end of file diff --git a/scripts/build_with_simple_backup.sh b/scripts/build_with_simple_backup.sh index 2ac6f67e4e..6b72e33d26 100755 --- a/scripts/build_with_simple_backup.sh +++ b/scripts/build_with_simple_backup.sh @@ -31,7 +31,7 @@ rm -r module_common/src/main/res/drawable-night-xxxhdpi rm -r module_common/src/main/res/drawable-night-nodpi rm -r module_common/src/main/res/drawable-night sed -i 's/buildConfigField "boolean", "IS_NIGHT_MODE_ON", "true"/buildConfigField "boolean", "IS_NIGHT_MODE_ON", "false"/g' module_common/build.gradle -sed -i 's/buildConfigField "boolean", "IS_VGAME_ON", "true"/buildConfigField "boolean", "IS_VGAME_ON", "false"/g' module_common/build.gradle +sed -i 's/buildConfigField "boolean", "IS_VGAME_ON", "true"/buildConfigField "boolean", "IS_VGAME_ON", "true"/g' module_common/build.gradle ./gradlew --stop ./gradlew clean