Address coroutine scope leaks for SY

This commit is contained in:
Jobobby04
2021-01-07 23:12:13 -05:00
parent 3683665e8a
commit fca7dad7b0
32 changed files with 217 additions and 384 deletions
@@ -30,6 +30,7 @@ import exh.util.wifiManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import okhttp3.FormBody
@@ -418,6 +419,10 @@ class FavoritesSyncHelper(val context: Context) {
class IgnoredException : RuntimeException()
fun onDestroy() {
scope.cancel()
}
companion object {
private const val THROTTLE_WARN = 1000
}
@@ -4,27 +4,22 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bluelinelabs.conductor.Controller
import eu.kanade.tachiyomi.databinding.SourceFilterMangadexHeaderBinding
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.online.RandomMangaSource
import eu.kanade.tachiyomi.ui.base.controller.BaseController
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
import exh.md.follows.MangaDexFollowsController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
class MangaDexFabHeaderAdapter(val controller: Controller, val source: CatalogueSource) :
class MangaDexFabHeaderAdapter(val controller: BaseController<*>, val source: CatalogueSource) :
RecyclerView.Adapter<MangaDexFabHeaderAdapter.SavedSearchesViewHolder>() {
private lateinit var binding: SourceFilterMangadexHeaderBinding
private val scope = CoroutineScope(Job() + Dispatchers.Main)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SavedSearchesViewHolder {
binding = SourceFilterMangadexHeaderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return SavedSearchesViewHolder(binding.root)
@@ -38,18 +33,15 @@ class MangaDexFabHeaderAdapter(val controller: Controller, val source: Catalogue
inner class SavedSearchesViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bind() {
binding.mangadexFollows.clicks()
.onEach {
controller.router.replaceTopController(MangaDexFollowsController(source).withFadeTransaction())
}
.launchIn(scope)
binding.mangadexFollows.setOnClickListener {
controller.router.replaceTopController(MangaDexFollowsController(source).withFadeTransaction())
}
binding.mangadexRandom.clicks()
.onEach {
(source as? RandomMangaSource)?.fetchRandomMangaUrl()?.let { randomMangaId ->
controller.router.replaceTopController(BrowseSourceController(source, randomMangaId).withFadeTransaction())
}
}
.launchIn(scope)
}.launchIn(controller.viewScope)
}
}
}
@@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -59,6 +60,11 @@ class ConfiguringDialogController : DialogController() {
materialDialog = null
}
override fun onDestroy() {
super.onDestroy()
scope.cancel()
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
finish()
@@ -11,9 +11,7 @@ import exh.GalleryAddEvent
import exh.GalleryAdder
import exh.util.trimOrNull
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -23,7 +21,6 @@ import uy.kohesive.injekt.api.get
class BatchAddPresenter : BasePresenter<BatchAddController>() {
private val galleryAdder by lazy { GalleryAdder() }
private val scope = CoroutineScope(Job() + Dispatchers.Main)
val progressTotalRelay = BehaviorRelay.create(0)!!
val progressRelay = BehaviorRelay.create(0)!!
@@ -62,7 +59,7 @@ class BatchAddPresenter : BasePresenter<BatchAddController>() {
XLog.tag("BatchAddPresenter").enableStackTrace(2).e(throwable)
}
scope.launch(Dispatchers.IO + handler) {
presenterScope.launch(Dispatchers.IO + handler) {
val succeeded = mutableListOf<String>()
val failed = mutableListOf<String>()
@@ -6,18 +6,11 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import eu.kanade.tachiyomi.databinding.MetadataViewItemBinding
import eu.kanade.tachiyomi.util.system.copyToClipboard
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
class MetadataViewAdapter(private var data: List<Pair<String, String>>) :
RecyclerView.Adapter<MetadataViewAdapter.ViewHolder>() {
private lateinit var binding: MetadataViewItemBinding
private val scope = CoroutineScope(Job() + Dispatchers.Main)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MetadataViewAdapter.ViewHolder {
binding = MetadataViewItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
@@ -42,11 +35,9 @@ class MetadataViewAdapter(private var data: List<Pair<String, String>>) :
fun bind(position: Int) {
binding.infoTitle.text = data[position].first
binding.infoText.text = data[position].second
binding.infoText.clicks()
.onEach {
itemView.context.copyToClipboard(data[position].second, data[position].second)
}
.launchIn(scope)
binding.infoText.setOnClickListener {
itemView.context.copyToClipboard(data[position].second, data[position].second)
}
}
override fun equals(other: Any?): Boolean {
@@ -14,20 +14,12 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.EHentaiSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
class EHentaiDescriptionAdapter(
private val controller: MangaController
) :
RecyclerView.Adapter<EHentaiDescriptionAdapter.EHentaiDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterEhBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EHentaiDescriptionViewHolder {
@@ -87,25 +79,22 @@ class EHentaiDescriptionAdapter(
binding.uploader,
binding.visible
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -12,20 +12,12 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard
import exh.metadata.bindDrawable
import exh.metadata.metadata.EightMusesSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
class EightMusesDescriptionAdapter(
private val controller: MangaController
) :
RecyclerView.Adapter<EightMusesDescriptionAdapter.EightMusesDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapter8mBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EightMusesDescriptionViewHolder {
@@ -48,24 +40,21 @@ class EightMusesDescriptionAdapter(
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
binding.title.longClicks()
.onEach {
itemView.context.copyToClipboard(
binding.title.text.toString(),
binding.title.text.toString()
)
}
.launchIn(scope)
binding.title.setOnLongClickListener {
itemView.context.copyToClipboard(
binding.title.text.toString(),
binding.title.text.toString()
)
true
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -12,20 +12,12 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard
import exh.metadata.bindDrawable
import exh.metadata.metadata.HBrowseSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
class HBrowseDescriptionAdapter(
private val controller: MangaController
) :
RecyclerView.Adapter<HBrowseDescriptionAdapter.HBrowseDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterHbBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HBrowseDescriptionViewHolder {
@@ -49,24 +41,21 @@ class HBrowseDescriptionAdapter(
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
binding.pages.longClicks()
.onEach {
itemView.context.copyToClipboard(
binding.pages.text.toString(),
binding.pages.text.toString()
)
}
.launchIn(scope)
binding.pages.setOnLongClickListener {
itemView.context.copyToClipboard(
binding.pages.text.toString(),
binding.pages.text.toString()
)
true
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -12,20 +12,12 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard
import exh.metadata.bindDrawable
import exh.metadata.metadata.HentaiCafeSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
class HentaiCafeDescriptionAdapter(
private val controller: MangaController
) :
RecyclerView.Adapter<HentaiCafeDescriptionAdapter.HentaiCafeDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterHcBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HentaiCafeDescriptionViewHolder {
@@ -48,24 +40,21 @@ class HentaiCafeDescriptionAdapter(
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
binding.artist.longClicks()
.onEach {
itemView.context.copyToClipboard(
binding.artist.text.toString(),
binding.artist.text.toString()
)
}
.launchIn(scope)
binding.artist.setOnLongClickListener {
itemView.context.copyToClipboard(
binding.artist.text.toString(),
binding.artist.text.toString()
)
true
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -13,13 +13,6 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.HitomiSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import java.util.Date
class HitomiDescriptionAdapter(
@@ -27,7 +20,6 @@ class HitomiDescriptionAdapter(
) :
RecyclerView.Adapter<HitomiDescriptionAdapter.HitomiDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterHiBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HitomiDescriptionViewHolder {
@@ -63,25 +55,22 @@ class HitomiDescriptionAdapter(
binding.language,
binding.whenPosted
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -14,13 +14,6 @@ import exh.metadata.MetadataUtil.getRatingString
import exh.metadata.bindDrawable
import exh.metadata.metadata.MangaDexSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import kotlin.math.round
class MangaDexDescriptionAdapter(
@@ -28,7 +21,6 @@ class MangaDexDescriptionAdapter(
) :
RecyclerView.Adapter<MangaDexDescriptionAdapter.MangaDexDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterMdBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MangaDexDescriptionViewHolder {
@@ -55,24 +47,21 @@ class MangaDexDescriptionAdapter(
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
binding.rating.longClicks()
.onEach {
itemView.context.copyToClipboard(
binding.rating.text.toString(),
binding.rating.text.toString()
)
}
.launchIn(scope)
binding.rating.setOnLongClickListener {
itemView.context.copyToClipboard(
binding.rating.text.toString(),
binding.rating.text.toString()
)
true
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -14,13 +14,6 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.NHentaiSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import java.util.Date
class NHentaiDescriptionAdapter(
@@ -28,7 +21,6 @@ class NHentaiDescriptionAdapter(
) :
RecyclerView.Adapter<NHentaiDescriptionAdapter.NHentaiDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterNhBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NHentaiDescriptionViewHolder {
@@ -80,25 +72,22 @@ class NHentaiDescriptionAdapter(
binding.pages,
binding.whenPosted
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -14,13 +14,6 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.PervEdenSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import java.util.Locale
import kotlin.math.round
@@ -29,7 +22,6 @@ class PervEdenDescriptionAdapter(
) :
RecyclerView.Adapter<PervEdenDescriptionAdapter.PervEdenDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterPeBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PervEdenDescriptionViewHolder {
@@ -70,25 +62,22 @@ class PervEdenDescriptionAdapter(
binding.language,
binding.rating
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -14,13 +14,6 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.PururinSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import kotlin.math.round
class PururinDescriptionAdapter(
@@ -28,7 +21,6 @@ class PururinDescriptionAdapter(
) :
RecyclerView.Adapter<PururinDescriptionAdapter.PururinDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterPuBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PururinDescriptionViewHolder {
@@ -76,25 +68,22 @@ class PururinDescriptionAdapter(
binding.size,
binding.uploader
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -14,13 +14,6 @@ import exh.metadata.MetadataUtil
import exh.metadata.bindDrawable
import exh.metadata.metadata.TsuminoSearchMetadata
import exh.ui.metadata.MetadataViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
import reactivecircus.flowbinding.android.view.longClicks
import java.util.Date
import kotlin.math.round
@@ -29,7 +22,6 @@ class TsuminoDescriptionAdapter(
) :
RecyclerView.Adapter<TsuminoDescriptionAdapter.TsuminoDescriptionViewHolder>() {
private val scope = CoroutineScope(Job() + Dispatchers.Main)
private lateinit var binding: DescriptionAdapterTsBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TsuminoDescriptionViewHolder {
@@ -77,25 +69,22 @@ class TsuminoDescriptionAdapter(
binding.uploader,
binding.whenPosted
).forEach { textView ->
textView.longClicks()
.onEach {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
}
.launchIn(scope)
textView.setOnLongClickListener {
itemView.context.copyToClipboard(
textView.text.toString(),
textView.text.toString()
)
true
}
}
binding.moreInfo.clicks()
.onEach {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
.launchIn(scope)
binding.moreInfo.setOnClickListener {
controller.router?.pushController(
MetadataViewController(
controller.manga
).withFadeTransaction()
)
}
}
}
}
@@ -134,6 +134,11 @@ class MangadexLoginDialog(bundle: Bundle? = null) : DialogController(bundle) {
}
}
override fun onDestroy() {
super.onDestroy()
scope.cancel()
}
interface Listener {
fun siteLoginDialogClosed(source: Source)
}