Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit a2221f55 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Add AccountAvatar

parent a5d7ee87
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ data class ThemeSizes(
    val iconSmall: Dp,
    val icon: Dp,
    val iconLarge: Dp,
    val iconAvatar: Dp,

    val topBarHeight: Dp,
    val bottomBarHeight: Dp,
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ val defaultThemeSizes = ThemeSizes(
    iconSmall = 16.dp,
    icon = 24.dp,
    iconLarge = 32.dp,
    iconAvatar = 48.dp,

    topBarHeight = 64.dp,
    bottomBarHeight = 80.dp,
+17 −0
Original line number Diff line number Diff line
package app.k9mail.feature.navigation.drawer.ui.account

import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
import app.k9mail.feature.navigation.drawer.ui.FakeData.DISPLAY_ACCOUNT

@Composable
@Preview(showBackground = true)
fun AccountAvatarPreview() {
    PreviewWithThemes {
        AccountAvatar(
            account = DISPLAY_ACCOUNT,
            onClick = {},
        )
    }
}
+61 −0
Original line number Diff line number Diff line
package app.k9mail.feature.navigation.drawer.ui.account

import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
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.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import app.k9mail.core.ui.compose.designsystem.atom.Surface
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium
import app.k9mail.core.ui.compose.theme2.MainTheme
import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount

@Composable
fun AccountAvatar(
    account: DisplayAccount,
    onClick: (DisplayAccount) -> Unit,
    modifier: Modifier = Modifier,
) {
    val accountColor = calculateAccountColor(account.account.chipColor)

    Surface(
        modifier = modifier
            .size(MainTheme.sizes.iconAvatar)
            .border(2.dp, accountColor, CircleShape)
            .padding(2.dp),
        color = accountColor.copy(alpha = 0.3f),
        shape = CircleShape,
    ) {
        Box(
            contentAlignment = Alignment.Center,
            modifier = Modifier
                .border(2.dp, MainTheme.colors.surfaceContainerLowest, CircleShape)
                .clickable(onClick = { onClick(account) }),
        ) {
            Placeholder(
                email = account.account.email,
            )
            // TODO: Add image loading
        }
    }
}

@Composable
private fun Placeholder(
    email: String,
    modifier: Modifier = Modifier,
) {
    TextTitleMedium(
        text = extractDomainInitials(email).uppercase(),
        modifier = modifier,
    )
}

private fun extractDomainInitials(email: String): String {
    return email.split("@")[1].take(2)
}
+1 −9
Original line number Diff line number Diff line
@@ -4,29 +4,21 @@ import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import app.k9mail.core.ui.compose.designsystem.atom.Surface
import app.k9mail.core.ui.compose.theme2.MainTheme
import app.k9mail.core.ui.compose.theme2.toHarmonizedColor

@Composable
fun AccountIndicator(
    accountColor: Int,
    modifier: Modifier = Modifier,
) {
    val color = if (accountColor == 0) {
        MainTheme.colors.primary
    } else {
        Color(accountColor).toHarmonizedColor(MainTheme.colors.surface)
    }

    Surface(
        modifier = modifier
            .width(MainTheme.spacings.half)
            .defaultMinSize(
                minHeight = MainTheme.spacings.default,
            ),
        color = color,
        color = calculateAccountColor(accountColor),
        shape = MainTheme.shapes.medium,
    ) {}
}
Loading