mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
refactor(library/compose): StateCoroutinePresenter
This commit is contained in:
parent
7d9c0faf86
commit
48c2ad9b33
8 changed files with 116 additions and 54 deletions
|
@ -0,0 +1,15 @@
|
|||
package eu.kanade.tachiyomi.ui.base.presenter
|
||||
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
/**
|
||||
* Presenter that mimic [cafe.adriel.voyager.core.model.StateScreenModel] for easier migration.
|
||||
* Temporary class while we're migrating to Compose.
|
||||
*/
|
||||
abstract class StateCoroutinePresenter<S, C>(initialState: S) : BaseCoroutinePresenter<C>() {
|
||||
|
||||
protected val mutableState: MutableStateFlow<S> = MutableStateFlow(initialState)
|
||||
val state: StateFlow<S> = mutableState.asStateFlow()
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
package eu.kanade.tachiyomi.ui.library
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.compose.runtime.Composable
|
||||
import cafe.adriel.voyager.navigator.Navigator
|
||||
import cafe.adriel.voyager.transitions.CrossfadeTransition
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import yokai.presentation.library.LibraryScreen
|
||||
|
||||
class LibraryComposeController(
|
||||
bundle: Bundle? = null,
|
||||
val uiPreferences: UiPreferences = Injekt.get(),
|
||||
val preferences: PreferencesHelper = Injekt.get(),
|
||||
) : BaseComposeController(bundle) {
|
||||
override val shouldHideLegacyAppBar = false
|
||||
|
||||
@Composable
|
||||
override fun ScreenContent() {
|
||||
Navigator(
|
||||
screen = LibraryScreen(),
|
||||
content = {
|
||||
CrossfadeTransition(navigator = it)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package eu.kanade.tachiyomi.ui.library.compose
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.databinding.LibraryControllerBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseCoroutineController
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import yokai.presentation.library.LibraryContent
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
class LibraryComposeController(
|
||||
bundle: Bundle? = null,
|
||||
val uiPreferences: UiPreferences = Injekt.get(),
|
||||
val preferences: PreferencesHelper = Injekt.get(),
|
||||
) : BaseCoroutineController<LibraryControllerBinding, LibraryComposePresenter>(bundle) {
|
||||
|
||||
override val presenter = LibraryComposePresenter()
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater) = LibraryControllerBinding.inflate(inflater)
|
||||
|
||||
override fun onViewCreated(view: View) {
|
||||
super.onViewCreated(view)
|
||||
binding.composeView.isVisible = true
|
||||
binding.swipeRefresh.isGone = true
|
||||
|
||||
binding.composeView.setContent {
|
||||
YokaiTheme {
|
||||
ScreenContent()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ScreenContent() {
|
||||
val state by presenter.state.collectAsState()
|
||||
LibraryContent(
|
||||
columns = 3,
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package eu.kanade.tachiyomi.ui.library.compose
|
||||
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.StateCoroutinePresenter
|
||||
|
||||
class LibraryComposePresenter :
|
||||
StateCoroutinePresenter<LibraryComposePresenter.State, LibraryComposeController>(State.Loading) {
|
||||
|
||||
sealed interface State {
|
||||
data object Loading : State
|
||||
}
|
||||
}
|
|
@ -85,8 +85,8 @@ import eu.kanade.tachiyomi.ui.base.SmallToolbarInterface
|
|||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseLegacyController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryComposeController
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryController
|
||||
import eu.kanade.tachiyomi.ui.library.compose.LibraryComposeController
|
||||
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
||||
import eu.kanade.tachiyomi.ui.more.AboutController
|
||||
import eu.kanade.tachiyomi.ui.more.OverflowDialog
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package yokai.presentation.library
|
||||
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import yokai.presentation.AppBarType
|
||||
import yokai.presentation.YokaiScaffold
|
||||
import yokai.presentation.library.components.LazyLibraryGrid
|
||||
|
||||
@Composable
|
||||
fun LibraryContent(
|
||||
columns: Int,
|
||||
) {
|
||||
val items = (0..100).toList()
|
||||
YokaiScaffold(
|
||||
onNavigationIconClicked = {},
|
||||
appBarType = AppBarType.NONE,
|
||||
) { contentPadding ->
|
||||
LazyLibraryGrid(
|
||||
columns = columns,
|
||||
contentPadding = contentPadding,
|
||||
) {
|
||||
items(
|
||||
items = items,
|
||||
contentType = { "library_grid_item" }
|
||||
) {
|
||||
Text("Hello world! ($it)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,33 +1,13 @@
|
|||
package yokai.presentation.library
|
||||
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import yokai.presentation.AppBarType
|
||||
import yokai.presentation.YokaiScaffold
|
||||
import yokai.presentation.library.components.LazyLibraryGrid
|
||||
import yokai.util.Screen
|
||||
|
||||
class LibraryScreen : Screen() {
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val columns = 3 // FIXME: Retrieve from preferences
|
||||
val items = (0..100).toList()
|
||||
YokaiScaffold(
|
||||
onNavigationIconClicked = {},
|
||||
appBarType = AppBarType.NONE,
|
||||
) { contentPadding ->
|
||||
LazyLibraryGrid(
|
||||
columns = columns,
|
||||
contentPadding = contentPadding,
|
||||
) {
|
||||
items(
|
||||
items = items,
|
||||
contentType = { "library_grid_item" }
|
||||
) {
|
||||
Text("Hello world! ($it)")
|
||||
}
|
||||
}
|
||||
}
|
||||
LibraryContent(
|
||||
columns = 3, // FIXME: Retrieve from preferences
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,12 @@
|
|||
android:layout_height="75dp"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/compose_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone" />
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipe_refresh"
|
||||
android:layout_width="match_parent"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue