From 5a377913bb33abf3941548122b400a26658c47d0 Mon Sep 17 00:00:00 2001 From: juntao Date: Thu, 30 Jun 2022 21:14:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=9D=9E=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E6=9B=B4=E6=96=B0=E4=BC=9A=E4=B8=A2=E5=A4=B1=E8=A7=92?= =?UTF-8?q?=E6=A0=87=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/PackageUtils.java | 2 + .../java/com/gh/download/DownloadManager.java | 47 +++++++++++-------- .../packagehelper/PackageRepository.kt | 7 ++- .../gh/vspace/HomeRecentVGameViewHolder.kt | 35 ++++++++------ app/src/main/java/com/gh/vspace/VHelper.kt | 9 +++- 5 files changed, 63 insertions(+), 37 deletions(-) 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 a272b3b028..7b24cfaf06 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -141,6 +141,8 @@ public class PackageUtils { updateEntity.setId(gameEntity.getId()); updateEntity.setName(gameEntity.getName()); updateEntity.setIcon(gameEntity.getIcon()); + updateEntity.setRawIcon(gameEntity.getRawIcon()); + updateEntity.setIconSubscript(gameEntity.getIconSubscript()); updateEntity.setPackageName(apkEntity.getPackageName()); updateEntity.setSize(apkEntity.getSize()); updateEntity.setVersion(apkEntity.getVersion()); diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index b7923b15f1..f8dcd4bbe4 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -322,7 +322,7 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setEntrance(entrance); downloadEntity.setLocation(location); downloadEntity.setVersionName(apkEntity.getVersion()); - ExtensionsKt.addMetaExtra(downloadEntity, Constants.APK_MD5, apkEntity.getMd5()); + ExtensionsKt.addMetaExtra(downloadEntity, Constants.APK_MD5, "12345"); ExtensionsKt.addMetaExtra(downloadEntity, Constants.DOWNLOAD_ID, downloadId); ExtensionsKt.addMetaExtra(downloadEntity, Constants.RAW_GAME_ICON, gameEntity.getRawIcon()); ExtensionsKt.addMetaExtra(downloadEntity, Constants.GAME_ICON_SUBSCRIPT, gameEntity.getIconSubscript()); @@ -774,30 +774,39 @@ public class DownloadManager implements DownloadStatusListener { } entry.setStatus(DownloadStatus.cancel); + if (cancelSilently) { + cancelAndNotify(entry, true); + return; + } + // 将原来安装完成后在 downloadService 完成的功能放到这里,避免因为 ANR 造成闪退 AppExecutor.getUiExecutor().executeWithDelay(() -> { - mDownloadDao.removeErrorMessage(entry.getUrl()); - - DownloadTask task = DataChanger.INSTANCE.getDownloadingTasks().get(entry.getUrl()); - if (task != null) { - task.cancel(); - // 改任务队列的状态 - DataChanger.INSTANCE.getDownloadingTasks().remove(entry.getUrl()); - if (!cancelSilently) { - DataChanger.INSTANCE.notifyDataChanged(entry); - } - } - DataChanger.INSTANCE.getDownloadEntries().remove(entry.getUrl()); - if (!cancelSilently) { - DataChanger.INSTANCE.notifyDataChanged(entry); - DownloadStatusManager.getInstance().onTaskCancelled(entry); - } - - Utils.log(DownloadManager.class.getSimpleName(), "cancel"); + cancelAndNotify(entry, false); }, 0); } } + private void cancelAndNotify(DownloadEntity entry, Boolean cancelSilently) { + mDownloadDao.removeErrorMessage(entry.getUrl()); + + DownloadTask task = DataChanger.INSTANCE.getDownloadingTasks().get(entry.getUrl()); + if (task != null) { + task.cancel(); + // 改任务队列的状态 + DataChanger.INSTANCE.getDownloadingTasks().remove(entry.getUrl()); + if (!cancelSilently) { + DataChanger.INSTANCE.notifyDataChanged(entry); + } + } + DataChanger.INSTANCE.getDownloadEntries().remove(entry.getUrl()); + if (!cancelSilently) { + DataChanger.INSTANCE.notifyDataChanged(entry); + DownloadStatusManager.getInstance().onTaskCancelled(entry); + } + + Utils.log(DownloadManager.class.getSimpleName(), "cancel"); + } + /** * 暂停所有正在下载的任务 */ 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 bd11cde67b..56025baaf3 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -260,7 +260,7 @@ object PackageRepository { return true } else if (game.isVGame()) { // 畅玩游戏移除更新,避免死循环更新 - removeUpdate(game.id) + removeUpdate(game.id, false) return true } @@ -360,8 +360,11 @@ object PackageRepository { * 移除更新 * @param gameId 游戏 ID */ - fun removeUpdate(gameId: String) { + fun removeUpdate(gameId: String, notifyUpdate: Boolean) { gameUpdate.removeAll { it.id == gameId } + if (notifyUpdate) { + notifyGameUpdateData() + } } /** diff --git a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt index 29a6993e40..064326e8c7 100644 --- a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt +++ b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt @@ -141,14 +141,28 @@ class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter( shouldShowDot = true } - if (PackagesManager.isCanUpdate(downloadEntity.gameId, downloadEntity.packageName)) { - shouldShowUpdate = true - } - when (downloadEntity.status) { DownloadStatus.done -> { - binding.root.setOnClickListener { - VHelper.installOrLaunch(binding.root.context, downloadEntity.packageName) + if (PackagesManager.isCanUpdate( + downloadEntity.gameId, + downloadEntity.packageName + ) + ) { + shouldShowUpdate = true + binding.root.setOnClickListener { + PackagesManager.getUpdateList() + .firstOrNull { it.id == downloadEntity.gameId } + ?.let { + VHelper.updateOrReDownload(downloadEntity, it) + } + } + } else { + binding.root.setOnClickListener { + VHelper.installOrLaunch( + binding.root.context, + downloadEntity.packageName + ) + } } } DownloadStatus.pause, @@ -166,6 +180,7 @@ class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter( DownloadStatus.downloading -> { shouldShowMask = true shouldShowProgressBar = true + shouldShowUpdate = false binding.progressBar.progressDrawable = R.drawable.bg_home_vgame_progress_active.toDrawable() binding.root.setOnClickListener { @@ -199,14 +214,6 @@ class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter( mBinding.dotView.goneIf(!shouldShowDot) mBinding.updateHintIv.goneIf(!shouldShowUpdate) - if (shouldShowUpdate) { - binding.root.setOnClickListener { - PackagesManager.getUpdateList().firstOrNull { it.id == downloadEntity.gameId } - ?.let { - VHelper.updateOrReDownload(downloadEntity, it) - } - } - } mBinding.controlTv.text = controlText mBinding.progressBar.progress = downloadEntity.percent.toInt() } diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 67d564bfb8..28eddc303e 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -224,7 +224,10 @@ object VHelper { if (containsUpdate) { val dialogType = if (mUpdateEntity!!.isForce) "强制更新" else "提示更新" NewLogUtils.logHaloFunEvent("halo_fun_update_dialog_show") - SPUtils.setString(KEY_LAST_ALERT_UPDATE_URL, mUpdateEntity!!.url + mUpdateEntity!!.alert) + SPUtils.setString( + KEY_LAST_ALERT_UPDATE_URL, + mUpdateEntity!!.url + mUpdateEntity!!.alert + ) DialogHelper.showDialog( context = context, title = "服务工具更新提示", @@ -617,7 +620,7 @@ object VHelper { ) originDownloadEntity.addMetaExtra(Constants.APK_MD5, updateEntity.md5) - PackageRepository.removeUpdate(updateEntity.id) + PackageRepository.removeUpdate(updateEntity.id, true) } originDownloadEntity.isUpdate = true @@ -660,6 +663,8 @@ object VHelper { ) ) icon = downloadEntity.icon + rawIcon = downloadEntity.getMetaExtra(Constants.RAW_GAME_ICON) + iconSubscript = downloadEntity.getMetaExtra(Constants.GAME_ICON_SUBSCRIPT) lastPlayedTime = if (lastPlayedTimeString == "") 0L else lastPlayedTimeString.toLong() playedTime = mInstalledInfoList.firstOrNull { it.packageName == getUniquePackageName() }?.appTotalPlayTime