diff --git a/app/src/beta/res/drawable/komikku.png b/app/src/beta/res/drawable/komikku.png new file mode 100644 index 000000000..bd0b448a9 Binary files /dev/null and b/app/src/beta/res/drawable/komikku.png differ diff --git a/app/src/beta/res/values/colors.xml b/app/src/beta/res/values/colors.xml new file mode 100644 index 000000000..1c3ef6d31 --- /dev/null +++ b/app/src/beta/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #c837ab + diff --git a/app/src/debug/res/drawable/komikku.png b/app/src/debug/res/drawable/komikku.png new file mode 100644 index 000000000..7ec36827f Binary files /dev/null and b/app/src/debug/res/drawable/komikku.png differ diff --git a/app/src/debug/res/values/colors.xml b/app/src/debug/res/values/colors.xml new file mode 100644 index 000000000..80003d0df --- /dev/null +++ b/app/src/debug/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #ffe680 + diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 33bf58e32..fd213b440 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -7,6 +7,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.graphics.BitmapFactory import android.os.Build import android.os.Looper import android.webkit.WebView @@ -156,6 +157,8 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor setContentTitle(stringResource(MR.strings.pref_incognito_mode)) setContentText(stringResource(MR.strings.notification_incognito_text)) setSmallIcon(R.drawable.ic_glasses_24dp) + setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(applicationContext.resources, R.drawable.komikku)) setOngoing(true) val pendingIntent = PendingIntent.getBroadcast( 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 dfab7d399..9afc92936 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 @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.data.backup import android.content.Context import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences @@ -34,8 +35,9 @@ class BackupNotifier(private val context: Context) { private val progressNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS, ) { - setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) setAutoCancel(false) setOngoing(true) setOnlyAlertOnce(true) @@ -44,8 +46,9 @@ class BackupNotifier(private val context: Context) { private val completeNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_COMPLETE, ) { - setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) setAutoCancel(false) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt index 6a7b4469e..f7955cea7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt @@ -2,7 +2,9 @@ package eu.kanade.tachiyomi.data.download import android.content.Context import android.content.pm.ServiceInfo +import android.graphics.BitmapFactory import android.os.Build +import androidx.core.content.ContextCompat import androidx.lifecycle.asFlow import androidx.work.CoroutineWorker 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 * 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 downloadPreferences: DownloadPreferences = Injekt.get() @@ -41,6 +43,8 @@ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineW val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title)) setSmallIcon(android.R.drawable.stat_sys_download) + setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) }.build() return ForegroundInfo( Notifications.ID_DOWNLOAD_CHAPTER_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 ee3a5fe0f..f58fb4d6a 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 @@ -4,6 +4,7 @@ import android.app.PendingIntent import android.content.Context import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.download.model.Download @@ -30,7 +31,8 @@ internal class DownloadNotifier(private val context: Context) { private val progressNotificationBuilder by lazy { 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) setOnlyAlertOnce(true) } @@ -38,6 +40,8 @@ internal class DownloadNotifier(private val context: Context) { private val errorNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) { + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) setAutoCancel(false) } } 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 6e246f728..987af94f2 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 @@ -8,11 +8,10 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat import coil3.asDrawable import coil3.imageLoader import coil3.request.ImageRequest -import coil3.request.transformations -import coil3.transform.CircleCropTransformation import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences @@ -70,7 +69,7 @@ class LibraryUpdateNotifier( * Bitmap of the app for notifications. */ 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) { setContentTitle(context.stringResource(MR.strings.app_name)) setSmallIcon(R.drawable.ic_refresh_24dp) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) setLargeIcon(notificationBitmap) setOngoing(true) setOnlyAlertOnce(true) @@ -142,6 +142,7 @@ class LibraryUpdateNotifier( NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)), ) setSmallIcon(R.drawable.ic_warning_white_24dp) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS) setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL)) } @@ -164,6 +165,7 @@ class LibraryUpdateNotifier( setContentTitle(context.stringResource(MR.strings.notification_update_error, failed)) setContentText(context.stringResource(MR.strings.action_show_errors)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context)) } @@ -204,6 +206,7 @@ class LibraryUpdateNotifier( } setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) setLargeIcon(notificationBitmap) setGroup(Notifications.GROUP_NEW_CHAPTERS) @@ -237,12 +240,23 @@ class LibraryUpdateNotifier( val description = getNewChaptersDescription(chapters) setContentText(description) - setStyle(NotificationCompat.BigTextStyle().bigText(description)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) if (icon != null) { 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) @@ -301,8 +315,10 @@ class LibraryUpdateNotifier( private suspend fun getMangaIcon(manga: Manga): Bitmap? { val request = ImageRequest.Builder(context) .data(manga) - .transformations(CircleCropTransformation()) - .size(NOTIF_ICON_SIZE) + // KMK --> + // .transformations(CircleCropTransformation()) + // .size(NOTIF_ICON_SIZE) + // KMK <-- .build() val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources) return drawable?.getBitmapOrNull() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt index 9d8b2d521..e74d9650f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.data.sync import android.content.Context import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.SyncStatus @@ -26,8 +27,9 @@ class SyncNotifier(private val context: Context) { private val progressNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS, ) { - setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) setAutoCancel(false) setOngoing(true) setOnlyAlertOnce(true) @@ -36,8 +38,9 @@ class SyncNotifier(private val context: Context) { private val completeNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS, ) { - setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.komikku)) setAutoCancel(false) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index c57014119..ad2a3aa57 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.data.updater import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.net.Uri import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import androidx.core.net.toUri import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R @@ -20,7 +22,10 @@ import tachiyomi.i18n.kmk.KMR 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. diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt index 2b675ae60..eadeac915 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt @@ -1,7 +1,9 @@ package eu.kanade.tachiyomi.extension.api import android.content.Context +import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.notification.NotificationReceiver @@ -35,6 +37,8 @@ class ExtensionUpdateNotifier( setStyle(NotificationCompat.BigTextStyle().bigText(extNames)) } 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)) setAutoCancel(true) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt index 9fd5c6ef6..dab5df61e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt @@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.extension.util import android.app.Service import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.net.Uri import android.os.IBinder +import androidx.core.content.ContextCompat import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications @@ -26,6 +28,8 @@ class ExtensionInstallService : Service() { override fun onCreate() { val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) { setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(applicationContext, R.color.ic_launcher)) + setLargeIcon(BitmapFactory.decodeResource(applicationContext.resources, R.drawable.komikku)) setAutoCancel(false) setOngoing(true) setShowWhen(false) 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 6b08dfeb3..166e13286 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 @@ -2,8 +2,10 @@ package eu.kanade.tachiyomi.ui.reader import android.content.Context import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.net.Uri import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import coil3.asDrawable import coil3.imageLoader import coil3.request.CachePolicy @@ -24,7 +26,9 @@ import tachiyomi.i18n.MR */ 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 /** @@ -52,6 +56,15 @@ class SaveImageNotifier(private val context: Context) { 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. * @param error string containing error information. @@ -59,6 +72,9 @@ class SaveImageNotifier(private val context: Context) { fun onError(error: String?) { // Create notification with(notificationBuilder) { + // KMK --> + setLargeIcon(notificationBitmap) + // KMK <-- setContentTitle(context.stringResource(MR.strings.download_notifier_title_error)) setContentText(error ?: context.stringResource(MR.strings.unknown_error)) setSmallIcon(android.R.drawable.ic_menu_report_image) @@ -70,8 +86,17 @@ class SaveImageNotifier(private val context: Context) { with(notificationBuilder) { setContentTitle(context.stringResource(MR.strings.picture_saved)) setSmallIcon(R.drawable.ic_photo_24dp) - image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) } - setLargeIcon(image) + image?.let { + setStyle( + NotificationCompat.BigPictureStyle() + // KMK --> + .bigLargeIcon(notificationBitmap) + .setBigContentTitle(context.stringResource(MR.strings.picture_saved)) + // KMK <-- + .bigPicture(it), + ) + setLargeIcon(image) + } setAutoCancel(true) // Clear old actions if they exist diff --git a/app/src/main/java/exh/eh/EHentaiUpdateNotifier.kt b/app/src/main/java/exh/eh/EHentaiUpdateNotifier.kt index 8b378b198..954fa477b 100644 --- a/app/src/main/java/exh/eh/EHentaiUpdateNotifier.kt +++ b/app/src/main/java/exh/eh/EHentaiUpdateNotifier.kt @@ -4,6 +4,7 @@ import android.content.Context import android.graphics.BitmapFactory import android.net.Uri import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.notification.NotificationReceiver @@ -32,7 +33,7 @@ class EHentaiUpdateNotifier(private val context: Context) { * Bitmap of the app for notifications. */ 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) { setContentTitle(context.stringResource(MR.strings.app_name)) setSmallIcon(R.drawable.ic_refresh_24dp) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) setLargeIcon(notificationBitmap) setOngoing(true) setOnlyAlertOnce(true) @@ -95,6 +97,8 @@ class EHentaiUpdateNotifier(private val context: Context) { setContentTitle(context.stringResource(MR.strings.notification_update_error, failed)) setContentText(context.stringResource(MR.strings.action_show_errors)) setSmallIcon(R.drawable.ic_komikku) + setColor(ContextCompat.getColor(context, R.color.ic_launcher)) + setLargeIcon(notificationBitmap) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri)) } diff --git a/app/src/main/res/drawable/komikku.png b/app/src/main/res/drawable/komikku.png new file mode 100644 index 000000000..d4a071ff6 Binary files /dev/null and b/app/src/main/res/drawable/komikku.png differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 000000000..f2c8a1039 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #ff5555 +