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
@@ -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()
)
}
}
}
}