1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-06-30 17:12:57 +00:00

Combine notification and ForegroundInfo creation methods

This commit is contained in:
Isira Seneviratne 2024-11-30 07:23:37 +05:30 committed by Profpatsch
parent 4e31ccebf8
commit c9d155a335
2 changed files with 44 additions and 51 deletions

View File

@ -1,6 +1,5 @@
package org.schabi.newpipe.local.subscription.workers package org.schabi.newpipe.local.subscription.workers
import android.app.Notification
import android.content.Context import android.content.Context
import android.content.pm.ServiceInfo import android.content.pm.ServiceInfo
import android.net.Uri import android.net.Uri
@ -30,8 +29,7 @@ class SubscriptionExportWorker(
) : CoroutineWorker(appContext, params) { ) : CoroutineWorker(appContext, params) {
// This is needed for API levels < 31 (Android S). // This is needed for API levels < 31 (Android S).
override suspend fun getForegroundInfo(): ForegroundInfo { override suspend fun getForegroundInfo(): ForegroundInfo {
val notification = createNotification(applicationContext.getString(R.string.export_ongoing)) return createForegroundInfo(applicationContext.getString(R.string.export_ongoing))
return createForegroundInfo(notification)
} }
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
@ -44,9 +42,8 @@ class SubscriptionExportWorker(
.map { SubscriptionItem(it.serviceId, it.url, it.name) } .map { SubscriptionItem(it.serviceId, it.url, it.name) }
val qty = subscriptions.size val qty = subscriptions.size
val title = val title = applicationContext.resources.getQuantityString(R.plurals.export_subscriptions, qty, qty)
applicationContext.resources.getQuantityString(R.plurals.export_subscriptions, qty, qty) setForeground(createForegroundInfo(title))
setForeground(createForegroundInfo(createNotification(title)))
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
applicationContext.contentResolver.openOutputStream(uri)?.use { applicationContext.contentResolver.openOutputStream(uri)?.use {
@ -80,18 +77,17 @@ class SubscriptionExportWorker(
} }
} }
private fun createNotification(title: String): Notification = private fun createForegroundInfo(title: String): ForegroundInfo {
NotificationCompat val notification =
.Builder(applicationContext, NOTIFICATION_CHANNEL_ID) NotificationCompat
.setSmallIcon(R.drawable.ic_newpipe_triangle_white) .Builder(applicationContext, NOTIFICATION_CHANNEL_ID)
.setOngoing(true) .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
.setProgress(-1, -1, true) .setOngoing(true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setProgress(-1, -1, true)
.setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(title) .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
.build() .setContentTitle(title)
.build()
private fun createForegroundInfo(notification: Notification): ForegroundInfo {
val serviceType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC else 0 val serviceType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC else 0
return ForegroundInfo(NOTIFICATION_ID, notification, serviceType) return ForegroundInfo(NOTIFICATION_ID, notification, serviceType)
} }

View File

@ -1,6 +1,5 @@
package org.schabi.newpipe.local.subscription.workers package org.schabi.newpipe.local.subscription.workers
import android.app.Notification
import android.content.Context import android.content.Context
import android.content.pm.ServiceInfo import android.content.pm.ServiceInfo
import android.os.Build import android.os.Build
@ -33,8 +32,7 @@ class SubscriptionImportWorker(
) : CoroutineWorker(appContext, params) { ) : CoroutineWorker(appContext, params) {
// This is needed for API levels < 31 (Android S). // This is needed for API levels < 31 (Android S).
override suspend fun getForegroundInfo(): ForegroundInfo { override suspend fun getForegroundInfo(): ForegroundInfo {
val title = applicationContext.getString(R.string.import_ongoing) return createForegroundInfo(applicationContext.getString(R.string.import_ongoing), null, 0, 0)
return createForegroundInfo(createNotification(title, null, 0, 0))
} }
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
@ -78,8 +76,7 @@ class SubscriptionImportWorker(
ExtractorHelper.getChannelTab(it.serviceId, channelInfo.tabs[0], true).await() ExtractorHelper.getChannelTab(it.serviceId, channelInfo.tabs[0], true).await()
val currentIndex = mutex.withLock { index++ } val currentIndex = mutex.withLock { index++ }
val notification = createNotification(title, channelInfo.name, currentIndex, qty) setForeground(createForegroundInfo(title, channelInfo.name, currentIndex, qty))
setForeground(createForegroundInfo(notification))
Pair(channelInfo, listOf(channelTab)) Pair(channelInfo, listOf(channelTab))
} }
@ -87,7 +84,7 @@ class SubscriptionImportWorker(
} }
title = applicationContext.resources.getQuantityString(R.plurals.import_subscriptions, qty, qty) title = applicationContext.resources.getQuantityString(R.plurals.import_subscriptions, qty, qty)
setForeground(createForegroundInfo(createNotification(title, null, 0, 0))) setForeground(createForegroundInfo(title, null, 0, 0))
index = 0 index = 0
val subscriptionManager = SubscriptionManager(applicationContext) val subscriptionManager = SubscriptionManager(applicationContext)
@ -96,7 +93,7 @@ class SubscriptionImportWorker(
subscriptionManager.upsertAll(chunk) subscriptionManager.upsertAll(chunk)
} }
index += chunk.size index += chunk.size
setForeground(createForegroundInfo(createNotification(title, null, index, qty))) setForeground(createForegroundInfo(title, null, index, qty))
} }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
@ -108,38 +105,38 @@ class SubscriptionImportWorker(
return Result.success() return Result.success()
} }
private fun createNotification( private fun createForegroundInfo(
title: String, title: String,
text: String?, text: String?,
currentProgress: Int, currentProgress: Int,
maxProgress: Int, maxProgress: Int,
): Notification = ): ForegroundInfo {
NotificationCompat val notification =
.Builder(applicationContext, NOTIFICATION_CHANNEL_ID) NotificationCompat
.setSmallIcon(R.drawable.ic_newpipe_triangle_white) .Builder(applicationContext, NOTIFICATION_CHANNEL_ID)
.setOngoing(true) .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
.setProgress(maxProgress, currentProgress, currentProgress == 0) .setOngoing(true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setProgress(maxProgress, currentProgress, currentProgress == 0)
.setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(title) .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
.setContentText(text) .setContentTitle(title)
.addAction( .setContentText(text)
R.drawable.ic_close, .addAction(
applicationContext.getString(R.string.cancel), R.drawable.ic_close,
WorkManager.getInstance(applicationContext).createCancelPendingIntent(id), applicationContext.getString(R.string.cancel),
).apply { WorkManager.getInstance(applicationContext).createCancelPendingIntent(id),
if (currentProgress > 0 && maxProgress > 0) { ).apply {
val progressText = "$currentProgress/$maxProgress" if (currentProgress > 0 && maxProgress > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val progressText = "$currentProgress/$maxProgress"
setSubText(progressText) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
} else { setSubText(progressText)
setContentInfo(progressText) } else {
setContentInfo(progressText)
}
} }
} }.build()
}.build()
private fun createForegroundInfo(notification: Notification): ForegroundInfo {
val serviceType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC else 0 val serviceType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC else 0
return ForegroundInfo(NOTIFICATION_ID, notification, serviceType) return ForegroundInfo(NOTIFICATION_ID, notification, serviceType)
} }