style CallButton to match SendButton — accent gradient, press animation

Same 38dp circle as SendButton. Subtle accent gradient fill (16-28%
alpha), AudioLines icon in accent.primary color, press-scale animation.
Visually pairs with the send button as its idle counterpart.
This commit is contained in:
Bruno Deanoz 2026-06-22 19:21:16 +02:00
parent fd0de5ccef
commit bf9441422b

View file

@ -593,12 +593,7 @@ fun ChatInput(
if (hasContent) { if (hasContent) {
SendButton(enabled = canSend, onClick = onSend) SendButton(enabled = canSend, onClick = onSend)
} else { } else {
Box( CallButton(onClick = { /* TODO: call feature */ })
Modifier.size(38.dp).clip(KaizenShapes.circle).background(iconBg),
contentAlignment = Alignment.Center,
) {
Icon(KaizenIcons.AudioLines, stringResource(R.string.chat_call), tint = cs.onSurfaceVariant, modifier = Modifier.size(19.dp))
}
} }
} }
} }
@ -678,6 +673,35 @@ private fun SendButton(enabled: Boolean, onClick: () -> Unit) {
} }
} }
@Composable
private fun CallButton(onClick: () -> Unit) {
val cs = MaterialTheme.colorScheme
val isDark = isSystemInDarkTheme()
val interaction = remember { MutableInteractionSource() }
val pressed by interaction.collectIsPressedAsState()
val pressScale by animateFloatAsState(if (pressed) 0.88f else 1f, label = "call")
val accent = LocalKaizenAccent.current
Box(
Modifier
.size(38.dp)
.scale(pressScale)
.clip(KaizenShapes.circle)
.background(
Brush.verticalGradient(
listOf(
accent.primary.copy(alpha = if (isDark) 0.22f else 0.16f),
accent.primaryDeep.copy(alpha = if (isDark) 0.28f else 0.22f),
)
)
)
.clickable(interactionSource = interaction, indication = null, onClick = onClick),
contentAlignment = Alignment.Center,
) {
Icon(KaizenIcons.AudioLines, null, tint = accent.primary, modifier = Modifier.size(19.dp))
}
}
// ── Attachment rendering ──────────────────────────────────────────────────── // ── Attachment rendering ────────────────────────────────────────────────────
private object NetworkImageCache { private object NetworkImageCache {