@@ -24,18 +24,17 @@ import androidx.compose.ui.text.style.TextAlign
2424import androidx.compose.ui.tooling.preview.PreviewParameter
2525import androidx.compose.ui.unit.dp
2626import io.element.android.compound.theme.ElementTheme
27+ import io.element.android.compound.tokens.generated.CompoundIcons
2728import io.element.android.libraries.designsystem.components.avatar.Avatar
2829import io.element.android.libraries.designsystem.components.avatar.AvatarData
29- import io.element.android.libraries.designsystem.components.avatar.AvatarSize
3030import io.element.android.libraries.designsystem.components.avatar.AvatarType
31- import io.element.android.libraries.designsystem.components.avatar.anAvatarData
3231import io.element.android.libraries.designsystem.preview.ElementPreview
3332import io.element.android.libraries.designsystem.preview.PreviewsDayNight
3433import io.element.android.libraries.designsystem.text.toAnnotatedString
3534import io.element.android.libraries.designsystem.theme.components.Button
3635import io.element.android.libraries.designsystem.theme.components.ButtonSize
36+ import io.element.android.libraries.designsystem.theme.components.Icon
3737import io.element.android.libraries.designsystem.theme.components.Text
38- import io.element.android.libraries.designsystem.utils.BooleanProvider
3938import io.element.android.libraries.ui.strings.CommonStrings
4039
4140@Composable
@@ -44,20 +43,37 @@ fun ComposerAlertMolecule(
4443 content : AnnotatedString ,
4544 onSubmitClick : () -> Unit ,
4645 modifier : Modifier = Modifier ,
47- isCritical : Boolean = false,
46+ level : ComposerAlertLevel = ComposerAlertLevel .Default ,
47+ showIcon : Boolean = false,
4848 submitText : String = stringResource(CommonStrings .action_ok),
4949) {
5050 Column (
5151 modifier.fillMaxWidth()
5252 ) {
53- val lineColor = if (isCritical) ElementTheme .colors.borderCriticalSubtle else ElementTheme .colors.borderInfoSubtle
53+ val lineColor = when (level) {
54+ ComposerAlertLevel .Default -> ElementTheme .colors.borderInfoSubtle
55+ ComposerAlertLevel .Info -> ElementTheme .colors.borderInfoSubtle
56+ ComposerAlertLevel .Critical -> ElementTheme .colors.borderCriticalSubtle
57+ }
58+
59+ val startColor = when (level) {
60+ ComposerAlertLevel .Default -> ElementTheme .colors.bgInfoSubtle
61+ ComposerAlertLevel .Info -> ElementTheme .colors.bgInfoSubtle
62+ ComposerAlertLevel .Critical -> ElementTheme .colors.bgCriticalSubtle
63+ }
64+
65+ val textColor = when (level) {
66+ ComposerAlertLevel .Default -> ElementTheme .colors.textPrimary
67+ ComposerAlertLevel .Info -> ElementTheme .colors.textInfoPrimary
68+ ComposerAlertLevel .Critical -> ElementTheme .colors.textCriticalPrimary
69+ }
70+
5471 Box (
5572 modifier = Modifier
5673 .fillMaxWidth()
5774 .height(1 .dp)
5875 .background(lineColor)
5976 )
60- val startColor = if (isCritical) ElementTheme .colors.bgCriticalSubtle else ElementTheme .colors.bgInfoSubtle
6177 val brush = Brush .verticalGradient(
6278 listOf (startColor, ElementTheme .colors.bgCanvasDefault),
6379 )
@@ -77,16 +93,28 @@ fun ComposerAlertMolecule(
7793 avatarData = avatar,
7894 avatarType = AvatarType .User ,
7995 )
96+ } else if (showIcon) {
97+ val icon = when (level) {
98+ ComposerAlertLevel .Default -> CompoundIcons .Info ()
99+ ComposerAlertLevel .Info -> CompoundIcons .Info ()
100+ ComposerAlertLevel .Critical -> CompoundIcons .Error ()
101+ }
102+ val iconTint = when (level) {
103+ ComposerAlertLevel .Default -> ElementTheme .colors.iconPrimary
104+ ComposerAlertLevel .Info -> ElementTheme .colors.iconInfoPrimary
105+ ComposerAlertLevel .Critical -> ElementTheme .colors.iconCriticalPrimary
106+ }
107+ Icon (
108+ imageVector = icon,
109+ tint = iconTint,
110+ contentDescription = null ,
111+ )
80112 }
81113 Text (
82114 text = content,
83115 modifier = Modifier .weight(1f ),
84116 style = ElementTheme .typography.fontBodyMdRegular,
85- color = if (isCritical) {
86- ElementTheme .colors.textCriticalPrimary
87- } else {
88- ElementTheme .colors.textPrimary
89- },
117+ color = textColor,
90118 textAlign = TextAlign .Start ,
91119 )
92120 }
@@ -101,13 +129,22 @@ fun ComposerAlertMolecule(
101129 }
102130}
103131
132+ enum class ComposerAlertLevel {
133+ Default ,
134+ Info ,
135+ Critical
136+ }
137+
104138@PreviewsDayNight
105139@Composable
106- internal fun ComposerAlertMoleculePreview (@PreviewParameter(BooleanProvider ::class ) isCritical : Boolean ) = ElementPreview {
140+ internal fun ComposerAlertMoleculePreview (
141+ @PreviewParameter(ComposerAlertMoleculeParamsProvider ::class ) params : ComposerAlertMoleculeParams ,
142+ ) = ElementPreview {
107143 ComposerAlertMolecule (
108- avatar = anAvatarData(size = AvatarSize . ComposerAlert ) ,
144+ avatar = params.avatar ,
109145 content = " Alice’s verified identity has changed. Learn more" .toAnnotatedString(),
110- isCritical = isCritical,
146+ level = params.level,
147+ showIcon = params.showIcon,
111148 onSubmitClick = {},
112149 )
113150}
0 commit comments