mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Adjust update/download warnings
This is a partial revert/evolution of 538dd60580
- Back to notifications, because Android 12+ may cut off toasts
- Notifications now automatically dismiss after 30s on Android 8+ (taken from J2K)
- Also warn if more than 30 chapters are queued for download
			
			
This commit is contained in:
		| @@ -184,16 +184,19 @@ internal class DownloadNotifier(private val context: Context) { | ||||
|      * Called when the downloader receives a warning. | ||||
|      * | ||||
|      * @param reason the text to show. | ||||
|      * @param timeout duration after which to automatically dismiss the notification. | ||||
|      * Only works on Android 8+. | ||||
|      */ | ||||
|     fun onWarning(reason: String) { | ||||
|     fun onWarning(reason: String, timeout: Long? = null) { | ||||
|         with(errorNotificationBuilder) { | ||||
|             setContentTitle(context.getString(R.string.download_notifier_downloader_title)) | ||||
|             setStyle(NotificationCompat.BigTextStyle().bigText(reason)) | ||||
|             setContentText(reason) | ||||
|             setSmallIcon(R.drawable.ic_warning_white_24dp) | ||||
|             setAutoCancel(true) | ||||
|             clearActions() | ||||
|             setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) | ||||
|             setProgress(0, 0, false) | ||||
|             timeout?.let { setTimeoutAfter(it) } | ||||
|  | ||||
|             show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR) | ||||
|         } | ||||
|   | ||||
| @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.data.download | ||||
|  | ||||
| import android.content.Context | ||||
| import android.webkit.MimeTypeMap | ||||
| import android.widget.Toast | ||||
| import com.hippo.unifile.UniFile | ||||
| import com.jakewharton.rxrelay.BehaviorRelay | ||||
| import com.jakewharton.rxrelay.PublishRelay | ||||
| @@ -27,7 +26,6 @@ import eu.kanade.tachiyomi.util.storage.DiskUtil | ||||
| import eu.kanade.tachiyomi.util.storage.saveTo | ||||
| import eu.kanade.tachiyomi.util.system.ImageUtil | ||||
| import eu.kanade.tachiyomi.util.system.logcat | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.async | ||||
| import logcat.LogPriority | ||||
| import okhttp3.Response | ||||
| @@ -274,13 +272,20 @@ class Downloader( | ||||
|  | ||||
|             // Start downloader if needed | ||||
|             if (autoStart && wasEmpty) { | ||||
|                 val queuedDownloads = queue.filter { it.source !is UnmeteredSource }.count() | ||||
|                 val maxDownloadsFromSource = queue | ||||
|                     .groupBy { it.source } | ||||
|                     .filterKeys { it !is UnmeteredSource } | ||||
|                     .maxOf { it.value.size } | ||||
|                 if (maxDownloadsFromSource > CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { | ||||
|                 if ( | ||||
|                     queuedDownloads > DOWNLOADS_QUEUED_WARNING_THRESHOLD || | ||||
|                     maxDownloadsFromSource > CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD | ||||
|                 ) { | ||||
|                     withUIContext { | ||||
|                         context.toast(R.string.download_queue_size_warning, Toast.LENGTH_LONG) | ||||
|                         notifier.onWarning( | ||||
|                             context.getString(R.string.download_queue_size_warning), | ||||
|                             WARNING_NOTIF_TIMEOUT_MS, | ||||
|                         ) | ||||
|                     } | ||||
|                 } | ||||
|                 DownloadService.start(context) | ||||
| @@ -559,7 +564,9 @@ class Downloader( | ||||
|  | ||||
|     companion object { | ||||
|         const val TMP_DIR_SUFFIX = "_tmp" | ||||
|         const val WARNING_NOTIF_TIMEOUT_MS = 30_000L | ||||
|         const val CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 15 | ||||
|         private const val DOWNLOADS_QUEUED_WARNING_THRESHOLD = 30 | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -90,6 +90,20 @@ class LibraryUpdateNotifier(private val context: Context) { | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     fun showQueueSizeWarningNotification() { | ||||
|         val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) { | ||||
|             setContentTitle(context.getString(R.string.label_warning)) | ||||
|             setContentText(context.getString(R.string.notification_size_warning)) | ||||
|             setSmallIcon(R.drawable.ic_warning_white_24dp) | ||||
|             setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS) | ||||
|         } | ||||
|  | ||||
|         context.notificationManager.notify( | ||||
|             Notifications.ID_LIBRARY_SIZE_WARNING, | ||||
|             notificationBuilder.build(), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Shows notification containing update entries that failed with action to open full log. | ||||
|      * | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.os.IBinder | ||||
| import android.os.PowerManager | ||||
| import android.widget.Toast | ||||
| import androidx.core.content.ContextCompat | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| @@ -42,7 +41,6 @@ import eu.kanade.tachiyomi.util.system.acquireWakeLock | ||||
| import eu.kanade.tachiyomi.util.system.createFileInCacheDir | ||||
| import eu.kanade.tachiyomi.util.system.isServiceRunning | ||||
| import eu.kanade.tachiyomi.util.system.logcat | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.CoroutineExceptionHandler | ||||
| import kotlinx.coroutines.CoroutineScope | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| @@ -271,7 +269,7 @@ class LibraryUpdateService( | ||||
|             .filterKeys { sourceManager.get(it) !is UnmeteredSource } | ||||
|             .maxOfOrNull { it.value.size } ?: 0 | ||||
|         if (maxUpdatesFromSource > MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { | ||||
|             toast(R.string.notification_size_warning, Toast.LENGTH_LONG) | ||||
|             notifier.showQueueSizeWarningNotification() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -26,6 +26,7 @@ object Notifications { | ||||
|     private const val GROUP_LIBRARY = "group_library" | ||||
|     const val CHANNEL_LIBRARY_PROGRESS = "library_progress_channel" | ||||
|     const val ID_LIBRARY_PROGRESS = -101 | ||||
|     const val ID_LIBRARY_SIZE_WARNING = -103 | ||||
|     const val CHANNEL_LIBRARY_ERROR = "library_errors_channel" | ||||
|     const val ID_LIBRARY_ERROR = -102 | ||||
|     const val CHANNEL_LIBRARY_SKIPPED = "library_skipped_channel" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user