Notification color & icon (#620)
* add color to notification * add app icon to extension update notification * add app icon to download error notification * add large app icon to all the notification * set large image for chapter update & save image notification
This commit is contained in:
parent
af77a962c1
commit
4c7563294d
17 changed files with 104 additions and 17 deletions
BIN
app/src/beta/res/drawable/komikku.png
Normal file
BIN
app/src/beta/res/drawable/komikku.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
4
app/src/beta/res/values/colors.xml
Normal file
4
app/src/beta/res/values/colors.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher">#c837ab</color>
|
||||||
|
</resources>
|
||||||
BIN
app/src/debug/res/drawable/komikku.png
Normal file
BIN
app/src/debug/res/drawable/komikku.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
4
app/src/debug/res/values/colors.xml
Normal file
4
app/src/debug/res/values/colors.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher">#ffe680</color>
|
||||||
|
</resources>
|
||||||
|
|
@ -7,6 +7,7 @@ import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
|
|
@ -156,6 +157,8 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
||||||
setContentTitle(stringResource(MR.strings.pref_incognito_mode))
|
setContentTitle(stringResource(MR.strings.pref_incognito_mode))
|
||||||
setContentText(stringResource(MR.strings.notification_incognito_text))
|
setContentText(stringResource(MR.strings.notification_incognito_text))
|
||||||
setSmallIcon(R.drawable.ic_glasses_24dp)
|
setSmallIcon(R.drawable.ic_glasses_24dp)
|
||||||
|
setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(applicationContext.resources, R.drawable.komikku))
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
|
|
||||||
val pendingIntent = PendingIntent.getBroadcast(
|
val pendingIntent = PendingIntent.getBroadcast(
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.data.backup
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import com.hippo.unifile.UniFile
|
import com.hippo.unifile.UniFile
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
|
|
@ -34,8 +35,9 @@ class BackupNotifier(private val context: Context) {
|
||||||
private val progressNotificationBuilder = context.notificationBuilder(
|
private val progressNotificationBuilder = context.notificationBuilder(
|
||||||
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
||||||
) {
|
) {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
|
|
@ -44,8 +46,9 @@ class BackupNotifier(private val context: Context) {
|
||||||
private val completeNotificationBuilder = context.notificationBuilder(
|
private val completeNotificationBuilder = context.notificationBuilder(
|
||||||
Notifications.CHANNEL_BACKUP_RESTORE_COMPLETE,
|
Notifications.CHANNEL_BACKUP_RESTORE_COMPLETE,
|
||||||
) {
|
) {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@ package eu.kanade.tachiyomi.data.download
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.ServiceInfo
|
import android.content.pm.ServiceInfo
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.asFlow
|
import androidx.lifecycle.asFlow
|
||||||
import androidx.work.CoroutineWorker
|
import androidx.work.CoroutineWorker
|
||||||
import androidx.work.ExistingWorkPolicy
|
import androidx.work.ExistingWorkPolicy
|
||||||
|
|
@ -32,7 +34,7 @@ import uy.kohesive.injekt.api.get
|
||||||
* This worker is used to manage the downloader. The system can decide to stop the worker, in
|
* This worker is used to manage the downloader. The system can decide to stop the worker, in
|
||||||
* which case the downloader is also stopped. It's also stopped while there's no network available.
|
* which case the downloader is also stopped. It's also stopped while there's no network available.
|
||||||
*/
|
*/
|
||||||
class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) {
|
class DownloadJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) {
|
||||||
|
|
||||||
private val downloadManager: DownloadManager = Injekt.get()
|
private val downloadManager: DownloadManager = Injekt.get()
|
||||||
private val downloadPreferences: DownloadPreferences = Injekt.get()
|
private val downloadPreferences: DownloadPreferences = Injekt.get()
|
||||||
|
|
@ -41,6 +43,8 @@ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineW
|
||||||
val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||||
setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title))
|
setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title))
|
||||||
setSmallIcon(android.R.drawable.stat_sys_download)
|
setSmallIcon(android.R.drawable.stat_sys_download)
|
||||||
|
setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
}.build()
|
}.build()
|
||||||
return ForegroundInfo(
|
return ForegroundInfo(
|
||||||
Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS,
|
Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import android.app.PendingIntent
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.data.download.model.Download
|
import eu.kanade.tachiyomi.data.download.model.Download
|
||||||
|
|
@ -30,7 +31,8 @@ internal class DownloadNotifier(private val context: Context) {
|
||||||
|
|
||||||
private val progressNotificationBuilder by lazy {
|
private val progressNotificationBuilder by lazy {
|
||||||
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +40,8 @@ internal class DownloadNotifier(private val context: Context) {
|
||||||
|
|
||||||
private val errorNotificationBuilder by lazy {
|
private val errorNotificationBuilder by lazy {
|
||||||
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {
|
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,10 @@ import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import coil3.asDrawable
|
import coil3.asDrawable
|
||||||
import coil3.imageLoader
|
import coil3.imageLoader
|
||||||
import coil3.request.ImageRequest
|
import coil3.request.ImageRequest
|
||||||
import coil3.request.transformations
|
|
||||||
import coil3.transform.CircleCropTransformation
|
|
||||||
import eu.kanade.presentation.util.formatChapterNumber
|
import eu.kanade.presentation.util.formatChapterNumber
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
|
|
@ -70,7 +69,7 @@ class LibraryUpdateNotifier(
|
||||||
* Bitmap of the app for notifications.
|
* Bitmap of the app for notifications.
|
||||||
*/
|
*/
|
||||||
private val notificationBitmap by lazy {
|
private val notificationBitmap by lazy {
|
||||||
BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)
|
BitmapFactory.decodeResource(context.resources, R.drawable.komikku)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -80,6 +79,7 @@ class LibraryUpdateNotifier(
|
||||||
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) {
|
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) {
|
||||||
setContentTitle(context.stringResource(MR.strings.app_name))
|
setContentTitle(context.stringResource(MR.strings.app_name))
|
||||||
setSmallIcon(R.drawable.ic_refresh_24dp)
|
setSmallIcon(R.drawable.ic_refresh_24dp)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
setLargeIcon(notificationBitmap)
|
setLargeIcon(notificationBitmap)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
|
|
@ -142,6 +142,7 @@ class LibraryUpdateNotifier(
|
||||||
NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)),
|
NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)),
|
||||||
)
|
)
|
||||||
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
|
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
|
||||||
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
|
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
|
||||||
}
|
}
|
||||||
|
|
@ -164,6 +165,7 @@ class LibraryUpdateNotifier(
|
||||||
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
|
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
|
||||||
setContentText(context.stringResource(MR.strings.action_show_errors))
|
setContentText(context.stringResource(MR.strings.action_show_errors))
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
|
||||||
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context))
|
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context))
|
||||||
}
|
}
|
||||||
|
|
@ -204,6 +206,7 @@ class LibraryUpdateNotifier(
|
||||||
}
|
}
|
||||||
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
setLargeIcon(notificationBitmap)
|
setLargeIcon(notificationBitmap)
|
||||||
|
|
||||||
setGroup(Notifications.GROUP_NEW_CHAPTERS)
|
setGroup(Notifications.GROUP_NEW_CHAPTERS)
|
||||||
|
|
@ -237,12 +240,23 @@ class LibraryUpdateNotifier(
|
||||||
|
|
||||||
val description = getNewChaptersDescription(chapters)
|
val description = getNewChaptersDescription(chapters)
|
||||||
setContentText(description)
|
setContentText(description)
|
||||||
setStyle(NotificationCompat.BigTextStyle().bigText(description))
|
|
||||||
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
|
||||||
if (icon != null) {
|
if (icon != null) {
|
||||||
setLargeIcon(icon)
|
setLargeIcon(icon)
|
||||||
|
// KMK -->
|
||||||
|
setStyle(
|
||||||
|
NotificationCompat.BigPictureStyle()
|
||||||
|
.bigPicture(icon)
|
||||||
|
.bigLargeIcon(notificationBitmap)
|
||||||
|
.setBigContentTitle(manga.title)
|
||||||
|
.setSummaryText(description),
|
||||||
|
)
|
||||||
|
// KMK <--
|
||||||
|
} else {
|
||||||
|
setStyle(NotificationCompat.BigTextStyle().bigText(description))
|
||||||
}
|
}
|
||||||
|
|
||||||
setGroup(Notifications.GROUP_NEW_CHAPTERS)
|
setGroup(Notifications.GROUP_NEW_CHAPTERS)
|
||||||
|
|
@ -301,8 +315,10 @@ class LibraryUpdateNotifier(
|
||||||
private suspend fun getMangaIcon(manga: Manga): Bitmap? {
|
private suspend fun getMangaIcon(manga: Manga): Bitmap? {
|
||||||
val request = ImageRequest.Builder(context)
|
val request = ImageRequest.Builder(context)
|
||||||
.data(manga)
|
.data(manga)
|
||||||
.transformations(CircleCropTransformation())
|
// KMK -->
|
||||||
.size(NOTIF_ICON_SIZE)
|
// .transformations(CircleCropTransformation())
|
||||||
|
// .size(NOTIF_ICON_SIZE)
|
||||||
|
// KMK <--
|
||||||
.build()
|
.build()
|
||||||
val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources)
|
val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources)
|
||||||
return drawable?.getBitmapOrNull()
|
return drawable?.getBitmapOrNull()
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.data.sync
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.data.SyncStatus
|
import eu.kanade.tachiyomi.data.SyncStatus
|
||||||
|
|
@ -26,8 +27,9 @@ class SyncNotifier(private val context: Context) {
|
||||||
private val progressNotificationBuilder = context.notificationBuilder(
|
private val progressNotificationBuilder = context.notificationBuilder(
|
||||||
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
||||||
) {
|
) {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
|
|
@ -36,8 +38,9 @@ class SyncNotifier(private val context: Context) {
|
||||||
private val completeNotificationBuilder = context.notificationBuilder(
|
private val completeNotificationBuilder = context.notificationBuilder(
|
||||||
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,
|
||||||
) {
|
) {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.data.updater
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
|
|
@ -20,7 +22,10 @@ import tachiyomi.i18n.kmk.KMR
|
||||||
|
|
||||||
internal class AppUpdateNotifier(private val context: Context) {
|
internal class AppUpdateNotifier(private val context: Context) {
|
||||||
|
|
||||||
private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_APP_UPDATE)
|
private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_APP_UPDATE) {
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call to show notification.
|
* Call to show notification.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package eu.kanade.tachiyomi.extension.api
|
package eu.kanade.tachiyomi.extension.api
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||||
|
|
@ -35,6 +37,8 @@ class ExtensionUpdateNotifier(
|
||||||
setStyle(NotificationCompat.BigTextStyle().bigText(extNames))
|
setStyle(NotificationCompat.BigTextStyle().bigText(extNames))
|
||||||
}
|
}
|
||||||
setSmallIcon(R.drawable.ic_extension_24dp)
|
setSmallIcon(R.drawable.ic_extension_24dp)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku))
|
||||||
setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context))
|
setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context))
|
||||||
setAutoCancel(true)
|
setAutoCancel(true)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.extension.util
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import eu.kanade.domain.base.BasePreferences
|
import eu.kanade.domain.base.BasePreferences
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
|
|
@ -26,6 +28,8 @@ class ExtensionInstallService : Service() {
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) {
|
val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) {
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher))
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(applicationContext.resources, R.drawable.komikku))
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setShowWhen(false)
|
setShowWhen(false)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,10 @@ package eu.kanade.tachiyomi.ui.reader
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import coil3.asDrawable
|
import coil3.asDrawable
|
||||||
import coil3.imageLoader
|
import coil3.imageLoader
|
||||||
import coil3.request.CachePolicy
|
import coil3.request.CachePolicy
|
||||||
|
|
@ -24,7 +26,9 @@ import tachiyomi.i18n.MR
|
||||||
*/
|
*/
|
||||||
class SaveImageNotifier(private val context: Context) {
|
class SaveImageNotifier(private val context: Context) {
|
||||||
|
|
||||||
private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_COMMON)
|
private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_COMMON) {
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
}
|
||||||
private val notificationId: Int = Notifications.ID_DOWNLOAD_IMAGE
|
private val notificationId: Int = Notifications.ID_DOWNLOAD_IMAGE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -52,6 +56,15 @@ class SaveImageNotifier(private val context: Context) {
|
||||||
context.cancelNotification(notificationId)
|
context.cancelNotification(notificationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
/**
|
||||||
|
* Bitmap of the app for notifications.
|
||||||
|
*/
|
||||||
|
private val notificationBitmap by lazy {
|
||||||
|
BitmapFactory.decodeResource(context.resources, R.drawable.komikku)
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called on error while downloading image.
|
* Called on error while downloading image.
|
||||||
* @param error string containing error information.
|
* @param error string containing error information.
|
||||||
|
|
@ -59,6 +72,9 @@ class SaveImageNotifier(private val context: Context) {
|
||||||
fun onError(error: String?) {
|
fun onError(error: String?) {
|
||||||
// Create notification
|
// Create notification
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
|
// KMK -->
|
||||||
|
setLargeIcon(notificationBitmap)
|
||||||
|
// KMK <--
|
||||||
setContentTitle(context.stringResource(MR.strings.download_notifier_title_error))
|
setContentTitle(context.stringResource(MR.strings.download_notifier_title_error))
|
||||||
setContentText(error ?: context.stringResource(MR.strings.unknown_error))
|
setContentText(error ?: context.stringResource(MR.strings.unknown_error))
|
||||||
setSmallIcon(android.R.drawable.ic_menu_report_image)
|
setSmallIcon(android.R.drawable.ic_menu_report_image)
|
||||||
|
|
@ -70,8 +86,17 @@ class SaveImageNotifier(private val context: Context) {
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
setContentTitle(context.stringResource(MR.strings.picture_saved))
|
setContentTitle(context.stringResource(MR.strings.picture_saved))
|
||||||
setSmallIcon(R.drawable.ic_photo_24dp)
|
setSmallIcon(R.drawable.ic_photo_24dp)
|
||||||
image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) }
|
image?.let {
|
||||||
setLargeIcon(image)
|
setStyle(
|
||||||
|
NotificationCompat.BigPictureStyle()
|
||||||
|
// KMK -->
|
||||||
|
.bigLargeIcon(notificationBitmap)
|
||||||
|
.setBigContentTitle(context.stringResource(MR.strings.picture_saved))
|
||||||
|
// KMK <--
|
||||||
|
.bigPicture(it),
|
||||||
|
)
|
||||||
|
setLargeIcon(image)
|
||||||
|
}
|
||||||
setAutoCancel(true)
|
setAutoCancel(true)
|
||||||
|
|
||||||
// Clear old actions if they exist
|
// Clear old actions if they exist
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import android.content.Context
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||||
|
|
@ -32,7 +33,7 @@ class EHentaiUpdateNotifier(private val context: Context) {
|
||||||
* Bitmap of the app for notifications.
|
* Bitmap of the app for notifications.
|
||||||
*/
|
*/
|
||||||
private val notificationBitmap by lazy {
|
private val notificationBitmap by lazy {
|
||||||
BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)
|
BitmapFactory.decodeResource(context.resources, R.drawable.komikku)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -42,6 +43,7 @@ class EHentaiUpdateNotifier(private val context: Context) {
|
||||||
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_EHENTAI) {
|
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_EHENTAI) {
|
||||||
setContentTitle(context.stringResource(MR.strings.app_name))
|
setContentTitle(context.stringResource(MR.strings.app_name))
|
||||||
setSmallIcon(R.drawable.ic_refresh_24dp)
|
setSmallIcon(R.drawable.ic_refresh_24dp)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
setLargeIcon(notificationBitmap)
|
setLargeIcon(notificationBitmap)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
|
|
@ -95,6 +97,8 @@ class EHentaiUpdateNotifier(private val context: Context) {
|
||||||
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
|
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
|
||||||
setContentText(context.stringResource(MR.strings.action_show_errors))
|
setContentText(context.stringResource(MR.strings.action_show_errors))
|
||||||
setSmallIcon(R.drawable.ic_komikku)
|
setSmallIcon(R.drawable.ic_komikku)
|
||||||
|
setColor(ContextCompat.getColor(context, R.color.ic_launcher))
|
||||||
|
setLargeIcon(notificationBitmap)
|
||||||
|
|
||||||
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))
|
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
app/src/main/res/drawable/komikku.png
Normal file
BIN
app/src/main/res/drawable/komikku.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
4
app/src/main/res/values/colors.xml
Normal file
4
app/src/main/res/values/colors.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher">#ff5555</color>
|
||||||
|
</resources>
|
||||||
Loading…
Reference in a new issue