Loading feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt +17 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ internal fun AccountAvatarPreview() { AccountAvatar( account = DISPLAY_ACCOUNT, onClick = {}, selected = false, ) } } Loading @@ -25,6 +26,7 @@ internal fun AccountAvatarWithUnreadCountPreview() { unreadMessageCount = 12, ), onClick = {}, selected = false, ) } } Loading @@ -38,6 +40,21 @@ internal fun AccountAvatarWithUnreadCountMaxedPreview() { unreadMessageCount = 100, ), onClick = {}, selected = false, ) } } @Composable @Preview(showBackground = true) internal fun AccountAvatarSelectedPreview() { PreviewWithThemes { AccountAvatar( account = DISPLAY_ACCOUNT.copy( color = 0xFFFF0000.toInt(), ), onClick = {}, selected = true, ) } } feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountListItemPreview.kt +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,19 @@ internal fun AccountListItemPreview() { AccountListItem( account = DISPLAY_ACCOUNT, onClick = { }, selected = false, ) } } @Composable @Preview(showBackground = true) internal fun AccountListItemSelectedPreview() { PreviewWithThemes { AccountListItem( account = DISPLAY_ACCOUNT, onClick = { }, selected = true, ) } } feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt +34 −15 Original line number Diff line number Diff line package app.k9mail.feature.navigation.drawer.ui.account import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box Loading @@ -7,6 +8,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip Loading @@ -21,27 +23,42 @@ import app.k9mail.core.ui.compose.theme2.toColorRoles import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.feature.navigation.drawer.ui.common.labelForCount val selectedAvatarSize = 40.dp @Composable internal fun AccountAvatar( account: DisplayAccount, onClick: (DisplayAccount) -> Unit, selected: Boolean, modifier: Modifier = Modifier, onClick: ((DisplayAccount) -> Unit)? = null, ) { val context = LocalContext.current val accountColor = calculateAccountColor(account.color) val accountColorRoles = accountColor.toColorRoles(context) val avatarSize by animateDpAsState( targetValue = if (selected) selectedAvatarSize else MainTheme.sizes.iconAvatar, label = "Avatar size", ) Box( modifier = modifier, contentAlignment = Alignment.BottomEnd, ) { val clickableModifier = if (onClick != null && !selected) Modifier.clickable { onClick(account) } else Modifier Box( modifier = Modifier .size(MainTheme.sizes.iconAvatar), contentAlignment = Alignment.Center, ) { Surface( modifier = Modifier .size(MainTheme.sizes.iconAvatar) .border(2.dp, accountColor, CircleShape) .size(avatarSize) .clip(CircleShape) .border(2.dp, accountColor, CircleShape) .padding(2.dp) .clickable(onClick = { onClick(account) }), .then(clickableModifier), color = accountColor.copy(alpha = 0.3f), ) { Box( Loading @@ -55,6 +72,8 @@ internal fun AccountAvatar( // TODO: Add image loading } } } UnreadBadge( unreadCount = account.unreadMessageCount, accountColorRoles = accountColorRoles, Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt +1 −3 Original line number Diff line number Diff line Loading @@ -47,12 +47,10 @@ internal fun AccountList( items = accounts, key = { account -> account.id }, ) { account -> if (selectedAccount != null && account == selectedAccount) { return@items } AccountListItem( account = account, onClick = { onAccountClick(account) }, selected = selectedAccount == account, ) } } Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountListItem.kt +2 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount internal fun AccountListItem( account: DisplayAccount, onClick: (DisplayAccount) -> Unit, selected: Boolean, modifier: Modifier = Modifier, ) { Box( Loading @@ -23,6 +24,7 @@ internal fun AccountListItem( AccountAvatar( account = account, onClick = onClick, selected = selected, ) } } Loading
feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt +17 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ internal fun AccountAvatarPreview() { AccountAvatar( account = DISPLAY_ACCOUNT, onClick = {}, selected = false, ) } } Loading @@ -25,6 +26,7 @@ internal fun AccountAvatarWithUnreadCountPreview() { unreadMessageCount = 12, ), onClick = {}, selected = false, ) } } Loading @@ -38,6 +40,21 @@ internal fun AccountAvatarWithUnreadCountMaxedPreview() { unreadMessageCount = 100, ), onClick = {}, selected = false, ) } } @Composable @Preview(showBackground = true) internal fun AccountAvatarSelectedPreview() { PreviewWithThemes { AccountAvatar( account = DISPLAY_ACCOUNT.copy( color = 0xFFFF0000.toInt(), ), onClick = {}, selected = true, ) } }
feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountListItemPreview.kt +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,19 @@ internal fun AccountListItemPreview() { AccountListItem( account = DISPLAY_ACCOUNT, onClick = { }, selected = false, ) } } @Composable @Preview(showBackground = true) internal fun AccountListItemSelectedPreview() { PreviewWithThemes { AccountListItem( account = DISPLAY_ACCOUNT, onClick = { }, selected = true, ) } }
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt +34 −15 Original line number Diff line number Diff line package app.k9mail.feature.navigation.drawer.ui.account import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box Loading @@ -7,6 +8,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip Loading @@ -21,27 +23,42 @@ import app.k9mail.core.ui.compose.theme2.toColorRoles import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.feature.navigation.drawer.ui.common.labelForCount val selectedAvatarSize = 40.dp @Composable internal fun AccountAvatar( account: DisplayAccount, onClick: (DisplayAccount) -> Unit, selected: Boolean, modifier: Modifier = Modifier, onClick: ((DisplayAccount) -> Unit)? = null, ) { val context = LocalContext.current val accountColor = calculateAccountColor(account.color) val accountColorRoles = accountColor.toColorRoles(context) val avatarSize by animateDpAsState( targetValue = if (selected) selectedAvatarSize else MainTheme.sizes.iconAvatar, label = "Avatar size", ) Box( modifier = modifier, contentAlignment = Alignment.BottomEnd, ) { val clickableModifier = if (onClick != null && !selected) Modifier.clickable { onClick(account) } else Modifier Box( modifier = Modifier .size(MainTheme.sizes.iconAvatar), contentAlignment = Alignment.Center, ) { Surface( modifier = Modifier .size(MainTheme.sizes.iconAvatar) .border(2.dp, accountColor, CircleShape) .size(avatarSize) .clip(CircleShape) .border(2.dp, accountColor, CircleShape) .padding(2.dp) .clickable(onClick = { onClick(account) }), .then(clickableModifier), color = accountColor.copy(alpha = 0.3f), ) { Box( Loading @@ -55,6 +72,8 @@ internal fun AccountAvatar( // TODO: Add image loading } } } UnreadBadge( unreadCount = account.unreadMessageCount, accountColorRoles = accountColorRoles, Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountList.kt +1 −3 Original line number Diff line number Diff line Loading @@ -47,12 +47,10 @@ internal fun AccountList( items = accounts, key = { account -> account.id }, ) { account -> if (selectedAccount != null && account == selectedAccount) { return@items } AccountListItem( account = account, onClick = { onAccountClick(account) }, selected = selectedAccount == account, ) } } Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountListItem.kt +2 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount internal fun AccountListItem( account: DisplayAccount, onClick: (DisplayAccount) -> Unit, selected: Boolean, modifier: Modifier = Modifier, ) { Box( Loading @@ -23,6 +24,7 @@ internal fun AccountListItem( AccountAvatar( account = account, onClick = onClick, selected = selected, ) } }