Browse Source

Handle download cancelation from icon properly (fixes #4241)

arkon 4 năm trước cách đây
mục cha
commit
f85194ec46

+ 11 - 0
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

@@ -212,8 +212,19 @@ class DownloadManager(private val context: Context) {
     fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source): List<Chapter> {
         val filteredChapters = getChaptersToDelete(chapters)
 
+        val wasRunning = downloader.isRunning
+        downloader.pause()
+
+        downloader.queue.remove(filteredChapters)
         queue.remove(filteredChapters)
 
+        if (downloader.queue.isEmpty()) {
+            DownloadService.stop(context)
+            downloader.stop()
+        } else if (wasRunning && downloader.queue.isNotEmpty()) {
+            downloader.start()
+        }
+
         val chapterDirs = provider.findChapterDirs(filteredChapters, manga, source)
         chapterDirs.forEach { it.delete() }
         cache.removeChapters(filteredChapters, manga)

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt

@@ -165,6 +165,8 @@ internal class DownloadNotifier(private val context: Context) {
      *  This function shows a notification to inform download tasks are done.
      */
     fun onComplete() {
+        dismissProgress()
+
         if (!errorThrown) {
             // Create notification
             with(completeNotificationBuilder) {

+ 8 - 7
app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt

@@ -134,15 +134,16 @@ class Downloader(
 
         if (reason != null) {
             notifier.onWarning(reason)
+            return
+        }
+
+        if (notifier.paused && !queue.isEmpty()) {
+            notifier.onPaused()
         } else {
-            if (notifier.paused) {
-                notifier.paused = false
-                notifier.onPaused()
-            } else {
-                notifier.dismissProgress()
-                notifier.onComplete()
-            }
+            notifier.onComplete()
         }
+
+        notifier.paused = false
     }
 
     /**

+ 3 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt

@@ -20,7 +20,9 @@ class ChapterHolder(
     private val binding = ChaptersItemBinding.bind(view)
 
     init {
-        binding.download.setOnClickListener { onDownloadClick(it) }
+        binding.download.setOnClickListener {
+            onDownloadClick(it, bindingAdapterPosition)
+        }
     }
 
     fun bind(item: ChapterItem, manga: Manga) {

+ 4 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/base/BaseChapterHolder.kt

@@ -11,11 +11,11 @@ open class BaseChapterHolder(
     private val adapter: BaseChaptersAdapter<*>
 ) : FlexibleViewHolder(view, adapter) {
 
-    fun onDownloadClick(view: View) {
-        val item = adapter.getItem(bindingAdapterPosition) as? BaseChapterItem<*, *> ?: return
+    fun onDownloadClick(view: View, position: Int) {
+        val item = adapter.getItem(position) as? BaseChapterItem<*, *> ?: return
         when (item.status) {
             Download.State.NOT_DOWNLOADED, Download.State.ERROR -> {
-                adapter.clickListener.downloadChapter(bindingAdapterPosition)
+                adapter.clickListener.downloadChapter(position)
             }
             else -> {
                 view.popupMenu(
@@ -28,7 +28,7 @@ open class BaseChapterHolder(
                         findItem(R.id.cancel_download).isVisible = item.status != Download.State.DOWNLOADED
                     },
                     onMenuItemClick = {
-                        adapter.clickListener.deleteChapter(bindingAdapterPosition)
+                        adapter.clickListener.deleteChapter(position)
                         true
                     }
                 )

+ 3 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt

@@ -32,7 +32,9 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
             adapter.coverClickListener.onCoverClick(bindingAdapterPosition)
         }
 
-        binding.download.setOnClickListener { onDownloadClick(it) }
+        binding.download.setOnClickListener {
+            onDownloadClick(it, bindingAdapterPosition)
+        }
     }
 
     fun bind(item: UpdatesItem) {

+ 3 - 3
app/src/main/res/layout/chapter_download_view.xml

@@ -2,8 +2,8 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="44dp"
-    android:layout_height="44dp"
+    android:layout_width="42dp"
+    android:layout_height="42dp"
     android:padding="8dp"
     android:background="?selectableItemBackgroundBorderless">
 
@@ -36,7 +36,7 @@
         android:visibility="gone"
         app:indicatorColor="@color/material_on_surface_emphasis_medium"
         app:indicatorInset="0dp"
-        app:indicatorSize="26dp"
+        app:indicatorSize="24dp"
         app:trackThickness="2dp" />
 
     <ImageView