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

Unverified Commit 84c61220 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by GitHub
Browse files

Merge pull request #8551 from wmontwe/fix-drawer-jumping-account-icons

Fix drawer jumping account icons
parents 58c566ac bedfb7b4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ internal fun AccountAvatarPreview() {
        AccountAvatar(
            account = DISPLAY_ACCOUNT,
            onClick = {},
            selected = false,
        )
    }
}
@@ -25,6 +26,7 @@ internal fun AccountAvatarWithUnreadCountPreview() {
                unreadMessageCount = 12,
            ),
            onClick = {},
            selected = false,
        )
    }
}
@@ -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,
        )
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -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,
        )
    }
}
+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
@@ -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
@@ -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(
@@ -55,6 +72,8 @@ internal fun AccountAvatar(
                    // TODO: Add image loading
                }
            }
        }

        UnreadBadge(
            unreadCount = account.unreadMessageCount,
            accountColorRoles = accountColorRoles,
+1 −3
Original line number Diff line number Diff line
@@ -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,
                    )
                }
            }
+2 −0
Original line number Diff line number Diff line
@@ -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(
@@ -23,6 +24,7 @@ internal fun AccountListItem(
        AccountAvatar(
            account = account,
            onClick = onClick,
            selected = selected,
        )
    }
}
Loading