Loading app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/items/IconItems.kt +25 −2 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ 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.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment Loading @@ -24,6 +25,28 @@ fun LazyGridScope.iconItems() { sectionHeaderItem( text = "Compose Icons", ) sectionSubtitleItem(text = "Sizes") defaultItem { IconItem( name = "Small", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.iconSmall), ) } defaultItem { IconItem( name = "Default", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.icon), ) } defaultItem { IconItem( name = "Large", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.iconLarge), ) } sectionSubtitleItem(text = "Filled") getIconsFor(Icons.Filled) sectionSubtitleItem(text = "Outlined") Loading Loading @@ -81,13 +104,13 @@ private fun IconItem( ) { Column( modifier = Modifier .padding(defaultItemPadding()) .then(modifier), .padding(defaultItemPadding()), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { Icon( imageVector = imageVector, modifier = modifier, ) TextBodySmall(text = name) } Loading core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadgePreview.kt +13 −1 Original line number Diff line number Diff line Loading @@ -3,13 +3,25 @@ package app.k9mail.core.ui.compose.designsystem.organism.drawer import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons @Composable @Preview(showBackground = true) internal fun NavigationDrawerItemBadgePreview() { PreviewWithThemes { NavigationDrawerItemBadge( label = "100+", label = "99+", ) } } @Composable @Preview(showBackground = true) internal fun NavigationDrawerItemBadgeWithIconPreview() { PreviewWithThemes { NavigationDrawerItemBadge( label = "99+", imageVector = Icons.Outlined.Info, ) } } core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt +35 −2 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.atom.icon import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.automirrored.outlined.Send import androidx.compose.material.icons.filled.Cancel import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.filled.Outbox import androidx.compose.material.icons.filled.Star import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.outlined.AccountCircle import androidx.compose.material.icons.outlined.Archive import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Drafts import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material.icons.outlined.ExpandLess import androidx.compose.material.icons.outlined.ExpandMore import androidx.compose.material.icons.outlined.Folder import androidx.compose.material.icons.outlined.Inbox import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Menu import androidx.compose.material.icons.outlined.Report import androidx.compose.material.icons.outlined.Security import androidx.compose.material.icons.outlined.Send import androidx.compose.material.icons.outlined.Visibility import androidx.compose.ui.graphics.vector.ImageVector import app.k9mail.core.ui.compose.designsystem.atom.icon.filled.Dot import androidx.compose.material.icons.Icons as MaterialIcons // We're using getters so not all icons are loaded into memory as soon as one of the nested objects is accessed. object Icons { object Filled { val Cancel: ImageVector get() = MaterialIcons.Filled.Cancel val CheckCircle: ImageVector get() = MaterialIcons.Filled.CheckCircle val Cancel: ImageVector get() = MaterialIcons.Filled.Cancel val Dot: ImageVector get() = MaterialIcons.Filled.Dot val Star: ImageVector get() = MaterialIcons.Filled.Star } object Outlined { val AccountCircle: ImageVector get() = MaterialIcons.Outlined.AccountCircle val Archive: ImageVector get() = MaterialIcons.Outlined.Archive val ArrowBack: ImageVector get() = MaterialIcons.AutoMirrored.Outlined.ArrowBack val Check: ImageVector get() = MaterialIcons.Outlined.Check val Delete: ImageVector get() = MaterialIcons.Outlined.Delete val Drafts: ImageVector get() = MaterialIcons.Outlined.Drafts val ErrorOutline: ImageVector get() = MaterialIcons.Outlined.ErrorOutline Loading @@ -47,6 +71,9 @@ object Icons { val ExpandLess: ImageVector get() = MaterialIcons.Outlined.ExpandLess val Folder: ImageVector get() = MaterialIcons.Outlined.Folder val Inbox: ImageVector get() = MaterialIcons.Outlined.Inbox Loading @@ -62,6 +89,12 @@ object Icons { val Security: ImageVector get() = MaterialIcons.Outlined.Security val Send: ImageVector get() = MaterialIcons.AutoMirrored.Outlined.Send val Report: ImageVector get() = MaterialIcons.Outlined.Report val Visibility: ImageVector get() = MaterialIcons.Outlined.Visibility Loading core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/filled/Dot.kt 0 → 100644 +27 −0 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.atom.icon.filled import androidx.compose.material.icons.Icons import androidx.compose.material.icons.materialIcon import androidx.compose.material.icons.materialPath import androidx.compose.ui.graphics.vector.ImageVector @Suppress("MagicNumber") val Icons.Filled.Dot: ImageVector get() { if (instance != null) { return instance!! } instance = materialIcon(name = "Filled.Dot") { materialPath { moveTo(12.0f, 6.0f) curveToRelative(-3.31f, 0.0f, -6.0f, 2.69f, -6.0f, 6.0f) reflectiveCurveToRelative(2.69f, 6.0f, 6.0f, 6.0f) reflectiveCurveToRelative(6.0f, -2.69f, 6.0f, -6.0f) reflectiveCurveToRelative(-2.69f, -6.0f, -6.0f, -6.0f) close() } } return instance!! } private var instance: ImageVector? = null core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt +29 −3 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.organism.drawer import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge import app.k9mail.core.ui.compose.theme2.MainTheme /** * A badge for a navigation drawer item with an optional icon. * * @param label The label to display. * @param modifier The modifier to apply. * @param imageVector The image vector to display (optional). */ @Composable fun NavigationDrawerItemBadge( label: String, modifier: Modifier = Modifier, imageVector: ImageVector? = null, ) { Row( modifier = modifier, verticalAlignment = Alignment.CenterVertically, ) { if (imageVector != null) { Icon( imageVector = imageVector, modifier = Modifier.size(MainTheme.sizes.iconSmall) .padding(end = MainTheme.spacings.quarter), ) } TextLabelLarge( text = label, modifier = modifier, ) } } Loading
app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/atom/items/IconItems.kt +25 −2 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ 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.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment Loading @@ -24,6 +25,28 @@ fun LazyGridScope.iconItems() { sectionHeaderItem( text = "Compose Icons", ) sectionSubtitleItem(text = "Sizes") defaultItem { IconItem( name = "Small", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.iconSmall), ) } defaultItem { IconItem( name = "Default", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.icon), ) } defaultItem { IconItem( name = "Large", imageVector = Icons.Outlined.Info, modifier = Modifier.size(MainTheme.sizes.iconLarge), ) } sectionSubtitleItem(text = "Filled") getIconsFor(Icons.Filled) sectionSubtitleItem(text = "Outlined") Loading Loading @@ -81,13 +104,13 @@ private fun IconItem( ) { Column( modifier = Modifier .padding(defaultItemPadding()) .then(modifier), .padding(defaultItemPadding()), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { Icon( imageVector = imageVector, modifier = modifier, ) TextBodySmall(text = name) } Loading
core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadgePreview.kt +13 −1 Original line number Diff line number Diff line Loading @@ -3,13 +3,25 @@ package app.k9mail.core.ui.compose.designsystem.organism.drawer import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons @Composable @Preview(showBackground = true) internal fun NavigationDrawerItemBadgePreview() { PreviewWithThemes { NavigationDrawerItemBadge( label = "100+", label = "99+", ) } } @Composable @Preview(showBackground = true) internal fun NavigationDrawerItemBadgeWithIconPreview() { PreviewWithThemes { NavigationDrawerItemBadge( label = "99+", imageVector = Icons.Outlined.Info, ) } }
core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt +35 −2 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.atom.icon import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.automirrored.outlined.Send import androidx.compose.material.icons.filled.Cancel import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.filled.Outbox import androidx.compose.material.icons.filled.Star import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.outlined.AccountCircle import androidx.compose.material.icons.outlined.Archive import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Drafts import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material.icons.outlined.ExpandLess import androidx.compose.material.icons.outlined.ExpandMore import androidx.compose.material.icons.outlined.Folder import androidx.compose.material.icons.outlined.Inbox import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Menu import androidx.compose.material.icons.outlined.Report import androidx.compose.material.icons.outlined.Security import androidx.compose.material.icons.outlined.Send import androidx.compose.material.icons.outlined.Visibility import androidx.compose.ui.graphics.vector.ImageVector import app.k9mail.core.ui.compose.designsystem.atom.icon.filled.Dot import androidx.compose.material.icons.Icons as MaterialIcons // We're using getters so not all icons are loaded into memory as soon as one of the nested objects is accessed. object Icons { object Filled { val Cancel: ImageVector get() = MaterialIcons.Filled.Cancel val CheckCircle: ImageVector get() = MaterialIcons.Filled.CheckCircle val Cancel: ImageVector get() = MaterialIcons.Filled.Cancel val Dot: ImageVector get() = MaterialIcons.Filled.Dot val Star: ImageVector get() = MaterialIcons.Filled.Star } object Outlined { val AccountCircle: ImageVector get() = MaterialIcons.Outlined.AccountCircle val Archive: ImageVector get() = MaterialIcons.Outlined.Archive val ArrowBack: ImageVector get() = MaterialIcons.AutoMirrored.Outlined.ArrowBack val Check: ImageVector get() = MaterialIcons.Outlined.Check val Delete: ImageVector get() = MaterialIcons.Outlined.Delete val Drafts: ImageVector get() = MaterialIcons.Outlined.Drafts val ErrorOutline: ImageVector get() = MaterialIcons.Outlined.ErrorOutline Loading @@ -47,6 +71,9 @@ object Icons { val ExpandLess: ImageVector get() = MaterialIcons.Outlined.ExpandLess val Folder: ImageVector get() = MaterialIcons.Outlined.Folder val Inbox: ImageVector get() = MaterialIcons.Outlined.Inbox Loading @@ -62,6 +89,12 @@ object Icons { val Security: ImageVector get() = MaterialIcons.Outlined.Security val Send: ImageVector get() = MaterialIcons.AutoMirrored.Outlined.Send val Report: ImageVector get() = MaterialIcons.Outlined.Report val Visibility: ImageVector get() = MaterialIcons.Outlined.Visibility Loading
core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/filled/Dot.kt 0 → 100644 +27 −0 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.atom.icon.filled import androidx.compose.material.icons.Icons import androidx.compose.material.icons.materialIcon import androidx.compose.material.icons.materialPath import androidx.compose.ui.graphics.vector.ImageVector @Suppress("MagicNumber") val Icons.Filled.Dot: ImageVector get() { if (instance != null) { return instance!! } instance = materialIcon(name = "Filled.Dot") { materialPath { moveTo(12.0f, 6.0f) curveToRelative(-3.31f, 0.0f, -6.0f, 2.69f, -6.0f, 6.0f) reflectiveCurveToRelative(2.69f, 6.0f, 6.0f, 6.0f) reflectiveCurveToRelative(6.0f, -2.69f, 6.0f, -6.0f) reflectiveCurveToRelative(-2.69f, -6.0f, -6.0f, -6.0f) close() } } return instance!! } private var instance: ImageVector? = null
core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt +29 −3 Original line number Diff line number Diff line package app.k9mail.core.ui.compose.designsystem.organism.drawer import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge import app.k9mail.core.ui.compose.theme2.MainTheme /** * A badge for a navigation drawer item with an optional icon. * * @param label The label to display. * @param modifier The modifier to apply. * @param imageVector The image vector to display (optional). */ @Composable fun NavigationDrawerItemBadge( label: String, modifier: Modifier = Modifier, imageVector: ImageVector? = null, ) { Row( modifier = modifier, verticalAlignment = Alignment.CenterVertically, ) { if (imageVector != null) { Icon( imageVector = imageVector, modifier = Modifier.size(MainTheme.sizes.iconSmall) .padding(end = MainTheme.spacings.quarter), ) } TextLabelLarge( text = label, modifier = modifier, ) } }