From 198604227788444f374b8702076b95fb593c8657 Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 26 Mar 2023 12:34:32 -0400 Subject: [PATCH] Skip POST_NOTIFICATIONS permission check for now Fixes #9265 --- app/src/main/java/eu/kanade/tachiyomi/App.kt | 4 ++-- .../tachiyomi/data/backup/BackupCreateJob.kt | 4 ++-- .../tachiyomi/data/backup/BackupNotifier.kt | 10 ++++---- .../tachiyomi/data/backup/BackupRestoreJob.kt | 4 ++-- .../data/download/DownloadNotifier.kt | 4 ++-- .../data/library/LibraryUpdateNotifier.kt | 4 ++-- .../data/notification/NotificationReceiver.kt | 7 +++--- .../tachiyomi/ui/reader/SaveImageNotifier.kt | 4 ++-- .../eu/kanade/tachiyomi/util/CrashLogUtil.kt | 4 ++-- .../util/system/NotificationExtensions.kt | 23 ++++++++++++------- 10 files changed, 38 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 79790a1be0..642e3bd109 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -38,9 +38,9 @@ import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isPreviewBuildType import eu.kanade.tachiyomi.util.system.isReleaseBuildType -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.launchIn @@ -116,7 +116,7 @@ class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory { } } else { disableIncognitoReceiver.unregister() - notificationManager.cancel(Notifications.ID_INCOGNITO_MODE) + cancelNotification(Notifications.ID_INCOGNITO_MODE) } } .launchIn(ProcessLifecycleOwner.get().lifecycleScope) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt index 740ca12c75..4d590431f4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt @@ -13,8 +13,8 @@ import androidx.work.WorkerParameters import androidx.work.workDataOf import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.workManager import logcat.LogPriority import tachiyomi.core.util.system.logcat @@ -50,7 +50,7 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete if (!isAutoBackup) notifier.showBackupError(e.message) Result.failure() } finally { - context.notificationManager.cancel(Notifications.ID_BACKUP_PROGRESS) + context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt index 95e5224ba3..d7b139598a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt @@ -9,8 +9,8 @@ import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.storage.getUriCompat +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify import uy.kohesive.injekt.injectLazy import java.io.File @@ -51,7 +51,7 @@ class BackupNotifier(private val context: Context) { } fun showBackupError(error: String?) { - context.notificationManager.cancel(Notifications.ID_BACKUP_PROGRESS) + context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.getString(R.string.creating_backup_error)) @@ -62,7 +62,7 @@ class BackupNotifier(private val context: Context) { } fun showBackupComplete(unifile: UniFile) { - context.notificationManager.cancel(Notifications.ID_BACKUP_PROGRESS) + context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.getString(R.string.backup_created)) @@ -104,7 +104,7 @@ class BackupNotifier(private val context: Context) { } fun showRestoreError(error: String?) { - context.notificationManager.cancel(Notifications.ID_RESTORE_PROGRESS) + context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.getString(R.string.restoring_backup_error)) @@ -115,7 +115,7 @@ class BackupNotifier(private val context: Context) { } fun showRestoreComplete(time: Long, errorCount: Int, path: String?, file: String?) { - context.notificationManager.cancel(Notifications.ID_RESTORE_PROGRESS) + context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) val timeString = context.getString( R.string.restore_duration, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt index 279e7a76d5..72d23e48a3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt @@ -11,8 +11,8 @@ import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import logcat.LogPriority @@ -47,7 +47,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet Result.failure() } } finally { - context.notificationManager.cancel(Notifications.ID_RESTORE_PROGRESS) + context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt index 37035fb35d..a4b06792b8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt @@ -11,8 +11,8 @@ import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.lang.chop +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify import uy.kohesive.injekt.injectLazy import java.util.regex.Pattern @@ -59,7 +59,7 @@ internal class DownloadNotifier(private val context: Context) { * those can only be dismissed by the user. */ fun dismissProgress() { - context.notificationManager.cancel(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) + context.cancelNotification(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt index f273eb7496..8eb1bbb75a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt @@ -21,8 +21,8 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.lang.chop +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.Constants import tachiyomi.core.util.lang.launchUI @@ -265,7 +265,7 @@ class LibraryUpdateNotifier(private val context: Context) { * Cancels the progress notification. */ fun cancelProgressNotification() { - context.notificationManager.cancel(Notifications.ID_LIBRARY_PROGRESS) + context.cancelNotification(Notifications.ID_LIBRARY_PROGRESS) } private suspend fun getMangaIcon(manga: Manga): Bitmap? { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt index 2428da3022..b2c34a1ca8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt @@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.getUriCompat +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.toShareIntent @@ -135,7 +136,7 @@ class NotificationReceiver : BroadcastReceiver() { * @param notificationId the id of the notification */ private fun dismissNotification(context: Context, notificationId: Int) { - context.notificationManager.cancel(notificationId) + context.cancelNotification(notificationId) } /** @@ -380,13 +381,13 @@ class NotificationReceiver : BroadcastReceiver() { } if (notifications.size == 2) { - context.notificationManager.cancel(groupId) + context.cancelNotification(groupId) return } } } - context.notificationManager.cancel(notificationId) + context.cancelNotification(notificationId) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt index 2d9603ccc1..24a6441a1f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt @@ -12,8 +12,8 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify /** @@ -50,7 +50,7 @@ class SaveImageNotifier(private val context: Context) { * Clears the notification message. */ fun onClear() { - context.notificationManager.cancel(notificationId) + context.cancelNotification(notificationId) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index 83c641bbcd..0a5c4bc825 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -8,8 +8,8 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.storage.getUriCompat +import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.createFileInCacheDir -import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify import eu.kanade.tachiyomi.util.system.toast import tachiyomi.core.util.lang.withNonCancellableContext @@ -43,7 +43,7 @@ class CrashLogUtil(private val context: Context) { } private fun showNotification(uri: Uri) { - context.notificationManager.cancel(Notifications.ID_CRASH_LOGS) + context.cancelNotification(Notifications.ID_CRASH_LOGS) context.notify( Notifications.ID_CRASH_LOGS, diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt index 99ab90ec4f..3958d0cdfe 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt @@ -1,6 +1,6 @@ package eu.kanade.tachiyomi.util.system -import android.Manifest +import android.annotation.SuppressLint import android.app.Notification import android.app.NotificationManager import android.content.Context @@ -9,7 +9,6 @@ import androidx.core.app.NotificationChannelGroupCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat.NotificationWithIdAndTag -import androidx.core.content.PermissionChecker import androidx.core.content.getSystemService import eu.kanade.tachiyomi.R @@ -21,22 +20,30 @@ fun Context.notify(id: Int, channelId: String, block: (NotificationCompat.Builde this.notify(id, notification) } +@SuppressLint("MissingPermission") fun Context.notify(id: Int, notification: Notification) { - if (PermissionChecker.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PermissionChecker.PERMISSION_GRANTED) { - return - } + // TODO: check for permission once targeting SDK 33+ +// if (PermissionChecker.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PermissionChecker.PERMISSION_GRANTED) { +// return +// } NotificationManagerCompat.from(this).notify(id, notification) } +@SuppressLint("MissingPermission") fun Context.notify(notificationWithIdAndTags: List) { - if (PermissionChecker.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PermissionChecker.PERMISSION_GRANTED) { - return - } + // TODO: check for permission once targeting SDK 33+ +// if (PermissionChecker.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PermissionChecker.PERMISSION_GRANTED) { +// return +// } NotificationManagerCompat.from(this).notify(notificationWithIdAndTags) } +fun Context.cancelNotification(id: Int) { + NotificationManagerCompat.from(this).cancel(id) +} + /** * Helper method to create a notification builder. *