From a2153761c208ca9dec90eb1bc77f414ded00a33e Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 30 Jul 2024 14:21:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E5=AE=89=E8=A3=85=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BC=98=E5=8C=96-2024/7/30-=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E9=97=AE=E9=A2=98=20https://jira.shanqu.cc/browse/GHZ?= =?UTF-8?q?SCY-6357?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenjuntao --- .../java/com/gh/download/DownloadManager.java | 24 ++++++++++--------- .../java/com/gh/gamecenter/MainActivity.java | 3 --- .../hud/ResumeDownloadHudHandler.kt | 4 ++++ .../main/java/com/halo/assistant/HaloApp.java | 3 +++ 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 5a3366313c..81eb5daf23 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -996,19 +996,21 @@ public class DownloadManager implements DownloadStatusListener { * 3.检查是否显示下载通知栏 */ public void initDownloadService() { - final Set urlSet = NDataChanger.INSTANCE.getDownloadingTaskUrlSet(); - for (DownloadEntity downloadEntity : getAllDownloadEntity()) { - if (!urlSet.contains(downloadEntity.getUrl()) - && (downloadEntity.getStatus().equals(DownloadStatus.downloading) - || downloadEntity.getStatus().equals(DownloadStatus.waiting))) { - downloadEntity.setStatus(DownloadStatus.subscribe); - mDownloadDao.newOrUpdate(downloadEntity); - NDataChanger.INSTANCE.notifyDataChanged(downloadEntity); + packageExecutor.execute(() -> { + final Set urlSet = NDataChanger.INSTANCE.getDownloadingTaskUrlSet(); + for (DownloadEntity downloadEntity : getAllDownloadEntity()) { + if (!urlSet.contains(downloadEntity.getUrl()) + && (downloadEntity.getStatus().equals(DownloadStatus.downloading) + || downloadEntity.getStatus().equals(DownloadStatus.waiting))) { + downloadEntity.setStatus(DownloadStatus.subscribe); + mDownloadDao.newOrUpdate(downloadEntity); + NDataChanger.INSTANCE.notifyDataChanged(downloadEntity); + } } - } - startDownloadService(); - checkAndRetryDownload(true); + startDownloadService(); + checkAndRetryDownload(true); + }); } /** diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 2afaa1c9f5..29c7e02c55 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -255,9 +255,6 @@ public class MainActivity extends BaseActivity { } } - // 必须放在这里,否则会导致获取 baseActivity 不是本应用包名 - DownloadManager.getInstance().initDownloadService(); - ReservationRepository.refreshReservations(); // 跳转至其它页面 diff --git a/app/src/main/java/com/gh/gamecenter/hud/ResumeDownloadHudHandler.kt b/app/src/main/java/com/gh/gamecenter/hud/ResumeDownloadHudHandler.kt index 01c1733339..b20540b739 100644 --- a/app/src/main/java/com/gh/gamecenter/hud/ResumeDownloadHudHandler.kt +++ b/app/src/main/java/com/gh/gamecenter/hud/ResumeDownloadHudHandler.kt @@ -20,6 +20,10 @@ class ResumeDownloadHudHandler(priority: Int) : PriorityChainHandler(priority) { val isOnWiFiNetwork: Boolean = NetworkUtils.isWifiConnected(HaloApp.getInstance()) val downloadingEntitySnapshotList = DownloadManager.getInstance().allDownloadEntitySnapshots.filter { it.status == DownloadStatus.downloading + || it.status == DownloadStatus.pause + || it.status == DownloadStatus.subscribe + || it.status == DownloadStatus.timeout + || it.status == DownloadStatus.neterror } if (!isOnWiFiNetwork || downloadingEntitySnapshotList.isEmpty()) { diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index dc340584f1..5efb2837e9 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -364,6 +364,9 @@ public class HaloApp extends MultiDexApplication { // 必须放在外面,否则不能及时刷新用户数据 UserRepository.getInstance().getLoginUserInfo(); + // 初始化下载服务,恢复下载任务 + DownloadManager.getInstance().initDownloadService(); + GlobalPriorityChainHelper.INSTANCE.preStart(isNewForThisVersion); MainWrapperRepository.Companion.getInstance().getDataUnion(); From ee14ae51bef9f8851e2e4db2d6e1000e5de09cf6 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Wed, 31 Jul 2024 16:50:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E5=AE=89=E8=A3=85=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BC=98=E5=8C=96-2024/7/31-=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A1=A5=E5=85=85=20https://jira.shanqu.cc/browse/GHZSCY-6368?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenjuntao --- .../dialog/SpecialDownloadDialogFragment.kt | 18 ++++++++++++++++++ .../com/gh/ndownload/NDownloadService.java | 6 ++++++ .../utils/NDownloadSuspendWindowHelper.kt | 5 ++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/SpecialDownloadDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/SpecialDownloadDialogFragment.kt index c5b5534b0f..0b09133069 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/SpecialDownloadDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/SpecialDownloadDialogFragment.kt @@ -2,6 +2,7 @@ package com.gh.gamecenter.gamedetail.dialog import android.app.Dialog import android.content.DialogInterface +import android.content.Intent import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -34,8 +35,10 @@ import com.gh.gamecenter.feature.view.TrapezoidDownloadButton import com.gh.gamecenter.gamedetail.LibaoListFragment import com.gh.gamecenter.gamedetail.fuli.kaifu.ServersCalendarActivity import com.gh.gamecenter.manager.PackagesManager +import com.gh.ndownload.NDownloadService import com.gh.ndownload.suspendwindow.utils.NDownloadSuspendWindowHelper import com.lightgame.download.DataWatcher +import com.lightgame.download.DownloadConfig import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadStatus @@ -51,6 +54,8 @@ class SpecialDownloadDialogFragment : BaseDraggableDialogFragment() { private var installedVersionMisMatched = false + private var showSuspendIconWindowOnResume = false + private val subContainerViewIdArray = arrayOf( R.id.rightBottomTrapezoidContainer, R.id.leftTrapezoidContainer, @@ -183,6 +188,18 @@ class SpecialDownloadDialogFragment : BaseDraggableDialogFragment() { viewModel?.updateDisplayContent(requireContext()) + if (showSuspendIconWindowOnResume + && NDownloadSuspendWindowHelper.canDrawOverLayer(requireContext()) + && downloadEntity != null) { + + val intent = Intent(requireContext(), NDownloadService::class.java) + intent.putExtra(DownloadConfig.KEY_DOWNLOAD_ENTRY, downloadEntity) + intent.putExtra(NDownloadService.KEY_SERVICE_ACTION, NDownloadService.ACTION_SHOW_SUSPEND_WINDOW) + + requireContext().startService(intent) + showSuspendIconWindowOnResume = false + } + if (downloadEntity == null) { if (boundedGameEntity?.getApk()?.firstOrNull()?.version != PackageUtils.getVersionNameByPackageName(packageName) @@ -306,6 +323,7 @@ class SpecialDownloadDialogFragment : BaseDraggableDialogFragment() { titleIv.setImageResource(R.drawable.ic_special_download_text_enable_fast_download) hintTv.text = getString(R.string.special_download_tips_click_to_enable) subTipsView.setOnClickListener { + showSuspendIconWindowOnResume = true NDownloadSuspendWindowHelper .requestDrawOverlayPermission( requireActivity(), diff --git a/app/src/main/java/com/gh/ndownload/NDownloadService.java b/app/src/main/java/com/gh/ndownload/NDownloadService.java index e747b8d248..28750eabcf 100644 --- a/app/src/main/java/com/gh/ndownload/NDownloadService.java +++ b/app/src/main/java/com/gh/ndownload/NDownloadService.java @@ -36,6 +36,8 @@ public class NDownloadService extends Service { public static final String KEY_SERVICE_ACTION = "service_action"; public static final String START_FOREGROUND = "start_foreground"; + public static final String ACTION_SHOW_SUSPEND_WINDOW = "action_show_suspend_window"; + private static final String SERVICE_CHANNEL_ID = "Halo_Download"; private static NDownloadService sService = null; @@ -73,6 +75,10 @@ public class NDownloadService extends Service { if (START_FOREGROUND.equals(serviceAction)) { startForegroundIfNeeded(randomNotificationId); + } else if (ACTION_SHOW_SUSPEND_WINDOW.equals(serviceAction)) { + DownloadEntity entry = (DownloadEntity) intent.getSerializableExtra(DownloadConfig.KEY_DOWNLOAD_ENTRY); + showDownloadSuspendWindowIfNeeded(entry); + return START_NOT_STICKY; } String statusString = intent.getStringExtra(DownloadConfig.KEY_DOWNLOAD_ACTION); diff --git a/app/src/main/java/com/gh/ndownload/suspendwindow/utils/NDownloadSuspendWindowHelper.kt b/app/src/main/java/com/gh/ndownload/suspendwindow/utils/NDownloadSuspendWindowHelper.kt index cf567708ce..924117527d 100644 --- a/app/src/main/java/com/gh/ndownload/suspendwindow/utils/NDownloadSuspendWindowHelper.kt +++ b/app/src/main/java/com/gh/ndownload/suspendwindow/utils/NDownloadSuspendWindowHelper.kt @@ -10,6 +10,7 @@ import com.gh.common.util.PackageChangeHelper import com.gh.common.xapk.XapkInstaller import com.gh.download.DownloadManager import com.gh.gamecenter.common.constant.Constants +import com.gh.gamecenter.common.utils.asVGame import com.gh.gamecenter.common.utils.getExtension import com.gh.gamecenter.common.utils.isSimulatorDownload import com.gh.gamecenter.common.utils.isSimulatorGame @@ -179,9 +180,7 @@ object NDownloadSuspendWindowHelper { || downloadEntity.packageName == VHelper.DEFAULT_VSPACE_PACKAGENAME || downloadEntity.packageName == VHelper.VSPACE_32BIT_PACKAGENAME || downloadEntity.path.getExtension() == XapkInstaller.XAPK_EXTENSION_NAME - || downloadEntity.meta[Constants.EXTRA_DOWNLOAD_TYPE] == Constants.VGAME - || downloadEntity.meta[Constants.EXTRA_DOWNLOAD_TYPE] == Constants.DUAL_DOWNLOAD_VGAME - || downloadEntity.isPlugin + || downloadEntity.asVGame() || downloadEntity.isPluggable || downloadEntity.isSimulatorDownload() || downloadEntity.isSimulatorGame()