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 9fe7cde371..dbc9102aad 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/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/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/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() 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();