From 3abc53d3b33274f40cfd5356bd358f25a21fe5cf Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Sat, 23 Feb 2019 10:33:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=A6=96=E9=A1=B5=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E6=9B=BF=E6=8D=A2=E5=8A=9F=E8=83=BD=20https://gitlab.?= =?UTF-8?q?ghzhushou.com/pm/halo-app-issues/issues/447?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/constant/Config.java | 2 +- .../java/com/gh/common/util/PackageHelper.kt | 11 ++- .../gh/gamecenter/entity/SettingsEntity.kt | 8 ++ .../com/gh/gamecenter/game/GameViewModel.kt | 78 +++++++++++++------ .../main/java/com/halo/assistant/HaloApp.java | 2 +- 5 files changed, 75 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java index 3c4d857e75..0aa1a5fa00 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -165,7 +165,7 @@ public class Config { mSettingsEntity = settingsEntity; // 加载完设置后刷新下 - PackageHelper.initBlackList(); + PackageHelper.initList(); } @Nullable diff --git a/app/src/main/java/com/gh/common/util/PackageHelper.kt b/app/src/main/java/com/gh/common/util/PackageHelper.kt index 5ee0a2c9b4..b488d89970 100644 --- a/app/src/main/java/com/gh/common/util/PackageHelper.kt +++ b/app/src/main/java/com/gh/common/util/PackageHelper.kt @@ -3,6 +3,7 @@ package com.gh.common.util import android.content.Context import android.content.pm.ApplicationInfo import com.gh.common.constant.Config +import com.gh.gamecenter.entity.SettingsEntity import com.halo.assistant.HaloApp object PackageHelper { @@ -16,6 +17,9 @@ object PackageHelper { // 本地已安装的包去掉关闭下载的包后的列表 var validLocalPackageNameSet = hashSetOf() + // 游戏包名匹配列表 + var relatedPackageList = arrayListOf() + // 本地已安装包的列表 var localPackageNameSet = hashSetOf() get() { @@ -34,13 +38,18 @@ object PackageHelper { } @JvmStatic - fun initBlackList() { + fun initList() { Config.getSettings()?.gameCommentBlackList?.let { commentPackageNameBlackList = ArrayList(it) } Config.getSettings()?.gameDownloadBlackList?.let { downloadPackageNameBlackList = ArrayList(it) } + Config.getSettings()?.gamePackageMatch?.let { + relatedPackageList = ArrayList(it) + } + + Config.getSettings()?.gameDownloadBlackList updateValidPackageNameList() } diff --git a/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.kt index 6187a7fb8f..319059e7f5 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.kt @@ -18,6 +18,8 @@ data class SettingsEntity( var gameCommentBlackList: List? = listOf(), @SerializedName("game_download_blacklist") var gameDownloadBlackList: List = listOf(), + @SerializedName("game_package_match") + var gamePackageMatch: List? = listOf(), @SerializedName("ad") var adList: List? = listOf(), @SerializedName("article_entrance") @@ -120,4 +122,10 @@ data class SettingsEntity( } } + data class GameWithPackages( + @SerializedName("game_id") + var gameId: String? = "", + var packages: List? = listOf() + ) + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt index 37390f5ea1..1b01f3e85a 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt @@ -341,29 +341,8 @@ class GameViewModel(application: Application, var blockData: SubjectRecommendEnt val data = subjectEntity.data if (data == null || data.isEmpty()) continue - val gameIdList = arrayListOf() // 专题包含的游戏 ID 列表 - val positionOfTheGameToReplaceList = arrayListOf() - - // 标记需要替换的已安装游戏 - for ((index, game) in data.withIndex()) { - gameIdList.add(game.id ?: "") - // 检查是否已安装该游戏里同包名的 APK - for (apk in game.getApk()) { - if (PackageHelper.validLocalPackageNameSet.contains(apk.packageName) - && !(index == 0 && !data[0].image.isNullOrEmpty())) { - // 将该位置的游戏标记为需要替换 - positionOfTheGameToReplaceList.add(index) - } - } - } - - if (positionOfTheGameToReplaceList.isNotEmpty()) { - for (position in positionOfTheGameToReplaceList) { - val replacingGame = GameRepositoryHelper.getOneUniqueGame(subjectEntity.relatedColumnId, gameIdList) - replacingGame?.let { - data[position] = replacingGame - } - } + subjectEntity.relatedColumnId?.let { + replaceInstalledApp(data, it) } if (!data[0].image.isNullOrEmpty()) { @@ -409,6 +388,59 @@ class GameViewModel(application: Application, var blockData: SubjectRecommendEnt itemDataList.postValue(mItemDataListCache) } + private fun replaceInstalledApp(gameList: MutableList, relatedCollectionId: String) { + val gameIdList = arrayListOf() // 专题包含的游戏 ID 列表 + val positionOfTheGameToReplaceList = arrayListOf() + + // 标记需要替换的已安装游戏 + for ((index, game) in gameList.withIndex()) { + gameIdList.add(game.id ?: "") + + // 是大图形式的游戏时不标记替换 + if ((index == 0 && !gameList[0].image.isNullOrEmpty())) { + continue + } + + var isThisPositionAdded = false + // 检查是否已安装该游戏里同包名的 APK + for (apk in game.getApk()) { + if (PackageHelper.validLocalPackageNameSet.contains(apk.packageName)) { + // 将该位置的游戏标记为需要替换 + positionOfTheGameToReplaceList.add(index) + isThisPositionAdded = true + break + } + } + + // 若此游戏所包含的 apk 没有已安装,那么再检查是否已安装有预设相关包名 + if (!isThisPositionAdded) { + var relatedPackageList = arrayListOf() + for (entity in PackageHelper.relatedPackageList) { + if (entity.gameId == game.id) { + relatedPackageList = ArrayList(entity.packages) + break + } + } + + for (packageName in relatedPackageList) { + if (PackageHelper.validLocalPackageNameSet.contains(packageName)) { + positionOfTheGameToReplaceList.add(index) + break + } + } + } + } + + if (positionOfTheGameToReplaceList.isNotEmpty()) { + for (position in positionOfTheGameToReplaceList) { + val replacingGame = GameRepositoryHelper.getOneUniqueGame(relatedCollectionId, gameIdList) + replacingGame?.let { + gameList[position] = replacingGame + } + } + } + } + private fun addGamePositionAndPackage(game: GameEntity) { var packages = "" for (apkEntity in game.getApk()) { diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 585b44d8c4..be08a31afb 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -133,7 +133,7 @@ public class HaloApp extends TinkerAppLike { LoadedApkHuaWei.hookHuaWeiVerifier(getApplication()); PackageHelper.refreshLocalPackageList(); - PackageHelper.initBlackList(); + PackageHelper.initList(); try { PushManager.init(mChannel);