diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d2b80c48b4..eec5e93cfe 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -274,7 +274,7 @@ dependencies {
implementation(libs.wheelpicker)
// Conductor
- implementation(libs.bundles.conductor)
+ implementation(libs.conductor)
// FlowBinding
implementation(libs.flowbinding.android)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt
index 6c02fd3f6e..a99fdab4c1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt
@@ -3,21 +3,17 @@ package eu.kanade.tachiyomi.ui.base.activity
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
-import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegateImpl
import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate
import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegateImpl
import eu.kanade.tachiyomi.util.system.prepareTabletUiContext
-import uy.kohesive.injekt.injectLazy
open class BaseActivity :
AppCompatActivity(),
SecureActivityDelegate by SecureActivityDelegateImpl(),
ThemingDelegate by ThemingDelegateImpl() {
- protected val preferences: BasePreferences by injectLazy()
-
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(newBase.prepareTabletUiContext())
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseRxActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseRxActivity.kt
deleted file mode 100644
index 8c35bf5b26..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseRxActivity.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package eu.kanade.tachiyomi.ui.base.activity
-
-import android.content.Context
-import android.os.Bundle
-import eu.kanade.domain.base.BasePreferences
-import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
-import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegateImpl
-import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate
-import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegateImpl
-import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
-import eu.kanade.tachiyomi.util.system.prepareTabletUiContext
-import nucleus.view.NucleusAppCompatActivity
-import uy.kohesive.injekt.injectLazy
-
-open class BaseRxActivity
> :
- NucleusAppCompatActivity
(),
- SecureActivityDelegate by SecureActivityDelegateImpl(),
- ThemingDelegate by ThemingDelegateImpl() {
-
- protected val preferences: BasePreferences by injectLazy()
-
- override fun attachBaseContext(newBase: Context) {
- super.attachBaseContext(newBase.prepareTabletUiContext())
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- applyAppTheme(this)
- super.onCreate(savedInstanceState)
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ComposeController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ComposeController.kt
index 5c0883eee5..de77e41f33 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ComposeController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ComposeController.kt
@@ -9,37 +9,6 @@ import androidx.compose.runtime.CompositionLocalProvider
import eu.kanade.presentation.util.LocalRouter
import eu.kanade.tachiyomi.databinding.ComposeControllerBinding
import eu.kanade.tachiyomi.util.view.setComposeContent
-import nucleus.presenter.Presenter
-
-abstract class FullComposeController
>(bundle: Bundle? = null) :
- NucleusController(bundle),
- ComposeContentController {
-
- override fun createBinding(inflater: LayoutInflater) =
- ComposeControllerBinding.inflate(inflater)
-
- override fun onViewCreated(view: View) {
- super.onViewCreated(view)
-
- binding.root.apply {
- setComposeContent {
- CompositionLocalProvider(LocalRouter provides router) {
- ComposeContent()
- }
- }
- }
- }
-
- override fun handleBack(): Boolean {
- val dispatcher = (activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher ?: return false
- return if (dispatcher.hasEnabledCallbacks()) {
- dispatcher.onBackPressed()
- true
- } else {
- false
- }
- }
-}
/**
* Basic Compose controller without a presenter.
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt
index 4f72df8f55..c7990cd9c1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt
@@ -1,7 +1,5 @@
package eu.kanade.tachiyomi.ui.base.controller
-import android.content.pm.PackageManager.PERMISSION_GRANTED
-import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import com.bluelinelabs.conductor.Controller
import com.bluelinelabs.conductor.Router
@@ -12,28 +10,10 @@ fun Router.setRoot(controller: Controller, id: Int) {
setRoot(controller.withFadeTransaction().tag(id.toString()))
}
-fun Router.popControllerWithTag(tag: String): Boolean {
- val controller = getControllerWithTag(tag)
- if (controller != null) {
- popController(controller)
- return true
- }
- return false
-}
-
fun Router.pushController(controller: Controller) {
pushController(controller.withFadeTransaction())
}
-fun Controller.requestPermissionsSafe(permissions: Array, requestCode: Int) {
- val activity = activity ?: return
- permissions.forEach { permission ->
- if (ContextCompat.checkSelfPermission(activity, permission) != PERMISSION_GRANTED) {
- requestPermissions(arrayOf(permission), requestCode)
- }
- }
-}
-
fun Controller.withFadeTransaction(): RouterTransaction {
return RouterTransaction.with(this)
.pushChangeHandler(OneWayFadeChangeHandler())
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/NucleusController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/NucleusController.kt
deleted file mode 100644
index 89dfd23990..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/NucleusController.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package eu.kanade.tachiyomi.ui.base.controller
-
-import android.os.Bundle
-import androidx.viewbinding.ViewBinding
-import eu.kanade.tachiyomi.ui.base.presenter.NucleusConductorDelegate
-import eu.kanade.tachiyomi.ui.base.presenter.NucleusConductorLifecycleListener
-import nucleus.factory.PresenterFactory
-import nucleus.presenter.Presenter
-
-@Suppress("LeakingThis")
-abstract class NucleusController>(val bundle: Bundle? = null) :
- BaseController(bundle),
- PresenterFactory {
-
- private val delegate = NucleusConductorDelegate(this)
-
- val presenter: P
- get() = delegate.presenter!!
-
- init {
- addLifecycleListener(NucleusConductorLifecycleListener(delegate))
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BasePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BasePresenter.kt
deleted file mode 100644
index b8796d38fa..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/BasePresenter.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package eu.kanade.tachiyomi.ui.base.presenter
-
-import android.os.Bundle
-import eu.kanade.core.prefs.PreferenceMutableState
-import eu.kanade.tachiyomi.core.preference.Preference
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.MainScope
-import kotlinx.coroutines.cancel
-import nucleus.presenter.RxPresenter
-
-open class BasePresenter : RxPresenter() {
-
- var presenterScope: CoroutineScope = MainScope()
-
- override fun onCreate(savedState: Bundle?) {
- try {
- super.onCreate(savedState)
- } catch (e: NullPointerException) {
- // Swallow this error. This should be fixed in the library but since it's not critical
- // (only used by restartables) it should be enough. It saves me a fork.
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- presenterScope.cancel()
- }
-
- // We're trying to avoid using Rx, so we "undeprecate" this
- @Suppress("DEPRECATION")
- override fun getView(): V? {
- return super.getView()
- }
-
- fun Preference.asState() = PreferenceMutableState(this, presenterScope)
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.kt
deleted file mode 100644
index cd07ed478a..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package eu.kanade.tachiyomi.ui.base.presenter
-
-import android.os.Bundle
-import nucleus.factory.PresenterFactory
-import nucleus.presenter.Presenter
-
-class NucleusConductorDelegate>(private val factory: PresenterFactory
) {
-
- var presenter: P? = null
- get() {
- if (field == null) {
- field = factory.createPresenter()
- field!!.create(bundle)
- bundle = null
- }
- return field
- }
-
- private var bundle: Bundle? = null
-
- fun onSaveInstanceState(): Bundle {
- val bundle = Bundle()
- // getPresenter(); // Workaround a crash related to saving instance state with child routers
- presenter?.save(bundle)
- return bundle
- }
-
- fun onRestoreInstanceState(presenterState: Bundle?) {
- bundle = presenterState
- }
-
- @Suppress("UNCHECKED_CAST")
- private fun Presenter.takeView(view: Any) = takeView(view as View)
-
- fun onTakeView(view: Any) {
- presenter?.takeView(view)
- }
-
- fun onDropView() {
- presenter?.dropView()
- }
-
- fun onDestroy() {
- presenter?.destroy()
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorLifecycleListener.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorLifecycleListener.kt
deleted file mode 100644
index f59febccfa..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorLifecycleListener.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package eu.kanade.tachiyomi.ui.base.presenter
-
-import android.os.Bundle
-import android.view.View
-import com.bluelinelabs.conductor.Controller
-
-class NucleusConductorLifecycleListener(private val delegate: NucleusConductorDelegate<*>) : Controller.LifecycleListener() {
-
- override fun postCreateView(controller: Controller, view: View) {
- delegate.onTakeView(controller)
- }
-
- override fun preDestroyView(controller: Controller, view: View) {
- delegate.onDropView()
- }
-
- override fun preDestroy(controller: Controller) {
- delegate.onDestroy()
- }
-
- override fun onSaveInstanceState(controller: Controller, outState: Bundle) {
- outState.putBundle(PRESENTER_STATE_KEY, delegate.onSaveInstanceState())
- }
-
- override fun onRestoreInstanceState(controller: Controller, savedInstanceState: Bundle) {
- delegate.onRestoreInstanceState(savedInstanceState.getBundle(PRESENTER_STATE_KEY))
- }
-
- companion object {
- private const val PRESENTER_STATE_KEY = "presenter_state"
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
index 98d081bca1..b323207d76 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
@@ -21,7 +21,6 @@ import androidx.core.view.isVisible
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.interpolator.view.animation.LinearOutSlowInInterpolator
import androidx.lifecycle.lifecycleScope
-import androidx.preference.PreferenceDialogController
import com.bluelinelabs.conductor.Conductor
import com.bluelinelabs.conductor.Controller
import com.bluelinelabs.conductor.ControllerChangeHandler
@@ -30,6 +29,7 @@ import com.bluelinelabs.conductor.RouterTransaction
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import dev.chrisbanes.insetter.applyInsetter
+import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.domain.ui.UiPreferences
@@ -84,6 +84,7 @@ class MainActivity : BaseActivity() {
private val sourcePreferences: SourcePreferences by injectLazy()
private val libraryPreferences: LibraryPreferences by injectLazy()
private val uiPreferences: UiPreferences by injectLazy()
+ private val preferences: BasePreferences by injectLazy()
lateinit var binding: MainActivityBinding
@@ -565,7 +566,7 @@ class MainActivity : BaseActivity() {
// Then we'll assume the top controller is the parent controller of this dialog
val backstack = router.backstack
internalTo = backstack.lastOrNull()?.controller
- if (internalTo is DialogController || internalTo is PreferenceDialogController) {
+ if (internalTo is DialogController) {
internalTo = backstack.getOrNull(backstack.size - 2)?.controller ?: return
}
} else {
@@ -573,9 +574,6 @@ class MainActivity : BaseActivity() {
if (from is DialogController || internalTo is DialogController) {
return
}
- if (from is PreferenceDialogController || internalTo is PreferenceDialogController) {
- return
- }
}
supportActionBar?.setDisplayHomeAsUpEnabled(router.backstackSize != 1)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index 21d8095e80..2706f202a3 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -44,13 +44,17 @@ import com.google.android.material.slider.Slider
import com.google.android.material.transition.platform.MaterialContainerTransform
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import dev.chrisbanes.insetter.applyInsetter
+import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.databinding.ReaderActivityBinding
-import eu.kanade.tachiyomi.ui.base.activity.BaseRxActivity
+import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
+import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegateImpl
+import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate
+import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegateImpl
import eu.kanade.tachiyomi.ui.main.MainActivity
import eu.kanade.tachiyomi.ui.manga.MangaController
import eu.kanade.tachiyomi.ui.reader.ReaderPresenter.SetAsCoverResult.AddToLibraryFirst
@@ -74,6 +78,7 @@ import eu.kanade.tachiyomi.util.system.getThemeColor
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
import eu.kanade.tachiyomi.util.system.isNightMode
import eu.kanade.tachiyomi.util.system.logcat
+import eu.kanade.tachiyomi.util.system.prepareTabletUiContext
import eu.kanade.tachiyomi.util.system.toShareIntent
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.util.view.copy
@@ -87,6 +92,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
import logcat.LogPriority
import nucleus.factory.RequiresPresenter
+import nucleus.view.NucleusAppCompatActivity
import uy.kohesive.injekt.injectLazy
import kotlin.math.abs
import kotlin.math.max
@@ -96,10 +102,12 @@ import kotlin.math.max
* viewers, to which calls from the presenter or UI events are delegated.
*/
@RequiresPresenter(ReaderPresenter::class)
-class ReaderActivity : BaseRxActivity() {
+class ReaderActivity :
+ NucleusAppCompatActivity(),
+ SecureActivityDelegate by SecureActivityDelegateImpl(),
+ ThemingDelegate by ThemingDelegateImpl() {
companion object {
-
fun newIntent(context: Context, mangaId: Long?, chapterId: Long?): Intent {
return Intent(context, ReaderActivity::class.java).apply {
putExtra("manga", mangaId)
@@ -116,6 +124,7 @@ class ReaderActivity : BaseRxActivity() {
}
private val readerPreferences: ReaderPreferences by injectLazy()
+ private val preferences: BasePreferences by injectLazy()
lateinit var binding: ReaderActivityBinding
@@ -155,10 +164,15 @@ class ReaderActivity : BaseRxActivity() {
var isScrollingThroughPages = false
private set
+ override fun attachBaseContext(newBase: Context) {
+ super.attachBaseContext(newBase.prepareTabletUiContext())
+ }
+
/**
* Called when the activity is created. Initializes the presenter and configuration.
*/
override fun onCreate(savedInstanceState: Bundle?) {
+ applyAppTheme(this)
registerSecureActivity(this)
// Setup shared element transitions
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
index 76b8cde3ed..6a52852ee2 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
@@ -37,7 +37,6 @@ import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.online.HttpSource
-import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader
import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader
import eu.kanade.tachiyomi.ui.reader.loader.HttpPageLoader
@@ -60,17 +59,20 @@ import eu.kanade.tachiyomi.util.storage.DiskUtil
import eu.kanade.tachiyomi.util.storage.cacheImageDir
import eu.kanade.tachiyomi.util.system.isOnline
import eu.kanade.tachiyomi.util.system.logcat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.MainScope
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
+import kotlinx.coroutines.cancel
import kotlinx.coroutines.runBlocking
import logcat.LogPriority
+import nucleus.presenter.RxPresenter
import rx.Observable
import rx.Subscription
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
-import uy.kohesive.injekt.injectLazy
import java.util.Date
import java.util.concurrent.TimeUnit
import eu.kanade.domain.manga.model.Manga as DomainManga
@@ -82,6 +84,7 @@ class ReaderPresenter(
private val sourceManager: SourceManager = Injekt.get(),
private val downloadManager: DownloadManager = Injekt.get(),
private val downloadProvider: DownloadProvider = Injekt.get(),
+ private val imageSaver: ImageSaver = Injekt.get(),
preferences: BasePreferences = Injekt.get(),
private val downloadPreferences: DownloadPreferences = Injekt.get(),
private val readerPreferences: ReaderPreferences = Injekt.get(),
@@ -95,7 +98,9 @@ class ReaderPresenter(
private val upsertHistory: UpsertHistory = Injekt.get(),
private val updateChapter: UpdateChapter = Injekt.get(),
private val setMangaViewerFlags: SetMangaViewerFlags = Injekt.get(),
-) : BasePresenter() {
+) : RxPresenter() {
+
+ private val coroutineScope: CoroutineScope = MainScope()
/**
* The manga loaded in the reader. It can be null when instantiated for a short time.
@@ -133,8 +138,6 @@ class ReaderPresenter(
*/
private val isLoadingAdjacentChapterRelay = BehaviorRelay.create()
- private val imageSaver: ImageSaver by injectLazy()
-
private var chapterToDownload: Download? = null
/**
@@ -205,6 +208,7 @@ class ReaderPresenter(
*/
override fun onDestroy() {
super.onDestroy()
+ coroutineScope.cancel()
val currentChapters = viewerChaptersRelay.value
if (currentChapters != null) {
currentChapters.unref()
@@ -242,7 +246,7 @@ class ReaderPresenter(
*/
fun onSaveInstanceStateNonConfigurationChange() {
val currentChapter = getCurrentChapter() ?: return
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
saveChapterProgress(currentChapter)
}
}
@@ -261,7 +265,7 @@ class ReaderPresenter(
fun init(mangaId: Long, initialChapterId: Long) {
if (!needsInit()) return
- presenterScope.launchIO {
+ coroutineScope.launchIO {
try {
val manga = getManga.await(mangaId)
withUIContext {
@@ -467,7 +471,7 @@ class ReaderPresenter(
if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return
val nextChapter = viewerChaptersRelay.value?.nextChapter?.chapter ?: return
- presenterScope.launchIO {
+ coroutineScope.launchIO {
val isNextChapterDownloaded = downloadManager.isChapterDownloaded(
nextChapter.name,
nextChapter.scanlator,
@@ -523,7 +527,7 @@ class ReaderPresenter(
* Called when reader chapter is changed in reader or when activity is paused.
*/
private fun saveReadingProgress(readerChapter: ReaderChapter) {
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
saveChapterProgress(readerChapter)
saveChapterHistory(readerChapter)
}
@@ -613,7 +617,7 @@ class ReaderPresenter(
fun bookmarkCurrentChapter(bookmarked: Boolean) {
val chapter = getCurrentChapter()?.chapter ?: return
chapter.bookmark = bookmarked // Otherwise the bookmark icon doesn't update
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
updateChapter.await(
ChapterUpdate(
id = chapter.id!!.toLong(),
@@ -726,7 +730,7 @@ class ReaderPresenter(
// Copy file in background.
try {
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
val uri = imageSaver.save(
image = Image.Page(
inputStream = page.stream!!,
@@ -762,7 +766,7 @@ class ReaderPresenter(
val filename = generateFilename(manga, page)
try {
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
destDir.deleteRecursively()
val uri = imageSaver.save(
image = Image.Page(
@@ -788,7 +792,7 @@ class ReaderPresenter(
val manga = manga?.toDomainManga() ?: return
val stream = page.stream ?: return
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
try {
manga.editCover(context, stream())
withUIContext {
@@ -834,7 +838,7 @@ class ReaderPresenter(
val trackManager = Injekt.get()
val context = Injekt.get()
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
getTracks.await(manga.id!!)
.mapNotNull { track ->
val service = trackManager.getService(track.syncId)
@@ -874,7 +878,7 @@ class ReaderPresenter(
if (!chapter.chapter.read) return
val manga = manga ?: return
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
downloadManager.enqueueChaptersToDelete(listOf(chapter.chapter.toDomainChapter()!!), manga.toDomainManga()!!)
}
}
@@ -884,11 +888,17 @@ class ReaderPresenter(
* are ignored.
*/
private fun deletePendingChapters() {
- presenterScope.launchNonCancellable {
+ coroutineScope.launchNonCancellable {
downloadManager.deletePendingChapters()
}
}
+ // We're trying to avoid using Rx, so we "undeprecate" this
+ @Suppress("DEPRECATION")
+ override fun getView(): ReaderActivity? {
+ return super.getView()
+ }
+
/**
* Subscribes an observable with [deliverFirst] and adds it to the presenter's lifecycle
* subscription list.
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 7fff6616d4..19acb0f842 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,7 +3,6 @@ aboutlib_version = "10.5.2"
okhttp_version = "5.0.0-alpha.10"
nucleus_version = "3.0.0"
coil_version = "2.2.2"
-conductor_version = "3.1.8"
shizuku_version = "12.2.0"
sqldelight = "1.5.4"
leakcanary = "2.10"
@@ -64,8 +63,7 @@ insetter = "dev.chrisbanes.insetter:insetter:0.6.1"
cascade = "me.saket.cascade:cascade-compose:2.0.0-beta1"
wheelpicker = "com.github.commandiron:WheelPickerCompose:1.0.11"
-conductor-core = { module = "com.bluelinelabs:conductor", version.ref = "conductor_version" }
-conductor-support-preference = { module = "com.github.tachiyomiorg:conductor-support-preference", version.ref = "conductor_version" }
+conductor = "com.bluelinelabs:conductor:3.1.8"
flowbinding-android = "io.github.reactivecircus.flowbinding:flowbinding-android:1.2.0"
@@ -100,7 +98,6 @@ js-engine = ["quickjs-android"]
sqlite = ["sqlitektx", "sqlite-android"]
nucleus = ["nucleus-core", "nucleus-supportv7"]
coil = ["coil-core", "coil-gif", "coil-compose"]
-conductor = ["conductor-core", "conductor-support-preference"]
shizuku = ["shizuku-api", "shizuku-provider"]
voyager = ["voyager-navigator", "voyager-transitions"]