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 2772bd1e9d..ee2af4122e 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -89,7 +89,7 @@ public class DetailDownloadUtils { if (downloadEntity == null && viewHolder.gameEntity.isVGame()) { String packageName = viewHolder.gameEntity.getUniquePackageName(); if (!TextUtils.isEmpty(packageName)) { - downloadEntity = VHelper.getDownloadEntitySnapshotByPackageName(packageName); + downloadEntity = VHelper.getDownloadEntitySnapshot(viewHolder.gameEntity.getId(), packageName); } } @@ -163,7 +163,7 @@ public class DetailDownloadUtils { if (downloadEntity == null && viewHolder.gameEntity.isVGame()) { String packageName = viewHolder.gameEntity.getUniquePackageName(); if (!TextUtils.isEmpty(packageName)) { - downloadEntity = VHelper.getDownloadEntitySnapshotByPackageName(packageName); + downloadEntity = VHelper.getDownloadEntitySnapshot(viewHolder.gameEntity.getId(), packageName); } } 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 4229c0df8c..a2c97ed398 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt @@ -228,7 +228,7 @@ object DownloadItemUtils { var downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity) if (downloadEntity == null && gameEntity.isVGame()) { - downloadEntity = VHelper.getDownloadEntitySnapshotByPackageName(gameEntity.getUniquePackageName() ?: "") + downloadEntity = VHelper.getDownloadEntitySnapshot(gameEntity.id, gameEntity.getUniquePackageName()) } if (downloadEntity != null) { diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index 9fb8e4e690..ef51cfa23c 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -109,7 +109,7 @@ public class GameUtils { // 在下载管理找不到下载实体,并且为畅玩游戏的时候到畅玩数据库里找 if (downloadEntity == null && gameEntity.isVGame()) { - downloadEntity = VHelper.getDownloadEntitySnapshotByPackageName(apkEntity.getPackageName()); + downloadEntity = VHelper.getDownloadEntitySnapshot(gameEntity.getId(), apkEntity.getPackageName()); } if (downloadEntity != null) { diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index a31ba82f3a..82d7518633 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -129,7 +129,7 @@ public class PackageUtils { // 畅玩游戏根据 md5 是否一致确定是否需要更新 if (gameEntity.isVGame()) { - VGameEntity vGameEntity = VHelper.getVGameSnapshot(apkEntity.getPackageName()); + VGameEntity vGameEntity = VHelper.getVGameSnapshot(gameEntity.getId(), apkEntity.getPackageName()); if (vGameEntity != null) { String md5FromInstalledVGame = ExtensionsKt.getMetaExtra(vGameEntity.getDownloadEntity(), Constants.APK_MD5); String md5FromRequest = apkEntity.getMd5(); diff --git a/app/src/main/java/com/gh/download/PackageObserver.kt b/app/src/main/java/com/gh/download/PackageObserver.kt index 39472e8b06..8c2c1a29b2 100644 --- a/app/src/main/java/com/gh/download/PackageObserver.kt +++ b/app/src/main/java/com/gh/download/PackageObserver.kt @@ -54,6 +54,8 @@ object PackageObserver { val application = HaloApp.getInstance().application val packageName = busFour.packageName val versionName = busFour.versionName + val preciseGameId = busFour.gameId + var gameId = "" var mDownloadEntity: DownloadEntity? = null val sp = PreferenceManager.getDefaultSharedPreferences(application) @@ -62,7 +64,8 @@ object PackageObserver { var foundMatchedGame = false // 是否找到準確的遊戲 (有可能出現同包名同版本的情況) for (downloadEntity in DownloadManager.getInstance().allDownloadEntity) { - if (packageName == downloadEntity.packageName) { + if (packageName == downloadEntity.packageName + && (preciseGameId == null || preciseGameId == downloadEntity.gameId)) { mDownloadEntity = downloadEntity gameId = mDownloadEntity.gameId if (TextUtils.isEmpty(busFour.versionName)) { @@ -105,11 +108,11 @@ object PackageObserver { } DownloadManager.getInstance().cancel(mDownloadEntity.url, false, true, false) - } - if (sp.getBoolean(CONCERN_GAME_SP_KEY, true)) { //设置页面控制是否安装后自动关注 - // 安装后关注游戏 - val finalDownloadEntity = mDownloadEntity - RetrofitManager.getInstance().api + + if (sp.getBoolean(CONCERN_GAME_SP_KEY, true)) { //设置页面控制是否安装后自动关注 + // 安装后关注游戏 + val finalDownloadEntity = mDownloadEntity + RetrofitManager.getInstance().api .getGameDigestByPackageName(UrlFilterUtils.getFilterQuery("package", packageName)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -117,13 +120,14 @@ object PackageObserver { override fun onResponse(response: List?) { for (gameDigestEntity in response!!) { if (!TextUtils.isEmpty(gameDigestEntity?.id)) { // 关注游戏 - if (finalDownloadEntity != null && gameDigestEntity?.id == finalDownloadEntity.gameId) { + if (gameDigestEntity?.id == finalDownloadEntity.gameId) { ConcernUtils.postConcernGameId(application, gameDigestEntity?.id ?: "", null, false) } } } } }) + } } runOnIoThread { postNewlyInstalledApp(gameId, packageName) } diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.java b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.java deleted file mode 100644 index 79b5736e40..0000000000 --- a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.gh.gamecenter.eventbus; - -public class EBPackage { - - private String type; - private String packageName; - private String versionName; - - public EBPackage(String type, String packageName, String versionName) { - this.type = type; - this.packageName = packageName; - this.versionName = versionName; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - - public String getVersionName() { - return versionName; - } - - public void setVersionName(String versionName) { - this.versionName = versionName; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt new file mode 100644 index 0000000000..0505633b0e --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBPackage.kt @@ -0,0 +1,6 @@ +package com.gh.gamecenter.eventbus + +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/receiver/InstallAndUninstallReceiver.java b/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java index d32a7e7735..86fd57a50c 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java +++ b/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java @@ -6,7 +6,6 @@ import android.content.Intent; import com.gh.gamecenter.common.utils.ExtensionsKt; import com.gh.gamecenter.core.AppExecutor; -import com.gh.common.util.DataUtils; import com.gh.common.util.InstallUtils; import com.gh.common.util.PackageHelper; import com.gh.common.util.PackageUtils; diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerAdapter.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerAdapter.kt index e63a0ba9ad..c3e115ed94 100644 --- a/app/src/main/java/com/gh/vspace/VDownloadManagerAdapter.kt +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerAdapter.kt @@ -294,9 +294,7 @@ class VDownloadManagerAdapter( downloadBtn.goneIf(mCurrentOption != ManageOption.OPTION_MANAGER) val downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity) - ?: VHelper.getDownloadEntitySnapshotByPackageName( - gameEntity.getUniquePackageName() ?: "" - ) + ?: VHelper.getDownloadEntitySnapshot(gameEntity.id, gameEntity.getUniquePackageName()) if (downloadEntity != null) { val status = downloadEntity.status diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt index b37ff0a39d..f15dac52c8 100644 --- a/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt @@ -94,7 +94,7 @@ class VDownloadManagerViewModel(application: Application) : VHelper.uninstall(packageName ?: "") runOnUiThread { - val event = EBPackage("卸载", packageName, "unknown") + val event = EBPackage("卸载", packageName ?: "", "unknown") EventBus.getDefault().post(event) PackageObserver.onPackageChanged(event) diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 9472a053cd..40dfacfec5 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -157,11 +157,14 @@ object VHelper { /** * 获取内存里的畅玩游戏快照 * + * @param gameId 游戏 ID * @param packageName 需要获取的畅玩游戏的包名 + * */ @JvmStatic - fun getVGameSnapshot(packageName: String?): VGameEntity? { - return mVGameSnapshotList.find { it.packageName == packageName } + fun getVGameSnapshot(gameId: String?, packageName: String?): VGameEntity? { + return mVGameSnapshotList.find { + it.packageName == packageName && (gameId == null || it.downloadEntity.gameId == gameId) } } private fun updateInstalledList() { @@ -209,7 +212,7 @@ object VHelper { && System.currentTimeMillis() - time < 5000 && !VFeedbackSuppressedSimpleDao().contains(packageName) ) { - getVGameSnapshot(packageName)?.let { + getVGameSnapshot(null, packageName)?.let { VFeedbackDialogFragment.show(activity, toGameEntity(it.downloadEntity)) mLastSuccessfullyLaunchedGame = null } @@ -410,7 +413,7 @@ object VHelper { "安装", result.packageName, "unknown" - ) + ).also { it.gameId = downloadEntity.gameId } ) insertInstalledGameToProvider(downloadEntity) } else { @@ -437,23 +440,25 @@ object VHelper { connectService(false, installClosure) } } - private fun insertInstalledGameToProvider(downloadEntity: DownloadEntity){ + + private fun insertInstalledGameToProvider(downloadEntity: DownloadEntity) { val values = ContentValues() val packageName = downloadEntity.packageName - if (packageName.isEmpty()){ + if (packageName.isEmpty()) { return } //主键 - values.put("package_name",packageName) - values.put("url",downloadEntity.url) - values.put("name",downloadEntity.name) - values.put("size",downloadEntity.size) - values.put("meta",GsonUtils.toJson(downloadEntity.meta)) - val type = if(PackageFlavorHelper.IS_TEST_FLAVOR) "test_flavor" else "" - values.put("type",type) + values.put("package_name", packageName) + values.put("url", downloadEntity.url) + values.put("name", downloadEntity.name) + values.put("size", downloadEntity.size) + values.put("meta", GsonUtils.toJson(downloadEntity.meta)) + val type = if (PackageFlavorHelper.IS_TEST_FLAVOR) "test_flavor" else "" + values.put("type", type) val uri = Uri.parse("content://com.lg.core.provider/download_game") - HaloApp.getInstance().contentResolver.insert(uri,values) + HaloApp.getInstance().contentResolver.insert(uri, values) } + /** * 安装或启动应用 */ @@ -475,7 +480,7 @@ object VHelper { // 检查下载管理是否有下载实体,有实体表明未安装成功 val downloadEntity = DownloadManager.getInstance() .getDownloadEntitySnapshotByPackageName(packageName) - ?: getDownloadEntitySnapshotByPackageName(packageName) + ?: getDownloadEntitySnapshot(gameId = null, packageName = packageName) if (downloadEntity != null) { val downloadedFile = File(downloadEntity.path) @@ -570,18 +575,18 @@ object VHelper { } /** - * 根据包名获取下载快照 + * 根据游戏 ID 和包名获取下载快照 */ @JvmStatic - fun getDownloadEntitySnapshotByPackageName(packageName: String?): DownloadEntity? { - return getVGameSnapshot(packageName)?.downloadEntity + fun getDownloadEntitySnapshot(gameId: String?, packageName: String?): DownloadEntity? { + return getVGameSnapshot(gameId, packageName)?.downloadEntity } /** * 更新游戏最后打开的时间 */ private fun updateLastPlayedTime(packageName: String) { - getVGameSnapshot(packageName)?.let { + getVGameSnapshot(null, packageName)?.let { it.downloadEntity.addMetaExtra( KEY_LAST_PLAYED_TIME, System.currentTimeMillis().toString() @@ -654,7 +659,7 @@ object VHelper { fun updateOrReDownload(gameEntity: GameEntity) { PackagesManager.getUpdateList().firstOrNull { it.id == gameEntity.id } ?.let { updateEntity -> - getVGameSnapshot(updateEntity.packageName) + getVGameSnapshot(gameEntity.id, updateEntity.packageName) ?.let { vGame -> updateOrReDownload(vGame.downloadEntity, updateEntity) } @@ -774,7 +779,7 @@ object VHelper { val rawInstalledPackageList = getInstalledPackageList() val validInstalledPackageList = arrayListOf() for (packageName in rawInstalledPackageList) { - if (getVGameSnapshot(packageName) != null) { + if (getVGameSnapshot(null, packageName) != null) { validInstalledPackageList.add(packageName) } }