mirror of
https://github.com/thunderbird/thunderbird-android.git
synced 2024-09-20 04:02:14 +02:00
Merge pull request #7836 from thunderbird/change-catalog-app
Change catalog app
This commit is contained in:
commit
6fd02f794a
@ -10,10 +10,23 @@ android {
|
||||
versionCode = 1
|
||||
versionName = "1.0"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
// Preview build type to render compose without debug features.
|
||||
// This gives a better idea of the real world drawing performance.
|
||||
create("preview") {
|
||||
initWith(getByName("debug"))
|
||||
applicationIdSuffix = ".preview"
|
||||
isDebuggable = false
|
||||
matchingFallbacks += listOf("release")
|
||||
isDefault = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core.ui.compose.designsystem)
|
||||
implementation(projects.core.ui.legacy.designsystem)
|
||||
|
||||
implementation(projects.core.ui.compose.theme2.thunderbird)
|
||||
implementation(projects.core.ui.compose.theme2.k9mail)
|
||||
|
@ -1,11 +1,8 @@
|
||||
package app.k9mail.ui.catalog.ui.atom.items
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
||||
import androidx.compose.foundation.layout.FlowRow
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonElevated
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilledTonal
|
||||
@ -13,72 +10,111 @@ import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonIcon
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonOutlined
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonText
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
|
||||
@Suppress("LongMethod")
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
fun LazyGridScope.buttonItems() {
|
||||
sectionHeaderItem(text = "Button - Filled")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonFilled(text = "Enabled", onClick = { })
|
||||
ButtonFilled(text = "Disabled", onClick = { }, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonFilled(
|
||||
text = "Enabled",
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonFilled(
|
||||
text = "Disabled",
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "Button - Filled Tonal")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonFilledTonal(text = "Enabled", onClick = { })
|
||||
ButtonFilledTonal(text = "Disabled", onClick = { }, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonFilledTonal(
|
||||
text = "Enabled",
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonFilledTonal(
|
||||
text = "Disabled",
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "Button - Elevated")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonElevated(text = "Enabled", onClick = { })
|
||||
ButtonElevated(text = "Disabled", onClick = { }, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonElevated(
|
||||
text = "Enabled",
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonElevated(
|
||||
text = "Disabled",
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "Button - Outlined")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonOutlined(text = "Enabled", onClick = { })
|
||||
ButtonOutlined(text = "Disabled", onClick = { }, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonOutlined(
|
||||
text = "Enabled",
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonOutlined(
|
||||
text = "Disabled",
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "Button - Text")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonText(text = "Enabled", onClick = { })
|
||||
ButtonText(text = "Colored", onClick = { }, color = Color.Magenta)
|
||||
ButtonText(text = "Disabled", onClick = { }, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonText(
|
||||
text = "Enabled",
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonText(
|
||||
text = "Disabled",
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "Button - Icon")
|
||||
item {
|
||||
FlowRow(
|
||||
horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
) {
|
||||
ButtonIcon(onClick = { }, imageVector = Icons.Outlined.Info)
|
||||
ButtonIcon(onClick = { }, imageVector = Icons.Outlined.Info, enabled = false)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonIcon(
|
||||
imageVector = Icons.Outlined.AccountCircle,
|
||||
onClick = { },
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
defaultItem {
|
||||
ButtonIcon(
|
||||
imageVector = Icons.Outlined.AccountCircle,
|
||||
onClick = { },
|
||||
enabled = false,
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -4,32 +4,33 @@ import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.atom.view.ColorContent
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.wideItem
|
||||
|
||||
@Suppress("LongMethod")
|
||||
fun LazyGridScope.colorItems() {
|
||||
sectionHeaderItem(text = "Material 3 theme colors")
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Primary",
|
||||
color = MainTheme.colors.primary,
|
||||
textColor = MainTheme.colors.onPrimary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Primary",
|
||||
color = MainTheme.colors.onPrimary,
|
||||
textColor = MainTheme.colors.primary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Primary Container",
|
||||
color = MainTheme.colors.primaryContainer,
|
||||
textColor = MainTheme.colors.onPrimaryContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Primary Container",
|
||||
color = MainTheme.colors.onPrimaryContainer,
|
||||
@ -37,28 +38,28 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Secondary",
|
||||
color = MainTheme.colors.secondary,
|
||||
textColor = MainTheme.colors.onSecondary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Secondary",
|
||||
color = MainTheme.colors.onSecondary,
|
||||
textColor = MainTheme.colors.secondary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Secondary Container",
|
||||
color = MainTheme.colors.secondaryContainer,
|
||||
textColor = MainTheme.colors.onSecondaryContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Secondary Container",
|
||||
color = MainTheme.colors.onSecondaryContainer,
|
||||
@ -66,28 +67,28 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Tertiary",
|
||||
color = MainTheme.colors.tertiary,
|
||||
textColor = MainTheme.colors.onTertiary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Tertiary",
|
||||
color = MainTheme.colors.onTertiary,
|
||||
textColor = MainTheme.colors.tertiary,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Tertiary Container",
|
||||
color = MainTheme.colors.tertiaryContainer,
|
||||
textColor = MainTheme.colors.onTertiaryContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Tertiary Container",
|
||||
color = MainTheme.colors.onTertiaryContainer,
|
||||
@ -95,28 +96,28 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Error",
|
||||
color = MainTheme.colors.error,
|
||||
textColor = MainTheme.colors.onError,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Error",
|
||||
color = MainTheme.colors.onError,
|
||||
textColor = MainTheme.colors.error,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Error Container",
|
||||
color = MainTheme.colors.errorContainer,
|
||||
textColor = MainTheme.colors.onErrorContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Error Container",
|
||||
color = MainTheme.colors.onErrorContainer,
|
||||
@ -124,56 +125,56 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface",
|
||||
color = MainTheme.colors.surface,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Surface",
|
||||
color = MainTheme.colors.onSurface,
|
||||
textColor = MainTheme.colors.surface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Surface Variant",
|
||||
color = MainTheme.colors.onSurfaceVariant,
|
||||
textColor = MainTheme.colors.surface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Container Lowest",
|
||||
color = MainTheme.colors.surfaceContainerLowest,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Container Low",
|
||||
color = MainTheme.colors.surfaceContainerLow,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Container",
|
||||
color = MainTheme.colors.surfaceContainer,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Container High",
|
||||
color = MainTheme.colors.surfaceContainerHigh,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Container Highest",
|
||||
color = MainTheme.colors.surfaceContainerHighest,
|
||||
@ -181,21 +182,21 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Inverse Surface",
|
||||
color = MainTheme.colors.inverseSurface,
|
||||
textColor = MainTheme.colors.inverseOnSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Inverse On Surface",
|
||||
color = MainTheme.colors.inverseOnSurface,
|
||||
textColor = MainTheme.colors.inverseSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Inverse Primary",
|
||||
color = MainTheme.colors.inversePrimary,
|
||||
@ -203,7 +204,7 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Outline",
|
||||
color = MainTheme.colors.outline,
|
||||
@ -211,7 +212,7 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Outline Variant",
|
||||
color = MainTheme.colors.outlineVariant,
|
||||
@ -219,14 +220,14 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Bright",
|
||||
color = MainTheme.colors.surfaceBright,
|
||||
textColor = MainTheme.colors.onSurface,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Surface Dim",
|
||||
color = MainTheme.colors.surfaceDim,
|
||||
@ -236,28 +237,28 @@ fun LazyGridScope.colorItems() {
|
||||
|
||||
sectionHeaderItem(text = "Material 3 theme custom colors")
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Info",
|
||||
color = MainTheme.colors.info,
|
||||
textColor = MainTheme.colors.onInfo,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Info",
|
||||
color = MainTheme.colors.onInfo,
|
||||
textColor = MainTheme.colors.info,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Info Container",
|
||||
color = MainTheme.colors.infoContainer,
|
||||
textColor = MainTheme.colors.onInfoContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Info Container",
|
||||
color = MainTheme.colors.onInfoContainer,
|
||||
@ -265,28 +266,28 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Success",
|
||||
color = MainTheme.colors.success,
|
||||
textColor = MainTheme.colors.onSuccess,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Success",
|
||||
color = MainTheme.colors.onSuccess,
|
||||
textColor = MainTheme.colors.success,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Success Container",
|
||||
color = MainTheme.colors.successContainer,
|
||||
textColor = MainTheme.colors.onSuccessContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Success Container",
|
||||
color = MainTheme.colors.onSuccessContainer,
|
||||
@ -294,28 +295,28 @@ fun LazyGridScope.colorItems() {
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Warning",
|
||||
color = MainTheme.colors.warning,
|
||||
textColor = MainTheme.colors.onWarning,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Warning",
|
||||
color = MainTheme.colors.onWarning,
|
||||
textColor = MainTheme.colors.warning,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "Warning Container",
|
||||
color = MainTheme.colors.warningContainer,
|
||||
textColor = MainTheme.colors.onWarningContainer,
|
||||
)
|
||||
}
|
||||
item {
|
||||
wideItem {
|
||||
ColorContent(
|
||||
text = "On Warning Container",
|
||||
color = MainTheme.colors.onWarningContainer,
|
||||
|
@ -2,25 +2,39 @@ package app.k9mail.ui.catalog.ui.atom.items
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodySmall
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
import androidx.compose.material3.Icon as Material3Icon
|
||||
import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons as LegacyIcons
|
||||
|
||||
fun LazyGridScope.iconItems() {
|
||||
sectionHeaderItem(text = "Filled")
|
||||
sectionHeaderItem(
|
||||
text = "Compose Icons",
|
||||
)
|
||||
sectionSubtitleItem(text = "Filled")
|
||||
getIconsFor(Icons.Filled)
|
||||
sectionHeaderItem(text = "Outlined")
|
||||
sectionSubtitleItem(text = "Outlined")
|
||||
getIconsFor(Icons.Outlined)
|
||||
sectionHeaderItem(
|
||||
text = "Legacy Icons",
|
||||
)
|
||||
sectionSubtitleItem(text = "Filled")
|
||||
getLegacyIconsFor(LegacyIcons.Filled)
|
||||
sectionSubtitleItem(text = "Outlined")
|
||||
getLegacyIconsFor(LegacyIcons.Outlined)
|
||||
}
|
||||
|
||||
private inline fun <reified T> LazyGridScope.getIconsFor(icons: T) {
|
||||
@ -28,7 +42,7 @@ private inline fun <reified T> LazyGridScope.getIconsFor(icons: T) {
|
||||
if (exclusions.contains(method.name)) {
|
||||
continue
|
||||
} else if (method.name.startsWith("get")) {
|
||||
item {
|
||||
defaultItem {
|
||||
method.isAccessible = true
|
||||
val imageVector = method.invoke(icons) as ImageVector
|
||||
IconItem(
|
||||
@ -40,6 +54,23 @@ private inline fun <reified T> LazyGridScope.getIconsFor(icons: T) {
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <reified T> LazyGridScope.getLegacyIconsFor(icons: T) {
|
||||
for (method in T::class.java.methods) {
|
||||
if (exclusions.contains(method.name)) {
|
||||
continue
|
||||
} else if (method.name.startsWith("get")) {
|
||||
defaultItem {
|
||||
method.isAccessible = true
|
||||
val drawableResId = method.invoke(icons) as Int
|
||||
LegacyIconItem(
|
||||
name = method.name.replaceFirst("get", ""),
|
||||
drawableResId = drawableResId,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val exclusions = listOf("getClass")
|
||||
|
||||
@Composable
|
||||
@ -50,20 +81,35 @@ private fun IconItem(
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.itemDefaultPadding()
|
||||
.padding(defaultItemPadding())
|
||||
.then(modifier),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
) {
|
||||
Row {
|
||||
Icon(
|
||||
imageVector = imageVector,
|
||||
)
|
||||
Icon(
|
||||
imageVector = imageVector,
|
||||
tint = Color.Magenta,
|
||||
)
|
||||
}
|
||||
Icon(
|
||||
imageVector = imageVector,
|
||||
)
|
||||
TextBodySmall(text = name)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun LegacyIconItem(
|
||||
name: String,
|
||||
drawableResId: Int,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(defaultItemPadding())
|
||||
.then(modifier),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
) {
|
||||
Material3Icon(
|
||||
painter = painterResource(id = drawableResId),
|
||||
contentDescription = null,
|
||||
)
|
||||
TextBodySmall(text = name)
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
@ -16,17 +17,19 @@ import androidx.compose.ui.unit.dp
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.image.FixedScaleImage
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodySmall
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
|
||||
fun LazyGridScope.imageItems() {
|
||||
sectionHeaderItem(text = "Images")
|
||||
item {
|
||||
defaultItem {
|
||||
Image(
|
||||
painter = painterResource(id = MainTheme.images.logo),
|
||||
contentDescription = "logo",
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
)
|
||||
}
|
||||
|
||||
@ -38,21 +41,21 @@ fun LazyGridScope.imageItems() {
|
||||
|
||||
private fun LazyGridScope.fixedScaleImagesCropped() {
|
||||
sectionSubtitleItem(text = "Images are cropped by parent container size")
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small container",
|
||||
width = 40.dp,
|
||||
height = 40.dp,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small horizontal container",
|
||||
width = 40.dp,
|
||||
height = 200.dp,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small vertical container",
|
||||
width = 200.dp,
|
||||
@ -63,7 +66,7 @@ private fun LazyGridScope.fixedScaleImagesCropped() {
|
||||
|
||||
private fun LazyGridScope.fixedScaleImagesOverflow() {
|
||||
sectionSubtitleItem(text = "Images overflow parent container size")
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small container",
|
||||
width = 40.dp,
|
||||
@ -71,7 +74,7 @@ private fun LazyGridScope.fixedScaleImagesOverflow() {
|
||||
allowOverflow = true,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small horizontal container",
|
||||
width = 40.dp,
|
||||
@ -79,7 +82,7 @@ private fun LazyGridScope.fixedScaleImagesOverflow() {
|
||||
allowOverflow = true,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Small vertical container",
|
||||
width = 200.dp,
|
||||
@ -91,14 +94,14 @@ private fun LazyGridScope.fixedScaleImagesOverflow() {
|
||||
|
||||
private fun LazyGridScope.fixedScaleImagesAlignment() {
|
||||
sectionSubtitleItem(text = "Images with different alignments")
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Center",
|
||||
width = 200.dp,
|
||||
height = 200.dp,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Top center",
|
||||
width = 200.dp,
|
||||
@ -106,7 +109,7 @@ private fun LazyGridScope.fixedScaleImagesAlignment() {
|
||||
alignment = Alignment.TopCenter,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
FixedScaleImageView(
|
||||
description = "Bottom center",
|
||||
width = 200.dp,
|
||||
@ -125,7 +128,7 @@ private fun FixedScaleImageView(
|
||||
allowOverflow: Boolean = false,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Box(
|
||||
|
@ -1,6 +1,7 @@
|
||||
package app.k9mail.ui.catalog.ui.atom.items
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
@ -8,7 +9,8 @@ import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.Checkbox
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.Switch
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodySmall
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
|
||||
fun LazyGridScope.selectionControlItems() {
|
||||
@ -44,10 +46,10 @@ private fun LazyGridScope.captionItem(
|
||||
caption: String,
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
item {
|
||||
defaultItem {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
) {
|
||||
content()
|
||||
TextBodySmall(text = caption)
|
||||
|
@ -23,7 +23,8 @@ import app.k9mail.core.ui.compose.designsystem.atom.textfield.TextFieldOutlinedS
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.input.CheckboxInput
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.helper.WithRememberedState
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
@ -69,7 +70,7 @@ fun <T> TextFieldDemo(
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.itemDefaultPadding()
|
||||
.padding(defaultItemPadding())
|
||||
.then(modifier),
|
||||
) {
|
||||
key(state.value.showLabel, state.value.isRequired) {
|
||||
@ -148,7 +149,7 @@ fun <T> TextFieldDemo(
|
||||
private val defaultPadding = PaddingValues(0.dp)
|
||||
|
||||
private fun LazyGridScope.textFieldOutlinedItems() {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextFieldDemo(
|
||||
hasTrailingIcon = true,
|
||||
hasSingleLine = true,
|
||||
@ -175,7 +176,7 @@ private fun LazyGridScope.textFieldOutlinedItems() {
|
||||
}
|
||||
|
||||
private fun LazyGridScope.passwordTextFieldOutlinedItems() {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextFieldDemo(
|
||||
initialState = TextFieldState(
|
||||
input = "",
|
||||
@ -197,7 +198,7 @@ private fun LazyGridScope.passwordTextFieldOutlinedItems() {
|
||||
}
|
||||
|
||||
private fun LazyGridScope.emailTextFieldOutlinedItems() {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextFieldDemo(
|
||||
initialState = TextFieldState(
|
||||
input = "",
|
||||
@ -219,7 +220,7 @@ private fun LazyGridScope.emailTextFieldOutlinedItems() {
|
||||
}
|
||||
|
||||
private fun LazyGridScope.numberTextFieldOutlinedItems() {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextFieldDemo(
|
||||
initialState = TextFieldState<Long?>(
|
||||
input = 123L,
|
||||
@ -246,7 +247,7 @@ private data class TextFieldSelectState(
|
||||
)
|
||||
|
||||
private fun LazyGridScope.selectionTextFieldOutlinedItems() {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextFieldDemo(
|
||||
initialState = TextFieldState(
|
||||
input = TextFieldSelectState(),
|
||||
|
@ -1,5 +1,6 @@
|
||||
package app.k9mail.ui.catalog.ui.atom.items
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
@ -22,7 +23,8 @@ import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelSmall
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleLarge
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleSmall
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
|
||||
fun LazyGridScope.typographyItems() {
|
||||
@ -41,112 +43,112 @@ private fun LazyGridScope.textItems(
|
||||
isAnnotated: Boolean = false,
|
||||
color: Color = Color.Unspecified,
|
||||
) {
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextDisplayLarge(
|
||||
text = annotatedString("DisplayLarge", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextDisplayMedium(
|
||||
text = annotatedString("DisplayMedium", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextDisplaySmall(
|
||||
text = annotatedString("DisplaySmall", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextHeadlineLarge(
|
||||
text = annotatedString("HeadlineLarge", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextHeadlineMedium(
|
||||
text = annotatedString("HeadlineMedium", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextHeadlineSmall(
|
||||
text = annotatedString("HeadlineSmall", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextTitleLarge(
|
||||
text = annotatedString("TitleLarge", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextTitleMedium(
|
||||
text = annotatedString("TitleMedium", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextTitleSmall(
|
||||
text = annotatedString("TitleSmall", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextBodyLarge(
|
||||
text = annotatedString("BodyLarge", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextBodyMedium(
|
||||
text = annotatedString("BodyMedium", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextBodySmall(
|
||||
text = annotatedString("BodySmall", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextLabelLarge(
|
||||
text = annotatedString("LabelLarge", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextLabelMedium(
|
||||
text = annotatedString("LabelMedium", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
item {
|
||||
fullSpanItem {
|
||||
TextLabelSmall(
|
||||
text = annotatedString("LabelSmall", isAnnotated),
|
||||
modifier = Modifier.itemDefaultPadding(),
|
||||
modifier = Modifier.padding(defaultItemPadding()),
|
||||
color = color,
|
||||
)
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ import app.k9mail.core.ui.compose.designsystem.atom.Surface
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodySmall
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.list.itemDefaultPadding
|
||||
import app.k9mail.ui.catalog.ui.common.list.defaultItemPadding
|
||||
|
||||
@Composable
|
||||
internal fun ColorContent(
|
||||
@ -25,7 +25,7 @@ internal fun ColorContent(
|
||||
Surface(
|
||||
color = color,
|
||||
modifier = Modifier
|
||||
.itemDefaultPadding()
|
||||
.padding(defaultItemPadding())
|
||||
.then(modifier),
|
||||
) {
|
||||
Row(
|
||||
|
@ -18,9 +18,9 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.k9mail.core.ui.compose.designsystem.template.ResponsiveContentWithSurface
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@ -65,7 +65,7 @@ fun <T> PagedContent(
|
||||
.fillMaxSize(),
|
||||
) { page ->
|
||||
LazyVerticalGrid(
|
||||
columns = GridCells.Adaptive(300.dp),
|
||||
columns = GridCells.Adaptive(MainTheme.sizes.larger),
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.imePadding(),
|
||||
@ -73,7 +73,7 @@ fun <T> PagedContent(
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double),
|
||||
) {
|
||||
onRenderPage(pages[page])
|
||||
item { Spacer(modifier = Modifier.height(MainTheme.sizes.smaller)) }
|
||||
fullSpanItem { Spacer(modifier = Modifier.height(MainTheme.sizes.smaller)) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package app.k9mail.ui.catalog.ui.common.list
|
||||
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridItemScope
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
import java.util.UUID
|
||||
|
||||
fun LazyGridScope.defaultItem(content: @Composable LazyGridItemScope.() -> Unit) {
|
||||
item(
|
||||
key = UUID.randomUUID().toString(),
|
||||
) {
|
||||
content()
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package app.k9mail.ui.catalog.ui.common.list
|
||||
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
|
||||
@Composable
|
||||
fun defaultItemPadding(): PaddingValues = PaddingValues(
|
||||
horizontal = MainTheme.spacings.double,
|
||||
)
|
@ -0,0 +1,16 @@
|
||||
package app.k9mail.ui.catalog.ui.common.list
|
||||
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridItemScope
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
import java.util.UUID
|
||||
|
||||
fun LazyGridScope.fullSpanItem(content: @Composable LazyGridItemScope.() -> Unit) {
|
||||
item(
|
||||
key = UUID.randomUUID().toString(),
|
||||
span = { GridItemSpan(maxLineSpan) },
|
||||
) {
|
||||
content()
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package app.k9mail.ui.catalog.ui.common.list
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.composed
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
|
||||
fun Modifier.itemDefaultPadding(): Modifier = composed {
|
||||
padding(
|
||||
horizontal = MainTheme.spacings.double,
|
||||
)
|
||||
}
|
@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
@ -12,14 +13,14 @@ import androidx.compose.ui.unit.dp
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
|
||||
@Composable
|
||||
fun ItemOutlined(
|
||||
fun ItemOutlinedView(
|
||||
modifier: Modifier = Modifier,
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
modifier = Modifier
|
||||
.itemDefaultPadding()
|
||||
.padding(defaultItemPadding())
|
||||
.then(modifier),
|
||||
) {
|
||||
Box(
|
@ -3,7 +3,6 @@ package app.k9mail.ui.catalog.ui.common.list
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal
|
||||
@ -13,7 +12,7 @@ import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
fun LazyGridScope.sectionHeaderItem(
|
||||
text: String,
|
||||
) {
|
||||
item(span = { GridItemSpan(maxLineSpan) }) {
|
||||
fullSpanItem {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -3,7 +3,6 @@ package app.k9mail.ui.catalog.ui.common.list
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@ -13,7 +12,7 @@ import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
fun LazyGridScope.sectionInfoItem(
|
||||
text: String,
|
||||
) {
|
||||
item(span = { GridItemSpan(maxLineSpan) }) {
|
||||
fullSpanItem {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -3,7 +3,6 @@ package app.k9mail.ui.catalog.ui.common.list
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal
|
||||
@ -13,7 +12,7 @@ import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
fun LazyGridScope.sectionSubtitleItem(
|
||||
text: String,
|
||||
) {
|
||||
item(span = { GridItemSpan(maxLineSpan) }) {
|
||||
fullSpanItem {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -0,0 +1,16 @@
|
||||
package app.k9mail.ui.catalog.ui.common.list
|
||||
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridItemScope
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridScope
|
||||
import androidx.compose.runtime.Composable
|
||||
import java.util.UUID
|
||||
|
||||
fun LazyGridScope.wideItem(content: @Composable LazyGridItemScope.() -> Unit) {
|
||||
item(
|
||||
key = UUID.randomUUID().toString(),
|
||||
span = { GridItemSpan(2) },
|
||||
) {
|
||||
content()
|
||||
}
|
||||
}
|
@ -9,7 +9,8 @@ import app.k9mail.core.ui.compose.designsystem.molecule.input.SelectInput
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.input.SwitchInput
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.input.TextInput
|
||||
import app.k9mail.ui.catalog.ui.common.helper.WithRememberedState
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlined
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlinedView
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
@ -18,8 +19,8 @@ import kotlinx.collections.immutable.persistentListOf
|
||||
fun LazyGridScope.inputItems() {
|
||||
sectionHeaderItem(text = "TextInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "") { state ->
|
||||
TextInput(
|
||||
text = state.value,
|
||||
@ -29,8 +30,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "") { state ->
|
||||
TextInput(
|
||||
text = state.value,
|
||||
@ -43,8 +44,8 @@ fun LazyGridScope.inputItems() {
|
||||
|
||||
sectionHeaderItem(text = "EmailAddressInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "") { state ->
|
||||
EmailAddressInput(
|
||||
emailAddress = state.value,
|
||||
@ -54,8 +55,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "wrong email address") { state ->
|
||||
EmailAddressInput(
|
||||
emailAddress = state.value,
|
||||
@ -68,8 +69,8 @@ fun LazyGridScope.inputItems() {
|
||||
|
||||
sectionHeaderItem(text = "NumberInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState<Long?>(input = null) { state ->
|
||||
NumberInput(
|
||||
value = state.value,
|
||||
@ -79,8 +80,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState<Long?>(input = 123L) { state ->
|
||||
NumberInput(
|
||||
value = state.value,
|
||||
@ -93,8 +94,8 @@ fun LazyGridScope.inputItems() {
|
||||
|
||||
sectionHeaderItem(text = "PasswordInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "") { state ->
|
||||
PasswordInput(
|
||||
password = state.value,
|
||||
@ -104,8 +105,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = "wrong password") { state ->
|
||||
PasswordInput(
|
||||
password = state.value,
|
||||
@ -117,9 +118,9 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
|
||||
sectionHeaderItem(text = "SelectInput")
|
||||
item {
|
||||
fullSpanItem {
|
||||
val options = persistentListOf("Option 1", "Option 2", "Option 3")
|
||||
ItemOutlined {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = options.first()) { state ->
|
||||
SelectInput(
|
||||
options = options,
|
||||
@ -132,8 +133,8 @@ fun LazyGridScope.inputItems() {
|
||||
|
||||
sectionHeaderItem(text = "CheckboxInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = false) { state ->
|
||||
CheckboxInput(
|
||||
text = "Check the box",
|
||||
@ -144,8 +145,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = false) { state ->
|
||||
CheckboxInput(
|
||||
text = "Check the box",
|
||||
@ -159,8 +160,8 @@ fun LazyGridScope.inputItems() {
|
||||
|
||||
sectionHeaderItem(text = "SwitchInput")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = false) { state ->
|
||||
SwitchInput(
|
||||
text = "Switch the toggle",
|
||||
@ -171,8 +172,8 @@ fun LazyGridScope.inputItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With error")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
WithRememberedState(input = false) { state ->
|
||||
SwitchInput(
|
||||
text = "Switch the toggle",
|
||||
|
@ -15,38 +15,39 @@ import app.k9mail.core.ui.compose.designsystem.molecule.ContentLoadingErrorState
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.ContentLoadingErrorView
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.ErrorView
|
||||
import app.k9mail.core.ui.compose.designsystem.molecule.LoadingView
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlined
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlinedView
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionInfoItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
|
||||
fun LazyGridScope.stateItems() {
|
||||
sectionHeaderItem(text = "ErrorView")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
ErrorView(
|
||||
title = "Error",
|
||||
)
|
||||
}
|
||||
}
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
ErrorView(
|
||||
title = "Error with message",
|
||||
message = "Something went wrong",
|
||||
)
|
||||
}
|
||||
}
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
ErrorView(
|
||||
title = "Error with retry",
|
||||
onRetry = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
ErrorView(
|
||||
title = "Error with retry and message",
|
||||
message = "Something went wrong",
|
||||
@ -57,14 +58,14 @@ fun LazyGridScope.stateItems() {
|
||||
|
||||
sectionHeaderItem(text = "LoadingView")
|
||||
sectionSubtitleItem(text = "Default")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
LoadingView()
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With message")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
LoadingView(
|
||||
message = "Loading...",
|
||||
)
|
||||
@ -73,9 +74,9 @@ fun LazyGridScope.stateItems() {
|
||||
|
||||
sectionHeaderItem(text = "ContentLoadingErrorView")
|
||||
sectionInfoItem(text = "Click below to change state")
|
||||
item {
|
||||
fullSpanItem {
|
||||
Column {
|
||||
ItemOutlined {
|
||||
ItemOutlinedView {
|
||||
StatefulContentLoadingErrorState()
|
||||
}
|
||||
}
|
||||
|
@ -9,15 +9,16 @@ import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
|
||||
import app.k9mail.core.ui.compose.designsystem.organism.TopAppBar
|
||||
import app.k9mail.core.ui.compose.designsystem.organism.TopAppBarWithBackButton
|
||||
import app.k9mail.core.ui.compose.designsystem.organism.TopAppBarWithMenuButton
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlined
|
||||
import app.k9mail.ui.catalog.ui.common.list.ItemOutlinedView
|
||||
import app.k9mail.ui.catalog.ui.common.list.fullSpanItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem
|
||||
import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem
|
||||
|
||||
fun LazyGridScope.appBarItems() {
|
||||
sectionHeaderItem(text = "TopAppBar")
|
||||
sectionSubtitleItem(text = "With menu icon")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
TopAppBarItem(
|
||||
title = "Title",
|
||||
actionIcon = Icons.Outlined.Info,
|
||||
@ -25,8 +26,8 @@ fun LazyGridScope.appBarItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With back menu icon")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
TopAppBarWithMenuButton(
|
||||
title = "Title",
|
||||
onMenuClick = {},
|
||||
@ -34,8 +35,8 @@ fun LazyGridScope.appBarItems() {
|
||||
}
|
||||
}
|
||||
sectionSubtitleItem(text = "With back icon")
|
||||
item {
|
||||
ItemOutlined {
|
||||
fullSpanItem {
|
||||
ItemOutlinedView {
|
||||
TopAppBarWithBackButton(
|
||||
title = "Title",
|
||||
onBackClick = {},
|
||||
|
Loading…
Reference in New Issue
Block a user