mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Migrate more screens to full Compose
This commit is contained in:
		@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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(
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -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))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user