diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt
index 2ef9f7701..8e8a6f2db 100644
--- a/app/src/main/java/io/legado/app/constant/AppPattern.kt
+++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt
@@ -12,7 +12,7 @@ object AppPattern {
val imgPattern: Pattern = Pattern.compile("]*src=\"([^\"]*(?:\"[^>]+\\})?)\"[^>]*>")
val nameRegex = Regex("\\s+作\\s*者.*|\\s+\\S+\\s+著")
- val authorRegex = Regex("^.*?作\\s*者[::\\s]*|\\s+著")
+ val authorRegex = Regex("^\\s*作\\s*者[::\\s]+|\\s+著")
val fileNameRegex = Regex("[\\\\/:*?\"<>|.]")
val splitGroupRegex = Regex("[,;,;]")
diff --git a/app/src/main/java/io/legado/app/service/DownloadService.kt b/app/src/main/java/io/legado/app/service/DownloadService.kt
index fbd3d6e71..6b870bc08 100644
--- a/app/src/main/java/io/legado/app/service/DownloadService.kt
+++ b/app/src/main/java/io/legado/app/service/DownloadService.kt
@@ -8,6 +8,7 @@ import android.content.IntentFilter
import android.net.Uri
import android.os.Build
import androidx.core.app.NotificationCompat
+import androidx.core.app.NotificationManagerCompat
import androidx.core.content.FileProvider
import io.legado.app.R
import io.legado.app.base.BaseService
@@ -21,12 +22,15 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
+import splitties.init.appCtx
import splitties.systemservices.downloadManager
+import splitties.systemservices.notificationManager
import java.io.File
class DownloadService : BaseService() {
-
+ private val groupKey = "${appCtx.packageName}.download"
+ private val summaryId = 745893
private val downloads = hashMapOf()
private val completeDownloads = hashSetOf()
private var upStateJob: Job? = null
@@ -38,6 +42,7 @@ class DownloadService : BaseService() {
override fun onCreate() {
super.onCreate()
+ upSummaryNotification()
registerReceiver(downloadReceiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
}
@@ -61,7 +66,7 @@ class DownloadService : BaseService() {
IntentAction.stop -> {
val downloadId = intent.getLongExtra("downloadId", 0)
downloads.remove(downloadId)
- stopSelf()
+ notificationManager.cancel(downloadId.toInt())
}
}
return super.onStartCommand(intent, flags, startId)
@@ -87,6 +92,10 @@ class DownloadService : BaseService() {
//查询下载进度
private fun queryState() {
+ if (downloads.isEmpty()) {
+ stopSelf()
+ return
+ }
val ids = downloads.keys
val query = DownloadManager.Query()
query.setFilterById(*ids.toLongArray())
@@ -144,6 +153,24 @@ class DownloadService : BaseService() {
}
}
+ private fun upSummaryNotification() {
+ val notificationBuilder = NotificationCompat.Builder(this, AppConst.channelIdDownload)
+ .setSmallIcon(R.drawable.ic_download)
+ .setOngoing(true)
+ .setContentTitle(getString(R.string.action_download))
+ notificationBuilder.addAction(
+ R.drawable.ic_stop_black_24dp,
+ getString(R.string.cancel),
+ servicePendingIntent(IntentAction.stop) {
+ putExtra("downloadId", -1)
+ }
+ )
+ notificationBuilder.setGroup(groupKey)
+ .setGroupSummary(true)
+ val notification = notificationBuilder.build()
+ startForeground(summaryId, notification)
+ }
+
/**
* 更新通知
*/
@@ -172,9 +199,11 @@ class DownloadService : BaseService() {
notificationBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
notificationBuilder.setContentText(content)
notificationBuilder.setProgress(max, progress, false)
- notificationBuilder.setAutoCancel(true)
+ notificationBuilder.setGroup(groupKey)
val notification = notificationBuilder.build()
- startForeground(downloadId.toInt(), notification)
+ NotificationManagerCompat.from(this).apply {
+ notify(downloadId.toInt(), notification)
+ }
}
}
\ No newline at end of file