Loading app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/CatalogPage.kt 0 → 100644 +6 −0 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui interface CatalogPage { val displayName: String val isFullScreen: Boolean } app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/CatalogAtomContent.kt +13 −11 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ fun CatalogAtomContent( pages = pages, initialPage = initialPage, modifier = modifier, ) { onRenderPage = { when (it) { TYPOGRAPHY -> typographyItems() COLOR -> colorItems() Loading @@ -39,5 +39,7 @@ fun CatalogAtomContent( ICON -> iconItems() IMAGE -> imageItems() } } }, onRenderFullScreenPage = {}, ) } app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/CatalogAtomPage.kt +4 −2 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui.atom import app.k9mail.ui.catalog.ui.CatalogPage import kotlinx.collections.immutable.toImmutableList enum class CatalogAtomPage( private val displayName: String, ) { override val displayName: String, override val isFullScreen: Boolean = false, ) : CatalogPage { TYPOGRAPHY("Typography"), COLOR("Colors"), BUTTON("Buttons"), Loading app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt +18 −14 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui.common import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer Loading @@ -20,16 +19,17 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import app.k9mail.core.ui.compose.designsystem.template.ResponsiveContentWithSurface import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.ui.catalog.ui.CatalogPage import app.k9mail.ui.catalog.ui.common.list.fullSpanItem import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) @Composable fun <T> PagedContent( fun <T : CatalogPage> PagedContent( pages: ImmutableList<T>, initialPage: T, modifier: Modifier = Modifier, onRenderFullScreenPage: @Composable (T) -> Unit = {}, onRenderPage: LazyGridScope.(T) -> Unit, ) { val pagerState = rememberPagerState( Loading Loading @@ -63,7 +63,10 @@ fun <T> PagedContent( state = pagerState, modifier = Modifier .fillMaxSize(), ) { page -> ) { pageIndex -> if (pages[pageIndex].isFullScreen) { onRenderFullScreenPage(pages[pageIndex]) } else { LazyVerticalGrid( columns = GridCells.Adaptive(MainTheme.sizes.larger), modifier = Modifier Loading @@ -72,10 +75,11 @@ fun <T> PagedContent( horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), ) { onRenderPage(pages[page]) onRenderPage(pages[pageIndex]) fullSpanItem { Spacer(modifier = Modifier.height(MainTheme.sizes.smaller)) } } } } } } } app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/CatalogMoleculeContent.kt +16 −6 Original line number Diff line number Diff line Loading @@ -4,7 +4,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import app.k9mail.ui.catalog.ui.common.PagedContent import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.INPUT import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.PULL_TO_REFRESH import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.STATE import app.k9mail.ui.catalog.ui.molecule.items.PullToRefresh import app.k9mail.ui.catalog.ui.molecule.items.inputItems import app.k9mail.ui.catalog.ui.molecule.items.stateItems import kotlinx.collections.immutable.ImmutableList Loading @@ -19,10 +21,18 @@ fun CatalogMoleculeContent( pages = pages, initialPage = initialPage, modifier = modifier, ) { onRenderPage = { when (it) { INPUT -> inputItems() STATE -> stateItems() else -> throw IllegalArgumentException("Unknown page: $it") } }, onRenderFullScreenPage = { page -> when (page) { PULL_TO_REFRESH -> PullToRefresh() else -> throw IllegalArgumentException("Unknown page: $page") } }, ) } Loading
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/CatalogPage.kt 0 → 100644 +6 −0 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui interface CatalogPage { val displayName: String val isFullScreen: Boolean }
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/CatalogAtomContent.kt +13 −11 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ fun CatalogAtomContent( pages = pages, initialPage = initialPage, modifier = modifier, ) { onRenderPage = { when (it) { TYPOGRAPHY -> typographyItems() COLOR -> colorItems() Loading @@ -39,5 +39,7 @@ fun CatalogAtomContent( ICON -> iconItems() IMAGE -> imageItems() } } }, onRenderFullScreenPage = {}, ) }
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/CatalogAtomPage.kt +4 −2 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui.atom import app.k9mail.ui.catalog.ui.CatalogPage import kotlinx.collections.immutable.toImmutableList enum class CatalogAtomPage( private val displayName: String, ) { override val displayName: String, override val isFullScreen: Boolean = false, ) : CatalogPage { TYPOGRAPHY("Typography"), COLOR("Colors"), BUTTON("Buttons"), Loading
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt +18 −14 Original line number Diff line number Diff line package app.k9mail.ui.catalog.ui.common import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer Loading @@ -20,16 +19,17 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import app.k9mail.core.ui.compose.designsystem.template.ResponsiveContentWithSurface import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.ui.catalog.ui.CatalogPage import app.k9mail.ui.catalog.ui.common.list.fullSpanItem import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) @Composable fun <T> PagedContent( fun <T : CatalogPage> PagedContent( pages: ImmutableList<T>, initialPage: T, modifier: Modifier = Modifier, onRenderFullScreenPage: @Composable (T) -> Unit = {}, onRenderPage: LazyGridScope.(T) -> Unit, ) { val pagerState = rememberPagerState( Loading Loading @@ -63,7 +63,10 @@ fun <T> PagedContent( state = pagerState, modifier = Modifier .fillMaxSize(), ) { page -> ) { pageIndex -> if (pages[pageIndex].isFullScreen) { onRenderFullScreenPage(pages[pageIndex]) } else { LazyVerticalGrid( columns = GridCells.Adaptive(MainTheme.sizes.larger), modifier = Modifier Loading @@ -72,10 +75,11 @@ fun <T> PagedContent( horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), ) { onRenderPage(pages[page]) onRenderPage(pages[pageIndex]) fullSpanItem { Spacer(modifier = Modifier.height(MainTheme.sizes.smaller)) } } } } } } }
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/CatalogMoleculeContent.kt +16 −6 Original line number Diff line number Diff line Loading @@ -4,7 +4,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import app.k9mail.ui.catalog.ui.common.PagedContent import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.INPUT import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.PULL_TO_REFRESH import app.k9mail.ui.catalog.ui.molecule.CatalogMoleculePage.STATE import app.k9mail.ui.catalog.ui.molecule.items.PullToRefresh import app.k9mail.ui.catalog.ui.molecule.items.inputItems import app.k9mail.ui.catalog.ui.molecule.items.stateItems import kotlinx.collections.immutable.ImmutableList Loading @@ -19,10 +21,18 @@ fun CatalogMoleculeContent( pages = pages, initialPage = initialPage, modifier = modifier, ) { onRenderPage = { when (it) { INPUT -> inputItems() STATE -> stateItems() else -> throw IllegalArgumentException("Unknown page: $it") } }, onRenderFullScreenPage = { page -> when (page) { PULL_TO_REFRESH -> PullToRefresh() else -> throw IllegalArgumentException("Unknown page: $page") } }, ) }