From 1c70faddcab4a1b17e0e81c24c24d95cf959498d Mon Sep 17 00:00:00 2001 From: nonproto <2092019+nonproto@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:16:52 -0500 Subject: [PATCH] Don't observe downloads when leaving to reader activity --- .../ui/base/controller/BaseCoroutineController.kt | 11 +++++++++++ .../ui/base/presenter/BaseCoroutinePresenter.kt | 13 +++++++++++++ .../tachiyomi/ui/manga/MangaDetailController.kt | 6 ------ .../tachiyomi/ui/manga/MangaDetailPresenter.kt | 11 +++++++---- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseCoroutineController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseCoroutineController.kt index bc9d4eaeca..61f22d60ed 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseCoroutineController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseCoroutineController.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.ui.base.controller +import android.app.Activity import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -31,6 +32,16 @@ abstract class BaseCoroutineController BaseCoroutinePresenter.takeView(view: Any) = attachView(view as? View) + override fun onActivityPaused(activity: Activity) { + super.onActivityPaused(activity) + presenter.onPause() + } + + override fun onActivityResumed(activity: Activity) { + super.onActivityResumed(activity) + presenter.onResume() + } + override fun onDestroyView(view: View) { super.onDestroyView(view) presenter.onDestroy() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BaseCoroutinePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BaseCoroutinePresenter.kt index aea9b98fe4..5a59b0e9fd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BaseCoroutinePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BaseCoroutinePresenter.kt @@ -9,6 +9,7 @@ import kotlinx.coroutines.isActive open class BaseCoroutinePresenter { var presenterScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + var pausablePresenterScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) private var weakView: WeakReference? = null protected val view: T? get() = weakView?.get() @@ -23,12 +24,24 @@ open class BaseCoroutinePresenter { if (!presenterScope.isActive) { presenterScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) } + if (!pausablePresenterScope.isActive) { + pausablePresenterScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + } } open fun onCreate() {} + open fun onPause() { + pausablePresenterScope.cancel() + } + + open fun onResume() { + pausablePresenterScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + } + open fun onDestroy() { presenterScope.cancel() + pausablePresenterScope.cancel() weakView = null } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailController.kt index ea12123271..f4eb85c0c4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailController.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.ui.manga -import android.app.Activity import android.content.ClipData import android.content.ClipboardManager import android.content.Context @@ -328,11 +327,6 @@ class MangaDetailController(private val mangaId: Long) : } } - override fun onActivityResumed(activity: Activity) { - super.onActivityResumed(activity) - presenter.resume() - } - companion object { const val MANGA_EXTRA = "manga" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailPresenter.kt index 69178b1c46..5b4527c4b9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailPresenter.kt @@ -121,6 +121,8 @@ class MangaDetailPresenter( private val _currentManga = MutableStateFlow(null) val manga: StateFlow = _currentManga.asStateFlow() + val downloadsScope = presenterScope + private fun currentManga(): Manga { if (_currentManga.value == null) { val dbManga = db.getManga(mangaId).executeAsBlocking() @@ -1926,19 +1928,20 @@ class MangaDetailPresenter( } /** - * This method request updates after the actitivy resumed (usually after a return from the + * This method request updates after the activity resumed (usually after a return from the * reader) */ - fun resume() { + override fun onResume() { presenterScope.launch { updateMangaFlow() updateChapterFlows() updateTrackingFlows() + observeDownloads() } } private fun observeDownloads() { - presenterScope.launchIO { + pausablePresenterScope.launchIO { downloadManager .statusFlow() .filter { it.manga.id == currentManga().id } @@ -1946,7 +1949,7 @@ class MangaDetailPresenter( .collect { updateDownloadState(it) } } - presenterScope.launchIO { + pausablePresenterScope.launchIO { downloadManager .progressFlow() .filter { it.manga.id == currentManga().id }