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 dd2ec33337..d4963820d2 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -595,7 +595,7 @@ public class BindingAdapters { case neterror: case waiting: progressBar.setText(R.string.downloading); - if (downloadEntity.isPluggable() && PackagesManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { + if (downloadEntity.isPluggable() && PackagesManager.isInstalled(downloadEntity.getPackageName())) { progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN); } else { progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_NORMAL); @@ -604,7 +604,7 @@ public class BindingAdapters { case done: progressBar.setText(R.string.install); if (downloadEntity.isPluggable() - && PackagesManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { + && PackagesManager.isInstalled(downloadEntity.getPackageName())) { progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_PLUGIN); } else { progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_NORMAL); 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 82fbaeb306..c90244ad23 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -266,7 +266,7 @@ public class DetailDownloadUtils { String downloadingText = "游戏加载中 " + downloadEntity.getPercent() + "%"; String resumeText = "继续加载 " + downloadEntity.getPercent() + "%"; viewHolder.mDownloadPb.setText((downloadEntity.getStatus() == DownloadStatus.downloading || downloadEntity.getStatus() == DownloadStatus.redirected) ? downloadingText : resumeText); - if (downloadEntity.isPluggable() && PackagesManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { + if (downloadEntity.isPluggable() && PackagesManager.isInstalled(downloadEntity.getPackageName())) { viewHolder.mDownloadPb.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN); } else { viewHolder.mDownloadPb.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_NORMAL); diff --git a/app/src/main/java/com/gh/download/PackageObserver.kt b/app/src/main/java/com/gh/download/PackageObserver.kt index 3086430629..2853fd662a 100644 --- a/app/src/main/java/com/gh/download/PackageObserver.kt +++ b/app/src/main/java/com/gh/download/PackageObserver.kt @@ -91,9 +91,11 @@ object PackageObserver { } if (EBPackage.TYPE_INSTALLED == busFour.type) { - mPackageViewModel.addInstalledGame(packageName) - - BrowserInstallHelper.onApkInstalled(mDownloadEntity?.path) + if (!busFour.isVGame) { + // 非畅玩游戏才执行下面的代码 + mPackageViewModel.addInstalledGame(packageName) + BrowserInstallHelper.onApkInstalled(mDownloadEntity?.path) + } if (mDownloadEntity != null) { // 没有光环 ID 的都记录一下游戏 ID,供'我的游戏'区分同包名不同插件用 @@ -136,7 +138,7 @@ object PackageObserver { runOnIoThread { postNewlyInstalledApp(gameId, packageName) } } - if ("卸载" == busFour.type) { + if (EBPackage.TYPE_UNINSTALLED == busFour.type) { mPackageViewModel.addUninstalledGame(packageName) mDownloadEntity?.let { if (it.isVGame()) return@let diff --git a/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragmentAdapter.kt index b03493afb2..7f0220878c 100644 --- a/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragmentAdapter.kt @@ -26,7 +26,7 @@ import com.gh.gamecenter.feature.databinding.GameItemBinding import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.utils.PlatformUtils import com.gh.gamecenter.feature.game.GameItemViewHolder -import com.gh.gamecenter.manager.PackagesManager.isInstalled +import com.gh.gamecenter.manager.PackagesManager import com.lightgame.adapter.BaseRecyclerAdapter import java.util.* @@ -120,7 +120,7 @@ class NewInstalledGameFragmentAdapter(context: Context, private var mViewModel: if (pluggableCollection != null && pluggableCollection.packages.contains(packageName)) { for (pkg in pluggableCollection.packages) { val ghId = PackageUtils.getGhId(pkg) - if (isInstalled(pkg) && ghId != null && gameEntity.id == ghId.toString()) { + if (PackagesManager.isInstalled(pkg) && ghId != null && gameEntity.id == ghId.toString()) { holder.binding.downloadBtn.setText(R.string.launch) holder.binding.downloadBtn.setBackgroundResource(R.drawable.download_button_normal_style) } 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 9f70917eae..bbf24008f9 100644 --- a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt @@ -2,6 +2,7 @@ package com.gh.gamecenter.eventbus class EBPackage(var type: String, var packageName: String, var versionName: String?) { var gameId: String? = null + var isVGame: Boolean = false // 是否是畅玩游戏 fun isInstalledOrUninstalled() : Boolean { return type == TYPE_INSTALLED || type == TYPE_UNINSTALLED diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt index 95bc5e6402..02d1fbfa79 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt +++ b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt @@ -5,8 +5,8 @@ import com.gh.common.constant.Config import com.gh.common.util.PackageUtils import com.gh.gamecenter.entity.GameInstall import com.gh.gamecenter.entity.GameUpdateEntity -import com.halo.assistant.HaloApp import java.util.* +import kotlin.collections.ArrayList /** * todo 整理部分与[PackageUtils]冲突的方法 @@ -14,22 +14,15 @@ import java.util.* object PackagesManager { // 存在网络延迟 - private var updateAndPluginList = ArrayList() - private val installedList = ArrayList() + private var mUpdateAndPluginList = ArrayList() + private val mInstalledList = ArrayList() - // 实时更新(对应安装/卸载广播) - private val installedPkgList = Collections.synchronizedList(ArrayList()) - - /** - * 获取更新列表数量 - * - * @return 更新列表数量 - */ - val updateListSize: Int get() = updateAndPluginList.size + // 实时更新(已安装到本地的包名列表,不包括畅玩游戏) + private val mInstalledPkgList = Collections.synchronizedList(ArrayList()) fun initInstallPkgList(list: List) { - installedPkgList.clear() - installedPkgList.addAll(list) + mInstalledPkgList.clear() + mInstalledPkgList.addAll(list) } /** @@ -38,7 +31,7 @@ object PackagesManager { * @param list 更新列表 */ fun initGameUpdate(list: ArrayList) { - updateAndPluginList = list + mUpdateAndPluginList = list } /** @@ -48,8 +41,8 @@ object PackagesManager { * @param list 已安装列表数据 */ fun initGameInstall(list: ArrayList) { - installedList.clear() - installedList.addAll(list) + mInstalledList.clear() + mInstalledList.addAll(list) } /** @@ -59,7 +52,7 @@ object PackagesManager { */ @JvmStatic fun getInstalledList(): ArrayList { - return installedList + return mInstalledList } /** @@ -69,21 +62,7 @@ object PackagesManager { */ @JvmStatic fun getFilterSameApkInstalledList(): ArrayList { - return filterSameApk(installedList) - } - - /** - * 获取过滤同游戏已安装游戏的包名list - * - * @return - */ - @JvmStatic - fun getFilterSameGameInstalledList(): ArrayList { - val map = HashMap() - for (gameInstall in filterSameApk(installedList)) { - map[gameInstall.id!!] = gameInstall - } - return ArrayList(map.values) + return filterSameApk(mInstalledList) } /** @@ -92,11 +71,11 @@ object PackagesManager { * @return 可更新游戏列表 */ fun getUpdateList(): ArrayList { - return updateAndPluginList + return mUpdateAndPluginList } /** - * 根据包名 判断是否安装该游戏 + * 根据包名 判断是否安装该游戏 (与 PackageUtils 的是否已安装判断不一样,这里仅在该包名应用被后台收录且安装是返回 true) * * @param packageName 包名 * @return true 已安装 false 未安装 @@ -107,9 +86,7 @@ object PackagesManager { return false } - // TODO 检查为什么 4.3.0 以后 arrayList.contains 也会触发 outOfBounds 异常,而以前不会,因为 kotlin 版本更新? - // 先简单改成 SynchronizedList - return installedPkgList.contains(packageName) && PackageUtils.isInstalled(HaloApp.getInstance(), packageName) + return mInstalledPkgList.contains(packageName) } /** @@ -144,7 +121,7 @@ object PackagesManager { if (TextUtils.isEmpty(packageName)) { return null } - for (gameInstall in installedList) { + for (gameInstall in mInstalledList) { if (gameInstall.packageName == packageName) { return gameInstall } @@ -160,7 +137,7 @@ object PackagesManager { * @return true 可以更新 false 不可以更新 */ fun isCanUpdate(gameId: String?, packageName: String?): Boolean { - for (entity in updateAndPluginList) { + for (entity in mUpdateAndPluginList) { if (!entity.isPluggable && entity.packageName == packageName && entity.id == gameId) { return true } @@ -173,7 +150,7 @@ object PackagesManager { */ fun isCanPluggable(gameId: String?, packageName: String?): Boolean { if (gameId.isNullOrEmpty() || packageName.isNullOrEmpty()) return false - for (entity in updateAndPluginList) { + for (entity in mUpdateAndPluginList) { if (entity.isPluggable && gameId == entity.id && packageName == entity.packageName) { return true } @@ -181,37 +158,6 @@ object PackagesManager { return false } - /** - * 根据游戏Id获取已安装的游戏数据 - */ - @JvmStatic - fun findInstallById(gameId: String?): GameInstall? { - if (TextUtils.isEmpty(gameId)) return null - for (gameInstall in installedList) { - if (gameId == gameInstall.id) { - return gameInstall - } - } - return null - } - - - /** - * 根据游戏Id获取已安装的游戏数据 - */ - @JvmStatic - fun findInstallByIdExcludeBlackPackage(gameId: String?): GameInstall? { - if (TextUtils.isEmpty(gameId)) return null - - val list: List = filterDownloadBlackPackage(installedList) ?: return null - for (gameInstall in list) { - if (gameId == gameInstall.id) { - return gameInstall - } - } - return null - } - /** * 过滤同包名游戏,取最后一个 * @return diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 8944451fa9..9afdfca67a 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -402,7 +402,10 @@ object PackageRepository { * @param pkgNameList 数组列表 */ fun addInstalledGames(pkgNameList: ArrayList, isVGameOnly: Boolean = false) { - mInstalledPkgList.addAll(pkgNameList) + // 畅玩游戏不添加至本地的已安装包名列表中 + if (!isVGameOnly) { + mInstalledPkgList.addAll(pkgNameList) + } notifyInstallPkgData() updateFilterPackage(pkgNameList) { diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt index d1e644aba7..fff2498ddf 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt @@ -31,13 +31,6 @@ class PackageViewModel( } } - /** - * 获取可更新列表的 LiveData(不过滤同包名) - */ - fun getGameUpdateLiveData(): MutableLiveData> { - return mRepository.gameUpdateLiveData - } - /** * 获取可更新列表的 LiveData(数据包括当前版本,供下载管理-更新显示我的版本用) */ diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 9635ceccec..684cda50f5 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -530,6 +530,7 @@ object VHelper { PackageObserver.onPackageChanged( EBPackage(EBPackage.TYPE_INSTALLED, result.packageName, "unknown").also { it.gameId = downloadEntity.gameId + it.isVGame = true } ) insertInstalledGameToProvider(downloadEntity)