|
@@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.ui.base.controller
|
|
|
import android.os.Bundle
|
|
|
import android.view.LayoutInflater
|
|
|
import android.view.View
|
|
|
+import androidx.compose.foundation.layout.consumeWindowInsets
|
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
|
|
+import androidx.compose.ui.platform.ViewCompositionStrategy
|
|
|
import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
|
|
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
|
|
import eu.kanade.tachiyomi.databinding.ComposeControllerBinding
|
|
@@ -14,62 +16,78 @@ import nucleus.presenter.Presenter
|
|
|
/**
|
|
|
* Compose controller with a Nucleus presenter.
|
|
|
*/
|
|
|
-abstract class ComposeController<P : Presenter<*>>(bundle: Bundle? = null) : NucleusController<ComposeControllerBinding, P>(bundle) {
|
|
|
+abstract class ComposeController<P : Presenter<*>>(bundle: Bundle? = null) :
|
|
|
+ NucleusController<ComposeControllerBinding, P>(bundle),
|
|
|
+ ComposeContentController {
|
|
|
|
|
|
- override fun createBinding(inflater: LayoutInflater): ComposeControllerBinding =
|
|
|
+ override fun createBinding(inflater: LayoutInflater) =
|
|
|
ComposeControllerBinding.inflate(inflater)
|
|
|
|
|
|
override fun onViewCreated(view: View) {
|
|
|
super.onViewCreated(view)
|
|
|
|
|
|
- binding.root.setContent {
|
|
|
- val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
- TachiyomiTheme {
|
|
|
- ComposeContent(nestedScrollInterop)
|
|
|
+ binding.root.apply {
|
|
|
+ consumeWindowInsets = false
|
|
|
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
|
|
+ setContent {
|
|
|
+ val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
+ TachiyomiTheme {
|
|
|
+ ComposeContent(nestedScrollInterop)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- @Composable abstract fun ComposeContent(nestedScrollInterop: NestedScrollConnection)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Basic Compose controller without a presenter.
|
|
|
*/
|
|
|
-abstract class BasicComposeController : BaseController<ComposeControllerBinding>() {
|
|
|
+abstract class BasicComposeController :
|
|
|
+ BaseController<ComposeControllerBinding>(),
|
|
|
+ ComposeContentController {
|
|
|
|
|
|
- override fun createBinding(inflater: LayoutInflater): ComposeControllerBinding =
|
|
|
+ override fun createBinding(inflater: LayoutInflater) =
|
|
|
ComposeControllerBinding.inflate(inflater)
|
|
|
|
|
|
override fun onViewCreated(view: View) {
|
|
|
super.onViewCreated(view)
|
|
|
|
|
|
- binding.root.setContent {
|
|
|
- val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
- TachiyomiTheme {
|
|
|
- ComposeContent(nestedScrollInterop)
|
|
|
+ binding.root.apply {
|
|
|
+ consumeWindowInsets = false
|
|
|
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
|
|
+ setContent {
|
|
|
+ val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
+ TachiyomiTheme {
|
|
|
+ ComposeContent(nestedScrollInterop)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- @Composable abstract fun ComposeContent(nestedScrollInterop: NestedScrollConnection)
|
|
|
}
|
|
|
|
|
|
-abstract class SearchableComposeController<P : BasePresenter<*>>(bundle: Bundle? = null) : SearchableNucleusController<ComposeControllerBinding, P>(bundle) {
|
|
|
+abstract class SearchableComposeController<P : BasePresenter<*>>(bundle: Bundle? = null) :
|
|
|
+ SearchableNucleusController<ComposeControllerBinding, P>(bundle),
|
|
|
+ ComposeContentController {
|
|
|
|
|
|
- override fun createBinding(inflater: LayoutInflater): ComposeControllerBinding =
|
|
|
+ override fun createBinding(inflater: LayoutInflater) =
|
|
|
ComposeControllerBinding.inflate(inflater)
|
|
|
|
|
|
override fun onViewCreated(view: View) {
|
|
|
super.onViewCreated(view)
|
|
|
|
|
|
- binding.root.setContent {
|
|
|
- val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
- TachiyomiTheme {
|
|
|
- ComposeContent(nestedScrollInterop)
|
|
|
+ binding.root.apply {
|
|
|
+ consumeWindowInsets = false
|
|
|
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
|
|
+ setContent {
|
|
|
+ val nestedScrollInterop = rememberNestedScrollInteropConnection(binding.root)
|
|
|
+ TachiyomiTheme {
|
|
|
+ ComposeContent(nestedScrollInterop)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
- @Composable abstract fun ComposeContent(nestedScrollInterop: NestedScrollConnection)
|
|
|
+interface ComposeContentController {
|
|
|
+ @Composable fun ComposeContent(nestedScrollInterop: NestedScrollConnection)
|
|
|
}
|