Clean up controller viewbinding creation

Based on https://github.com/Jays2Kings/tachiyomiJ2K/blob/master/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseController.kt

(cherry picked from commit cab919d74c)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt
This commit is contained in:
arkon
2021-04-18 12:54:51 -04:00
committed by Jobobby04
parent d37b24adb1
commit aa56698dac
29 changed files with 208 additions and 386 deletions
@@ -1,31 +0,0 @@
package exh.ui.base
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.viewbinding.ViewBinding
import eu.kanade.tachiyomi.ui.base.controller.BaseController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlin.coroutines.CoroutineContext
abstract class BaseExhController<VB : ViewBinding>(bundle: Bundle? = null) : BaseController<VB>(bundle), CoroutineScope {
abstract val layoutId: Int
@LayoutRes get
override val coroutineContext: CoroutineContext = Job() + Dispatchers.Default
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
return inflater.inflate(layoutId, container, false)
}
override fun onDestroy() {
super.onDestroy()
cancel()
}
}
@@ -2,7 +2,6 @@ package exh.ui.batchadd
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.afollestad.materialdialogs.MaterialDialog
import eu.kanade.tachiyomi.R
@@ -20,85 +19,80 @@ import rx.subscriptions.CompositeSubscription
* Batch add screen
*/
class BatchAddController : NucleusController<EhFragmentBatchAddBinding, BatchAddPresenter>() {
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
binding = EhFragmentBatchAddBinding.inflate(inflater)
return binding.root
}
override fun getTitle() = activity!!.getString(R.string.batch_add)
override fun createPresenter() = BatchAddPresenter()
override fun createBinding(inflater: LayoutInflater) = EhFragmentBatchAddBinding.inflate(inflater)
override fun onViewCreated(view: View) {
super.onViewCreated(view)
with(view) {
binding.btnAddGalleries.clicks()
.onEach {
addGalleries(binding.galleriesBox.text.toString())
binding.btnAddGalleries.clicks()
.onEach {
addGalleries(binding.galleriesBox.text.toString())
}
.launchIn(viewScope)
binding.progressDismissBtn.clicks()
.onEach {
presenter.currentlyAddingRelay.call(BatchAddPresenter.STATE_PROGRESS_TO_INPUT)
}
.launchIn(viewScope)
val progressSubscriptions = CompositeSubscription()
presenter.currentlyAddingRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
progressSubscriptions.clear()
if (it == BatchAddPresenter.STATE_INPUT_TO_PROGRESS) {
showProgress(binding)
progressSubscriptions += presenter.progressRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.combineLatest(presenter.progressTotalRelay) { progress, total ->
// Show hide dismiss button
binding.progressDismissBtn.visibility =
if (progress == total) {
View.VISIBLE
} else {
View.GONE
}
formatProgress(progress, total)
}.subscribeUntilDestroy {
binding.progressText.text = it
}
progressSubscriptions += presenter.progressTotalRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
binding.progressBar.max = it
}
progressSubscriptions += presenter.progressRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
binding.progressBar.progress = it
}
presenter.eventRelay
?.onBackpressureBuffer()
?.observeOn(AndroidSchedulers.mainThread())
?.subscribeUntilDestroy {
binding.progressLog.append("$it\n")
}?.let {
progressSubscriptions += it
}
} else if (it == BatchAddPresenter.STATE_PROGRESS_TO_INPUT) {
hideProgress(binding)
presenter.currentlyAddingRelay.call(BatchAddPresenter.STATE_IDLE)
}
.launchIn(viewScope)
binding.progressDismissBtn.clicks()
.onEach {
presenter.currentlyAddingRelay.call(BatchAddPresenter.STATE_PROGRESS_TO_INPUT)
}
.launchIn(viewScope)
val progressSubscriptions = CompositeSubscription()
presenter.currentlyAddingRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
progressSubscriptions.clear()
if (it == BatchAddPresenter.STATE_INPUT_TO_PROGRESS) {
showProgress(binding)
progressSubscriptions += presenter.progressRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.combineLatest(presenter.progressTotalRelay) { progress, total ->
// Show hide dismiss button
binding.progressDismissBtn.visibility =
if (progress == total) {
View.VISIBLE
} else {
View.GONE
}
formatProgress(progress, total)
}.subscribeUntilDestroy {
binding.progressText.text = it
}
progressSubscriptions += presenter.progressTotalRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
binding.progressBar.max = it
}
progressSubscriptions += presenter.progressRelay
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.subscribeUntilDestroy {
binding.progressBar.progress = it
}
presenter.eventRelay
?.onBackpressureBuffer()
?.observeOn(AndroidSchedulers.mainThread())
?.subscribeUntilDestroy {
binding.progressLog.append("$it\n")
}?.let {
progressSubscriptions += it
}
} else if (it == BatchAddPresenter.STATE_PROGRESS_TO_INPUT) {
hideProgress(binding)
presenter.currentlyAddingRelay.call(BatchAddPresenter.STATE_IDLE)
}
}
}
}
}
private val EhFragmentBatchAddBinding.progressViews
@@ -3,7 +3,6 @@ package exh.ui.metadata
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.LinearLayoutManager
import dev.chrisbanes.insetter.applyInsetter
@@ -50,16 +49,6 @@ class MetadataViewController : NucleusController<MetadataViewControllerBinding,
return manga?.title
}
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
binding = MetadataViewControllerBinding.inflate(inflater)
binding.recycler.applyInsetter {
type(navigationBars = true) {
padding()
}
}
return binding.root
}
override fun createPresenter(): MetadataViewPresenter {
return MetadataViewPresenter(
manga!!,
@@ -67,9 +56,17 @@ class MetadataViewController : NucleusController<MetadataViewControllerBinding,
)
}
override fun createBinding(inflater: LayoutInflater) = MetadataViewControllerBinding.inflate(inflater)
override fun onViewCreated(view: View) {
super.onViewCreated(view)
binding.recycler.applyInsetter {
type(navigationBars = true) {
padding()
}
}
if (manga == null || source == null) return
binding.recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
adapter = MetadataViewAdapter(data)
@@ -3,7 +3,6 @@ package exh.ui.smartsearch
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import eu.kanade.tachiyomi.databinding.EhSmartSearchBinding
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
@@ -28,15 +27,12 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusController<EhSmartS
ARG_SMART_SEARCH_CONFIG
)
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
binding = EhSmartSearchBinding.inflate(inflater)
return binding.root
}
override fun getTitle() = source?.name.orEmpty()
override fun createPresenter() = SmartSearchPresenter(source!!, smartSearchConfig!!)
override fun createBinding(inflater: LayoutInflater) = EhSmartSearchBinding.inflate(inflater)
override fun onViewCreated(view: View) {
super.onViewCreated(view)