Migrate more screens to full Compose

This commit is contained in:
arkon 2022-07-16 21:00:01 -04:00
parent 459b369feb
commit cbfe9c30bb
4 changed files with 68 additions and 48 deletions

View file

@ -1,20 +1,24 @@
package eu.kanade.presentation.browse
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LazyColumn
import eu.kanade.presentation.components.LoadingScreen
import eu.kanade.presentation.components.PreferenceRow
import eu.kanade.presentation.components.Scaffold
import eu.kanade.presentation.util.plus
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterPresenter
import eu.kanade.tachiyomi.util.system.LocaleHelper
@ -23,21 +27,31 @@ import kotlinx.coroutines.flow.collectLatest
@Composable
fun ExtensionFilterScreen(
nestedScrollInterop: NestedScrollConnection,
navigateUp: () -> Unit,
presenter: ExtensionFilterPresenter,
) {
val context = LocalContext.current
when {
presenter.isLoading -> LoadingScreen()
presenter.isEmpty -> EmptyScreen(textResource = R.string.empty_screen)
else -> {
SourceFilterContent(
nestedScrollInterop = nestedScrollInterop,
state = presenter,
onClickLang = {
presenter.toggleLanguage(it)
},
Scaffold(
modifier = Modifier.statusBarsPadding(),
topBar = {
AppBar(
title = stringResource(R.string.label_extensions),
navigateUp = navigateUp,
)
},
) { paddingValues ->
when {
presenter.isLoading -> LoadingScreen()
presenter.isEmpty -> EmptyScreen(textResource = R.string.empty_screen)
else -> {
SourceFilterContent(
paddingValues = paddingValues,
state = presenter,
onClickLang = {
presenter.toggleLanguage(it)
},
)
}
}
}
LaunchedEffect(Unit) {
@ -53,13 +67,12 @@ fun ExtensionFilterScreen(
@Composable
fun SourceFilterContent(
nestedScrollInterop: NestedScrollConnection,
paddingValues: PaddingValues,
state: ExtensionFilterState,
onClickLang: (String) -> Unit,
) {
LazyColumn(
modifier = Modifier.nestedScroll(nestedScrollInterop),
contentPadding = WindowInsets.navigationBars.asPaddingValues(),
contentPadding = paddingValues + WindowInsets.navigationBars.asPaddingValues(),
) {
items(
items = state.items,

View file

@ -1,20 +1,23 @@
package eu.kanade.presentation.browse
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import eu.kanade.domain.manga.model.Manga
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LoadingScreen
import eu.kanade.presentation.components.Scaffold
import eu.kanade.presentation.components.ScrollbarLazyColumn
import eu.kanade.presentation.manga.components.BaseMangaListItem
import eu.kanade.presentation.util.plus
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrateMangaPresenter
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrateMangaPresenter.Event
@ -23,22 +26,33 @@ import kotlinx.coroutines.flow.collectLatest
@Composable
fun MigrateMangaScreen(
nestedScrollInterop: NestedScrollConnection,
navigateUp: () -> Unit,
title: String?,
presenter: MigrateMangaPresenter,
onClickItem: (Manga) -> Unit,
onClickCover: (Manga) -> Unit,
) {
val context = LocalContext.current
when {
presenter.isLoading -> LoadingScreen()
presenter.isEmpty -> EmptyScreen(textResource = R.string.empty_screen)
else -> {
MigrateMangaContent(
nestedScrollInterop = nestedScrollInterop,
state = presenter,
onClickItem = onClickItem,
onClickCover = onClickCover,
Scaffold(
modifier = Modifier.statusBarsPadding(),
topBar = {
AppBar(
title = title,
navigateUp = navigateUp,
)
},
) { paddingValues ->
when {
presenter.isLoading -> LoadingScreen()
presenter.isEmpty -> EmptyScreen(textResource = R.string.empty_screen)
else -> {
MigrateMangaContent(
paddingValues = paddingValues,
state = presenter,
onClickItem = onClickItem,
onClickCover = onClickCover,
)
}
}
}
LaunchedEffect(Unit) {
@ -54,14 +68,13 @@ fun MigrateMangaScreen(
@Composable
fun MigrateMangaContent(
nestedScrollInterop: NestedScrollConnection,
paddingValues: PaddingValues,
state: MigrateMangaState,
onClickItem: (Manga) -> Unit,
onClickCover: (Manga) -> Unit,
) {
ScrollbarLazyColumn(
modifier = Modifier.nestedScroll(nestedScrollInterop),
contentPadding = WindowInsets.navigationBars.asPaddingValues(),
contentPadding = paddingValues + WindowInsets.navigationBars.asPaddingValues(),
) {
items(state.items) { manga ->
MigrateMangaItem(

View file

@ -1,21 +1,17 @@
package eu.kanade.tachiyomi.ui.browse.extension
import androidx.compose.runtime.Composable
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import eu.kanade.presentation.browse.ExtensionFilterScreen
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.controller.ComposeController
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
class ExtensionFilterController : ComposeController<ExtensionFilterPresenter>() {
class ExtensionFilterController : FullComposeController<ExtensionFilterPresenter>() {
override fun getTitle() = resources?.getString(R.string.label_extensions)
override fun createPresenter(): ExtensionFilterPresenter = ExtensionFilterPresenter()
override fun createPresenter() = ExtensionFilterPresenter()
@Composable
override fun ComposeContent(nestedScrollInterop: NestedScrollConnection) {
override fun ComposeContent() {
ExtensionFilterScreen(
nestedScrollInterop = nestedScrollInterop,
navigateUp = router::popCurrentController,
presenter = presenter,
)
}

View file

@ -2,15 +2,14 @@ package eu.kanade.tachiyomi.ui.browse.migration.manga
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.core.os.bundleOf
import eu.kanade.presentation.browse.MigrateMangaScreen
import eu.kanade.tachiyomi.ui.base.controller.ComposeController
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
import eu.kanade.tachiyomi.ui.base.controller.pushController
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
import eu.kanade.tachiyomi.ui.manga.MangaController
class MigrationMangaController : ComposeController<MigrateMangaPresenter> {
class MigrationMangaController : FullComposeController<MigrateMangaPresenter> {
constructor(sourceId: Long, sourceName: String?) : super(
bundleOf(
@ -28,14 +27,13 @@ class MigrationMangaController : ComposeController<MigrateMangaPresenter> {
private val sourceId: Long = args.getLong(SOURCE_ID_EXTRA)
private val sourceName: String? = args.getString(SOURCE_NAME_EXTRA)
override fun getTitle(): String? = sourceName
override fun createPresenter(): MigrateMangaPresenter = MigrateMangaPresenter(sourceId)
override fun createPresenter() = MigrateMangaPresenter(sourceId)
@Composable
override fun ComposeContent(nestedScrollInterop: NestedScrollConnection) {
override fun ComposeContent() {
MigrateMangaScreen(
nestedScrollInterop = nestedScrollInterop,
navigateUp = router::popCurrentController,
title = sourceName,
presenter = presenter,
onClickItem = {
router.pushController(SearchController(it.id))