From 2e869518b47b20b6935ffc00d6ef60c29e32ad64 Mon Sep 17 00:00:00 2001 From: Marcello Date: Wed, 1 Apr 2026 21:18:52 +0200 Subject: [PATCH 01/11] Implement base design system components and theme - Create `SiaTheme` with custom color palettes, typography, and spacing tokens. - Add `FilledButton` component supporting multiple states (Enabled, Disabled, Loading, Error, Success) and sizes. - Implement `LoadingIndicator`, `HorizontalSpacer`, and `VerticalSpacer` components. - Define design tokens for `Radius`, `Space`, and `Opacity`. - Configure `SiaTypography` using Roboto and Roboto Slab font families. - Add required font assets for Roboto and Roboto Slab. --- .../project/design_system/component/Button.kt | 132 ++++++++++++++++ .../component/LoadingIndicator.kt | 29 ++++ .../project/design_system/component/Spacer.kt | 18 +++ .../eu/project/design_system/theme/Color.kt | 141 ++++++++++++++++++ .../eu/project/design_system/theme/Opacity.kt | 6 + .../eu/project/design_system/theme/Radius.kt | 11 ++ .../eu/project/design_system/theme/Space.kt | 16 ++ .../eu/project/design_system/theme/Theme.kt | 35 +++++ .../project/design_system/theme/Typography.kt | 127 ++++++++++++++++ ui/src/main/res/font/roboto_medium.ttf | Bin 0 -> 82628 bytes ui/src/main/res/font/roboto_normal.ttf | Bin 0 -> 81044 bytes ui/src/main/res/font/roboto_slab_bold.ttf | Bin 0 -> 102380 bytes ui/src/main/res/font/roboto_slab_semibold.ttf | Bin 0 -> 102532 bytes 13 files changed, 515 insertions(+) create mode 100644 ui/src/main/java/eu/project/design_system/component/Button.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/Spacer.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Color.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Opacity.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Radius.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Space.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Theme.kt create mode 100644 ui/src/main/java/eu/project/design_system/theme/Typography.kt create mode 100644 ui/src/main/res/font/roboto_medium.ttf create mode 100644 ui/src/main/res/font/roboto_normal.ttf create mode 100644 ui/src/main/res/font/roboto_slab_bold.ttf create mode 100644 ui/src/main/res/font/roboto_slab_semibold.ttf diff --git a/ui/src/main/java/eu/project/design_system/component/Button.kt b/ui/src/main/java/eu/project/design_system/component/Button.kt new file mode 100644 index 0000000..6b95543 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/Button.kt @@ -0,0 +1,132 @@ +package eu.project.design_system.component + +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Check +import androidx.compose.material.icons.rounded.Error +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color.Companion.Transparent +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import eu.project.design_system.theme.Opacity +import eu.project.design_system.theme.Radius +import eu.project.design_system.theme.SiaTheme +import eu.project.design_system.theme.SiaTypography + +enum class FilledButtonType { Primary, Secondary } +enum class ButtonSize { Medium, Small } +enum class ButtonState { Enabled, Disabled, Loading, Error, Success } + +@Composable +fun FilledButton( + onClick: () -> Unit, + label: String, + modifier: Modifier = Modifier, + type: FilledButtonType, + size: ButtonSize, + state: ButtonState, + fullWidth: Boolean = false, +) { + TextButton( + onClick = onClick, + modifier = modifier + .height(buttonHeight(size)) + .then(if (fullWidth) Modifier.fillMaxWidth() else Modifier.wrapContentWidth()), + enabled = state == ButtonState.Enabled, + shape = buttonShape(size), + border = BorderStroke( + color = when(type) { + FilledButtonType.Primary -> Transparent + FilledButtonType.Secondary -> SiaTheme.color.border.regular + }, + width = when(type) { + FilledButtonType.Primary -> 0.dp + FilledButtonType.Secondary -> 1.dp + } + ), + + colors = ButtonColors( + containerColor = when(type) { + FilledButtonType.Primary -> SiaTheme.color.button.primary + FilledButtonType.Secondary -> SiaTheme.color.button.secondary + }, + contentColor = when(type) { + FilledButtonType.Primary -> SiaTheme.color.text.onPrimary + FilledButtonType.Secondary -> SiaTheme.color.text.onSecondary + }, + disabledContainerColor = when(type) { + FilledButtonType.Primary -> SiaTheme.color.button.primary.copy(alpha = Opacity.Disabled.value) + FilledButtonType.Secondary -> SiaTheme.color.button.secondary.copy(alpha = Opacity.Disabled.value) + }, + disabledContentColor = when(type) { + FilledButtonType.Primary -> SiaTheme.color.text.onPrimary.copy(alpha = Opacity.Disabled.value) + FilledButtonType.Secondary -> SiaTheme.color.text.onSecondary.copy(alpha = Opacity.Disabled.value) + } + ) + ) { + AnimatedContent(targetState = state) { + when (it) { + ButtonState.Enabled, ButtonState.Disabled -> { + Text( + text = label, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = buttonTextStyle(size) + ) + } + ButtonState.Loading -> { + LoadingIndicator(modifier = Modifier.size(20.dp), type = LoadingIndicatorType.Secondary) + } + ButtonState.Error -> { + Icon( + imageVector = Icons.Rounded.Error, + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + } + ButtonState.Success -> { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + } + } + } + } +} + +private fun buttonShape(buttonSize: ButtonSize): RoundedCornerShape { + return when (buttonSize) { + ButtonSize.Medium -> RoundedCornerShape(Radius.R16.value) + ButtonSize.Small -> RoundedCornerShape(Radius.R12.value) + } +} + +private fun buttonHeight(buttonSize: ButtonSize): Dp { + return when (buttonSize) { + ButtonSize.Medium -> 56.dp + ButtonSize.Small -> 40.dp + } +} + +@Composable +private fun buttonTextStyle(buttonSize: ButtonSize): TextStyle { + return when (buttonSize) { + ButtonSize.Medium -> SiaTypography.titleMedium + ButtonSize.Small -> SiaTypography.labelLarge + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt b/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt new file mode 100644 index 0000000..704ceec --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt @@ -0,0 +1,29 @@ +package eu.project.design_system.component + +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.StrokeCap +import eu.project.design_system.theme.Opacity +import eu.project.design_system.theme.SiaTheme + +enum class LoadingIndicatorType { Primary, Secondary } + +@Composable +fun LoadingIndicator( + modifier: Modifier = Modifier, + type: LoadingIndicatorType = LoadingIndicatorType.Primary +) { + CircularProgressIndicator( + modifier = modifier, + color = when(type) { + LoadingIndicatorType.Primary -> SiaTheme.color.icon.primary + LoadingIndicatorType.Secondary -> SiaTheme.color.icon.onPrimary.copy(alpha = Opacity.Disabled.value) + }, + trackColor = when(type) { + LoadingIndicatorType.Primary -> SiaTheme.color.icon.secondary + LoadingIndicatorType.Secondary -> SiaTheme.color.icon.onSecondary.copy(alpha = Opacity.Disabled.value) + }, + strokeCap = StrokeCap.Round + ) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/Spacer.kt b/ui/src/main/java/eu/project/design_system/component/Spacer.kt new file mode 100644 index 0000000..157a52c --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/Spacer.kt @@ -0,0 +1,18 @@ +package eu.project.design_system.component + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import eu.project.design_system.theme.Space + +@Composable +fun HorizontalSpacer(space: Space) { + Spacer(modifier = Modifier.width(space.value)) +} + +@Composable +fun VerticalSpacer(space: Space) { + Spacer(modifier = Modifier.height(space.value)) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Color.kt b/ui/src/main/java/eu/project/design_system/theme/Color.kt new file mode 100644 index 0000000..40e178f --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Color.kt @@ -0,0 +1,141 @@ +package eu.project.design_system.theme + +import androidx.compose.ui.graphics.Color + +internal object PrimitiveColorsDarkTheme { + val neutral950 = Color(0xFF161616) + val neutral900 = Color(0xFF1E1E1E) + val neutral800 = Color(0xFF2A2A2A) + val neutral300 = Color(0xFFB3B3B3) + val neutral50 = Color(0xFFDBDBDB) + val red500 = Color(0xFFE5484D) + val yellow500 = Color(0xFFE5A448) +} + +data class AppColors( + val surface: SurfaceColors, + val text: TextColors, + val border: BorderColors, + val icon: IconColors, + val button: ButtonColors, + val outlinedTextField: OutlinedTextFieldColors +) + +data class SurfaceColors( + val background: Color, + val card: Color +) + +data class TextColors( + val primary: Color, + val secondary: Color, + val onPrimary: Color, + val onSecondary: Color, + val destructive: Color, + val highlighted: Color, +) + +data class BorderColors( + val regular: Color, + val destructive: Color +) + +data class IconColors( + val primary: Color, + val secondary: Color, + val onPrimary: Color, + val onSecondary: Color, + val destructive: Color +) + +data class ButtonColors( + val primary: Color, + val secondary: Color, +) + +data class OutlinedTextFieldColors( + val text: TextFieldTextColors,val container: TextFieldContainerColors, + val border: TextFieldBorderColors, + val cursor: Color, + val errorCursor: Color +) { + data class TextFieldTextColors( + val focused: Color, + val unfocused: Color, + val disabled: Color, + val error: Color, + val label: Color, + val placeholder: Color + ) + + data class TextFieldContainerColors( + val focused: Color, + val unfocused: Color, + val disabled: Color, + val error: Color + ) + + data class TextFieldBorderColors( + val focused: Color, + val unfocused: Color, + val disabled: Color, + val error: Color + ) +} + +fun siaDarkColors(): AppColors { + val colors = PrimitiveColorsDarkTheme + return AppColors( + surface = SurfaceColors( + background = colors.neutral900, + card = colors.neutral950 + ), + text = TextColors( + primary = colors.neutral50, + secondary = colors.neutral300, + onPrimary = colors.neutral800, + onSecondary = colors.neutral300, + destructive = colors.red500, + highlighted = colors.yellow500 + ), + border = BorderColors( + regular = colors.neutral800, + destructive = colors.red500 + ), + icon = IconColors( + primary = colors.neutral50, + secondary = colors.neutral300, + onPrimary = colors.neutral800, + onSecondary = colors.neutral300, + destructive = colors.red500 + ), + button = ButtonColors( + primary = colors.neutral50, + secondary = colors.neutral950 + ), + outlinedTextField = OutlinedTextFieldColors( + text = OutlinedTextFieldColors.TextFieldTextColors( + focused = colors.neutral50, + unfocused = colors.neutral300.copy(alpha = Opacity.Unfocused.value), + disabled = colors.neutral50.copy(alpha = Opacity.Disabled.value), + error = colors.red500, + label = colors.neutral300, + placeholder = colors.neutral300 + ), + container = OutlinedTextFieldColors.TextFieldContainerColors( + focused = colors.neutral950, + unfocused = colors.neutral950.copy(alpha = Opacity.Unfocused.value), + disabled = colors.neutral950.copy(alpha = Opacity.Disabled.value), + error = colors.red500.copy(alpha = Opacity.Disabled.value) + ), + border = OutlinedTextFieldColors.TextFieldBorderColors( + focused = colors.neutral50, + unfocused = colors.neutral50.copy(alpha = Opacity.Unfocused.value), + disabled = colors.neutral50.copy(alpha = Opacity.Disabled.value), + error = colors.red500.copy(alpha = Opacity.Disabled.value) + ), + cursor = colors.neutral50, + errorCursor = colors.red500 + ) + ) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Opacity.kt b/ui/src/main/java/eu/project/design_system/theme/Opacity.kt new file mode 100644 index 0000000..e82f708 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Opacity.kt @@ -0,0 +1,6 @@ +package eu.project.design_system.theme + +enum class Opacity(val value: Float) { + Unfocused(value = 0.7f), + Disabled(value = 0.8f) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Radius.kt b/ui/src/main/java/eu/project/design_system/theme/Radius.kt new file mode 100644 index 0000000..e3ae897 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Radius.kt @@ -0,0 +1,11 @@ +package eu.project.design_system.theme + +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +enum class Radius(val value: Dp) { + R4(4.dp), + R12(12.dp), + R16(16.dp), + R24(24.dp) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Space.kt b/ui/src/main/java/eu/project/design_system/theme/Space.kt new file mode 100644 index 0000000..017d10a --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Space.kt @@ -0,0 +1,16 @@ +package eu.project.design_system.theme + +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +enum class Space(val value: Dp) { + S4(4.dp), + S8(8.dp), + S12(12.dp), + S16(16.dp), + S24(24.dp), + S32(32.dp), + S40(40.dp), + S48(48.dp), + S64(64.dp) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Theme.kt b/ui/src/main/java/eu/project/design_system/theme/Theme.kt new file mode 100644 index 0000000..14e4f39 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Theme.kt @@ -0,0 +1,35 @@ +package eu.project.design_system.theme + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.staticCompositionLocalOf + +val LocalAppColors = staticCompositionLocalOf { siaDarkColors() } +val LocalAppTypography = staticCompositionLocalOf { SiaTypography } + +object SiaTheme { + + val color: AppColors + @Composable + @ReadOnlyComposable + get() = LocalAppColors.current + + val typography + @Composable + @ReadOnlyComposable + get() = LocalAppTypography.current +} + +@Composable +fun SiaTheme( + colors: AppColors = siaDarkColors(), + content: @Composable () -> Unit +) { + CompositionLocalProvider( + LocalAppColors provides colors, + LocalAppTypography provides SiaTypography + ) { + content() + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/theme/Typography.kt b/ui/src/main/java/eu/project/design_system/theme/Typography.kt new file mode 100644 index 0000000..2aaf08c --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/theme/Typography.kt @@ -0,0 +1,127 @@ +package eu.project.design_system.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp +import eu.project.ui.R + +private val RobotoFontFamily = FontFamily( + Font(R.font.roboto_medium, FontWeight.Medium), + Font(R.font.roboto_normal, FontWeight.Normal) +) + +private val RobotoSlabFontFamily = FontFamily( + Font(R.font.roboto_slab_bold, FontWeight.Bold), + Font(R.font.roboto_slab_semibold, FontWeight.SemiBold) +) + +val SiaTypography = Typography( + displayLarge = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.Bold, + fontSize = 57.sp, + lineHeight = 64.sp, + letterSpacing = (-0.25).sp + ), + displayMedium = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.Bold, + fontSize = 45.sp, + lineHeight = 52.sp, + letterSpacing = 0.sp + ), + displaySmall = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.Bold, + fontSize = 36.sp, + lineHeight = 44.sp, + letterSpacing = 0.sp + ), + headlineLarge = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 32.sp, + lineHeight = 40.sp, + letterSpacing = 0.sp + ), + headlineMedium = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 28.sp, + lineHeight = 36.sp, + letterSpacing = 0.sp + ), + headlineSmall = TextStyle( + fontFamily = RobotoSlabFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 24.sp, + lineHeight = 32.sp, + letterSpacing = 0.sp + ), + titleLarge = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + titleMedium = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.15.sp + ), + titleSmall = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.1.sp + ), + bodyLarge = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ), + bodyMedium = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.25.sp + ), + bodySmall = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.4.sp + ), + labelLarge = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.1.sp + ), + labelMedium = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ), + labelSmall = TextStyle( + fontFamily = RobotoFontFamily, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ), +) \ No newline at end of file diff --git a/ui/src/main/res/font/roboto_medium.ttf b/ui/src/main/res/font/roboto_medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3e87dbd486fe328a11370eb2618a1d50dd8312d7 GIT binary patch literal 82628 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 literal 0 HcmV?d00001 diff --git a/ui/src/main/res/font/roboto_slab_bold.ttf b/ui/src/main/res/font/roboto_slab_bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..87b8e2dbdef0d90c6a4911f54d230ee53f0a0994 GIT binary patch literal 102380 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

$%%n7bzRpt*GOpVl!{zVyR!iF*v z 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 UQ;UkGa^56MUs&7Iu(oynA4_Ji{r~^~ literal 0 HcmV?d00001 From 74ced37eff59f84cf4a5b0109758604aa00166ce Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 16:55:15 +0200 Subject: [PATCH 02/11] Refactor and enhance `FilledButton` component with improved testing and accessibility - Relocate `FilledButton.kt` to `eu.project.design_system.component.button` and extract helper functions to `ButtonUtils.kt`. - Transition from `TextButton` to `Button` and update styling logic for borders and content padding. - Add `testTag` as a required parameter for `FilledButton` and `LoadingIndicator` to improve testability. - Integrate `ContentDescription` and `TestTag` registries to centralize accessibility and testing identifiers. - Implement `FilledButtonTest` to verify button behavior across different states (Enabled, Loading, Error, Success). - Add `ui-test-junit4` and `ui-test-manifest` dependencies to `ui/build.gradle.kts`. --- ui/build.gradle.kts | 4 + .../component/button/FilledButtonTest.kt | 231 ++++++++++++++++++ .../design_system/ContentDescription.kt | 42 ++++ .../java/eu/project/design_system/TestTag.kt | 50 ++++ .../component/LoadingIndicator.kt | 7 +- .../component/button/ButtonUtils.kt | 33 +++ .../{Button.kt => button/FilledButton.kt} | 122 ++++----- 7 files changed, 427 insertions(+), 62 deletions(-) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/button/FilledButtonTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/ContentDescription.kt create mode 100644 ui/src/main/java/eu/project/design_system/TestTag.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt rename ui/src/main/java/eu/project/design_system/component/{Button.kt => button/FilledButton.kt} (55%) diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index 58ea617..0352f52 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -55,4 +55,8 @@ dependencies { androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.ui.test.junit4) + +// Compose UI test + androidTestImplementation(libs.ui.test.junit4) + debugImplementation(libs.ui.test.manifest) } \ No newline at end of file diff --git a/ui/src/androidTest/java/eu/project/design_system/component/button/FilledButtonTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/button/FilledButtonTest.kt new file mode 100644 index 0000000..01be2ea --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/button/FilledButtonTest.kt @@ -0,0 +1,231 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertWidthIsEqualTo +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.unit.dp +import eu.project.design_system.ContentDescription +import eu.project.design_system.TestTag +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class FilledButtonTest { + + @get:Rule + val composeTestRule = createComposeRule() + + + +//- State renders correct content ------------------------------------------------------------------ + + @Test + fun whenStateIsEnabled_labelIsDisplayed() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithText("Confirm") + .assertIsDisplayed() + } + + @Test + fun whenStateIsDisabled_labelIsDisplayed() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Disabled, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithText("Confirm") + .assertIsDisplayed() + } + + @Test + fun whenStateIsLoading_loadingIndicatorIsDisplayed() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Loading, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.loadingIndicator("test_button")) + .assertIsDisplayed() + } + + @Test + fun whenStateIsError_errorIconIsDisplayed() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Error, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.ERROR) + .assertIsDisplayed() + } + + @Test + fun whenStateIsSuccess_successIconIsDisplayed() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Success, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.SUCCESS) + .assertIsDisplayed() + } + + + +//- Enabled policy --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_buttonIsEnabled() { + composeTestRule.setContent { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithTag("test_button") + .assertIsEnabled() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_onClickIsInvoked() { + var clicked = false + + composeTestRule.setContent { + FilledButton( + onClick = { clicked = true }, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_button" + ) + } + + composeTestRule + .onNodeWithTag("test_button") + .performClick() + + assertTrue(clicked) + } + + @Test + fun whenStateIsNotEnabled_onClickIsNotInvoked() { + val nonEnabledStates = listOf( + ButtonState.Disabled, + ButtonState.Loading, + ButtonState.Error, + ButtonState.Success + ) + + var currentState by mutableStateOf(nonEnabledStates.first()) + var clicked = false + + composeTestRule.setContent { + FilledButton( + onClick = { clicked = true }, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = currentState, + testTag = "test_button" + ) + } + + nonEnabledStates.forEach { state -> + clicked = false + currentState = state + + composeTestRule + .onNodeWithTag("test_button") + .performClick() + + assertFalse("onClick should not fire in state $state", clicked) + } + } + + + +//- Width behavior --------------------------------------------------------------------------------- + + @Test + fun whenFullWidthIsTrue_buttonFillsMaxWidth() { + composeTestRule.setContent { + Box(modifier = Modifier.width(300.dp)) { + FilledButton( + onClick = {}, + label = "Confirm", + type = FilledButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_button", + fullWidth = true + ) + } + } + + composeTestRule + .onNodeWithTag("test_button") + .assertWidthIsEqualTo(300.dp) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/ContentDescription.kt b/ui/src/main/java/eu/project/design_system/ContentDescription.kt new file mode 100644 index 0000000..94463e1 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/ContentDescription.kt @@ -0,0 +1,42 @@ +package eu.project.design_system + +/** + * Central registry of accessibility content descriptions for use with + * [androidx.compose.ui.Modifier.semantics] `contentDescription` and + * [androidx.compose.ui.Modifier.clearAndSetSemantics]. + * + * ## Purpose + * Content descriptions are read aloud by TalkBack and other accessibility + * services. Centralising them ensures consistency across the UI and makes + * accessibility audits and updates straightforward. + * + * ## Naming conventions + * - Mirrors the structure of [TestTag] exactly — same object hierarchy, + * same element names — so the two files stay in sync. + * - String values are **human-readable sentences** (capitalised, no trailing + * period) that TalkBack can read naturally, e.g. `"Navigate back"`. + * - Do **not** include the screen name in the string value; the OS provides + * enough context. Keep descriptions short (≤ 5 words where possible). + * + * ## Usage + * ```kotlin + * Icon( + * painter = painterResource(R.drawable.ic_back), + * contentDescription = ContentDescription.HomeScreen.BACK_BUTTON + * ) + * ``` + * + * ## When to provide a description + * - **Always** for actionable elements (buttons, icons, FABs). + * - **Always** for images that convey meaning. + * - Set to `null` for purely decorative elements so TalkBack skips them. + * + * @see TestTag for UI test tag constants. + */ +object ContentDescription { + + object Icon { + const val ERROR = "Icon Error" + const val SUCCESS = "Icon Success" + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/TestTag.kt b/ui/src/main/java/eu/project/design_system/TestTag.kt new file mode 100644 index 0000000..89f4afa --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/TestTag.kt @@ -0,0 +1,50 @@ +package eu.project.design_system + +/** + * Central registry of UI test tags for use with [androidx.compose.ui.Modifier.testTag]. + * + * ## Purpose + * Provides a single source of truth for all test tag strings used in UI tests + * (Espresso, Compose UI Test). Centralising them prevents typos, silent collisions, + * and makes refactoring safe — change the constant once, tests follow automatically. + * + * ## Naming conventions + * - Object names use **PascalCase** and reflect the screen or component name + * (e.g. [HomeScreen], [ProductCard]). + * - Constant names use **SCREAMING_SNAKE_CASE** (e.g. `SUBMIT_BUTTON`). + * - String values use **snake_case** and are prefixed with their full path to + * guarantee global uniqueness (e.g. `"home_screen_submit_button"`). + * + * ## Structure rules + * - **Screens** → nest a dedicated object per screen directly inside [TestTag]. + * - **Shared / reusable components** → nest inside a dedicated object and expose + * a function that accepts a unique identifier (e.g. item ID) to avoid collisions + * when the component appears multiple times in the hierarchy. + * - **Do not** define raw string literals outside this file. Always reference a + * constant from here. + * + * ## Usage + * ```kotlin + * // In a composable: + * Modifier.testTag(TestTag.HomeScreen.SUBMIT_BUTTON) + * + * // In a UI test: + * composeTestRule + * .onNodeWithTag(TestTag.HomeScreen.SUBMIT_BUTTON) + * .performClick() + * ``` + * + * ## Adding new tags + * 1. Locate or create the matching nested object for the screen/component. + * 2. Add a `const val` whose string value follows `_` pattern. + * 3. For list/grid items use a function: `fun root(id: String) = "my_card_root_$id"`. + * + * @see ContentDescription for accessibility label constants. + */ +object TestTag { + + object Component { + fun loadingIndicator(parentTag: String) = "${parentTag}_loading_indicator" + fun animatedContent(parentTag: String) = "${parentTag}_animated_content" + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt b/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt index 704ceec..3d16b49 100644 --- a/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt +++ b/ui/src/main/java/eu/project/design_system/component/LoadingIndicator.kt @@ -4,6 +4,7 @@ import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.platform.testTag import eu.project.design_system.theme.Opacity import eu.project.design_system.theme.SiaTheme @@ -12,10 +13,12 @@ enum class LoadingIndicatorType { Primary, Secondary } @Composable fun LoadingIndicator( modifier: Modifier = Modifier, - type: LoadingIndicatorType = LoadingIndicatorType.Primary + type: LoadingIndicatorType = LoadingIndicatorType.Primary, + testTag: String ) { CircularProgressIndicator( - modifier = modifier, + modifier = modifier + .testTag(testTag), color = when(type) { LoadingIndicatorType.Primary -> SiaTheme.color.icon.primary LoadingIndicatorType.Secondary -> SiaTheme.color.icon.onPrimary.copy(alpha = Opacity.Disabled.value) diff --git a/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt b/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt new file mode 100644 index 0000000..9274902 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt @@ -0,0 +1,33 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import eu.project.design_system.theme.Radius +import eu.project.design_system.theme.SiaTypography +import eu.project.design_system.theme.Space + +enum class ButtonSize { Medium, Small } +enum class ButtonState { Enabled, Disabled, Loading, Error, Success } + +internal fun buttonShape(size: ButtonSize): RoundedCornerShape = when (size) { + ButtonSize.Medium -> RoundedCornerShape(Radius.R16.value) + ButtonSize.Small -> RoundedCornerShape(Radius.R12.value) +} + +internal fun buttonHeight(size: ButtonSize): Dp = when (size) { + ButtonSize.Medium -> 56.dp + ButtonSize.Small -> 40.dp +} + +internal fun buttonTextStyle(size: ButtonSize): TextStyle = when (size) { + ButtonSize.Medium -> SiaTypography.titleMedium + ButtonSize.Small -> SiaTypography.labelLarge +} + +internal fun buttonContentPadding(size: ButtonSize): PaddingValues = when (size) { + ButtonSize.Medium -> PaddingValues(horizontal = Space.S24.value, vertical = Space.S16.value) + ButtonSize.Small -> PaddingValues(horizontal = Space.S16.value, vertical = Space.S8.value) +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/Button.kt b/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt similarity index 55% rename from ui/src/main/java/eu/project/design_system/component/Button.kt rename to ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt index 6b95543..552a4bf 100644 --- a/ui/src/main/java/eu/project/design_system/component/Button.kt +++ b/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt @@ -1,4 +1,4 @@ -package eu.project.design_system.component +package eu.project.design_system.component.button import androidx.compose.animation.AnimatedContent import androidx.compose.foundation.BorderStroke @@ -6,79 +6,99 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Check import androidx.compose.material.icons.rounded.Error -import androidx.compose.material3.ButtonColors +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color.Companion.Transparent -import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import eu.project.design_system.ContentDescription +import eu.project.design_system.TestTag +import eu.project.design_system.component.LoadingIndicator +import eu.project.design_system.component.LoadingIndicatorType import eu.project.design_system.theme.Opacity -import eu.project.design_system.theme.Radius import eu.project.design_system.theme.SiaTheme -import eu.project.design_system.theme.SiaTypography + +/** + * A filled button with support for multiple visual types, sizes, and interactive states. + * + * ## State → enabled mapping + * | State | Clickable | + * |----------|-----------| + * | Enabled | ✅ | + * | Disabled | ❌ | + * | Loading | ❌ | + * | Error | ❌ | + * | Success | ❌ | + * + * @param testTag Required for UI testing. See [TestTag.Component]. + */ enum class FilledButtonType { Primary, Secondary } -enum class ButtonSize { Medium, Small } -enum class ButtonState { Enabled, Disabled, Loading, Error, Success } @Composable fun FilledButton( onClick: () -> Unit, label: String, - modifier: Modifier = Modifier, type: FilledButtonType, size: ButtonSize, state: ButtonState, - fullWidth: Boolean = false, + testTag: String, + modifier: Modifier = Modifier, + fullWidth: Boolean = false ) { - TextButton( + val isEnabled = state == ButtonState.Enabled + + Button( onClick = onClick, - modifier = modifier + modifier = Modifier .height(buttonHeight(size)) - .then(if (fullWidth) Modifier.fillMaxWidth() else Modifier.wrapContentWidth()), - enabled = state == ButtonState.Enabled, + .then(if (fullWidth) Modifier.fillMaxWidth() else Modifier.wrapContentWidth()) + .testTag(testTag) + .semantics { contentDescription = label } + .then(modifier), + enabled = isEnabled, shape = buttonShape(size), - border = BorderStroke( - color = when(type) { - FilledButtonType.Primary -> Transparent - FilledButtonType.Secondary -> SiaTheme.color.border.regular - }, - width = when(type) { - FilledButtonType.Primary -> 0.dp - FilledButtonType.Secondary -> 1.dp - } - ), - - colors = ButtonColors( - containerColor = when(type) { + border = when (type) { + FilledButtonType.Primary -> null + FilledButtonType.Secondary -> BorderStroke( + width = 1.dp, + color = SiaTheme.color.border.regular + ) + }, + contentPadding = buttonContentPadding(size), + colors = ButtonDefaults.buttonColors( + containerColor = when (type) { FilledButtonType.Primary -> SiaTheme.color.button.primary FilledButtonType.Secondary -> SiaTheme.color.button.secondary }, - contentColor = when(type) { + contentColor = when (type) { FilledButtonType.Primary -> SiaTheme.color.text.onPrimary FilledButtonType.Secondary -> SiaTheme.color.text.onSecondary }, - disabledContainerColor = when(type) { + disabledContainerColor = when (type) { FilledButtonType.Primary -> SiaTheme.color.button.primary.copy(alpha = Opacity.Disabled.value) FilledButtonType.Secondary -> SiaTheme.color.button.secondary.copy(alpha = Opacity.Disabled.value) }, - disabledContentColor = when(type) { + disabledContentColor = when (type) { FilledButtonType.Primary -> SiaTheme.color.text.onPrimary.copy(alpha = Opacity.Disabled.value) FilledButtonType.Secondary -> SiaTheme.color.text.onSecondary.copy(alpha = Opacity.Disabled.value) } ) ) { - AnimatedContent(targetState = state) { - when (it) { + AnimatedContent( + targetState = state, + label = TestTag.Component.animatedContent(testTag) + ) { currentState -> + when (currentState) { ButtonState.Enabled, ButtonState.Disabled -> { Text( text = label, @@ -88,45 +108,27 @@ fun FilledButton( ) } ButtonState.Loading -> { - LoadingIndicator(modifier = Modifier.size(20.dp), type = LoadingIndicatorType.Secondary) + LoadingIndicator( + modifier = Modifier.size(20.dp), + type = LoadingIndicatorType.Secondary, + testTag = TestTag.Component.loadingIndicator(testTag) + ) } ButtonState.Error -> { Icon( imageVector = Icons.Rounded.Error, - contentDescription = null, + contentDescription = ContentDescription.Icon.ERROR, modifier = Modifier.size(20.dp) ) } ButtonState.Success -> { Icon( imageVector = Icons.Rounded.Check, - contentDescription = null, + contentDescription = ContentDescription.Icon.SUCCESS, modifier = Modifier.size(20.dp) ) } } } } -} - -private fun buttonShape(buttonSize: ButtonSize): RoundedCornerShape { - return when (buttonSize) { - ButtonSize.Medium -> RoundedCornerShape(Radius.R16.value) - ButtonSize.Small -> RoundedCornerShape(Radius.R12.value) - } -} - -private fun buttonHeight(buttonSize: ButtonSize): Dp { - return when (buttonSize) { - ButtonSize.Medium -> 56.dp - ButtonSize.Small -> 40.dp - } -} - -@Composable -private fun buttonTextStyle(buttonSize: ButtonSize): TextStyle { - return when (buttonSize) { - ButtonSize.Medium -> SiaTypography.titleMedium - ButtonSize.Small -> SiaTypography.labelLarge - } } \ No newline at end of file From 3db69f2ba72a48ee8e5dde87e0deddb1cc6adf4b Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 17:51:44 +0200 Subject: [PATCH 03/11] Extract button content logic into a reusable `ButtonAnimatedContent` component - Create `ButtonAnimatedContent` in `ButtonUtils.kt` to handle common button states including `Enabled`, `Disabled`, `Loading`, `Error`, and `Success`. - Refactor `FilledButton` to use the new `ButtonAnimatedContent` component, reducing code duplication. - Standardize the layout of button content using a `Row` with configurable horizontal arrangement and centered vertical alignment. - Use `AnimatedContent` within the new component to handle transitions between different button states. --- .../component/button/ButtonUtils.kt | 69 +++++++++++++++++++ .../component/button/FilledButton.kt | 53 ++------------ 2 files changed, 75 insertions(+), 47 deletions(-) diff --git a/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt b/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt index 9274902..a73e781 100644 --- a/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt +++ b/ui/src/main/java/eu/project/design_system/component/button/ButtonUtils.kt @@ -1,10 +1,27 @@ package eu.project.design_system.component.button +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Check +import androidx.compose.material.icons.rounded.Error +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import eu.project.design_system.ContentDescription +import eu.project.design_system.TestTag +import eu.project.design_system.component.LoadingIndicator +import eu.project.design_system.component.LoadingIndicatorType import eu.project.design_system.theme.Radius import eu.project.design_system.theme.SiaTypography import eu.project.design_system.theme.Space @@ -30,4 +47,56 @@ internal fun buttonTextStyle(size: ButtonSize): TextStyle = when (size) { internal fun buttonContentPadding(size: ButtonSize): PaddingValues = when (size) { ButtonSize.Medium -> PaddingValues(horizontal = Space.S24.value, vertical = Space.S16.value) ButtonSize.Small -> PaddingValues(horizontal = Space.S16.value, vertical = Space.S8.value) +} + +@Composable +internal fun ButtonAnimatedContent( + label: String, + state: ButtonState, + size: ButtonSize, + testTag: String, + horizontalArrangement: Arrangement.Horizontal = Arrangement.Center +) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = horizontalArrangement, + verticalAlignment = androidx.compose.ui.Alignment.CenterVertically + ) { + AnimatedContent( + targetState = state, + label = TestTag.Component.animatedContent(testTag) + ) { currentState -> + when (currentState) { + ButtonState.Enabled, ButtonState.Disabled -> { + Text( + text = label, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = buttonTextStyle(size) + ) + } + ButtonState.Loading -> { + LoadingIndicator( + modifier = Modifier.size(20.dp), + type = LoadingIndicatorType.Secondary, + testTag = TestTag.Component.loadingIndicator(testTag) + ) + } + ButtonState.Error -> { + Icon( + imageVector = Icons.Rounded.Error, + contentDescription = ContentDescription.Icon.ERROR, + modifier = Modifier.size(20.dp) + ) + } + ButtonState.Success -> { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = ContentDescription.Icon.SUCCESS, + modifier = Modifier.size(20.dp) + ) + } + } + } + } } \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt b/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt index 552a4bf..e95f73e 100644 --- a/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt +++ b/ui/src/main/java/eu/project/design_system/component/button/FilledButton.kt @@ -1,29 +1,18 @@ package eu.project.design_system.component.button -import androidx.compose.animation.AnimatedContent import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Check -import androidx.compose.material.icons.rounded.Error import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Icon -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import eu.project.design_system.ContentDescription import eu.project.design_system.TestTag -import eu.project.design_system.component.LoadingIndicator -import eu.project.design_system.component.LoadingIndicatorType import eu.project.design_system.theme.Opacity import eu.project.design_system.theme.SiaTheme @@ -94,41 +83,11 @@ fun FilledButton( } ) ) { - AnimatedContent( - targetState = state, - label = TestTag.Component.animatedContent(testTag) - ) { currentState -> - when (currentState) { - ButtonState.Enabled, ButtonState.Disabled -> { - Text( - text = label, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - style = buttonTextStyle(size) - ) - } - ButtonState.Loading -> { - LoadingIndicator( - modifier = Modifier.size(20.dp), - type = LoadingIndicatorType.Secondary, - testTag = TestTag.Component.loadingIndicator(testTag) - ) - } - ButtonState.Error -> { - Icon( - imageVector = Icons.Rounded.Error, - contentDescription = ContentDescription.Icon.ERROR, - modifier = Modifier.size(20.dp) - ) - } - ButtonState.Success -> { - Icon( - imageVector = Icons.Rounded.Check, - contentDescription = ContentDescription.Icon.SUCCESS, - modifier = Modifier.size(20.dp) - ) - } - } - } + ButtonAnimatedContent( + label = label, + state = state, + size = size, + testTag = testTag + ) } } \ No newline at end of file From 20b3f719a9a5a8b2e7a823f283ee22024808c2e3 Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 17:52:10 +0200 Subject: [PATCH 04/11] Add OutlinedButton component and tests to the design system - Implement `OutlinedButton` supporting `Secondary` and `Destructive` types. - Support multiple button states including `Enabled`, `Disabled`, `Loading`, `Error`, and `Success`. - Add configuration options for `ButtonSize`, `fullWidth`, and `leftAligned` layout. - Include `OutlinedButtonTest` to verify state rendering, click behavior, and width constraints. --- .../component/button/OutlinedButtonTest.kt | 231 ++++++++++++++++++ .../component/button/OutlinedButton.kt | 73 ++++++ 2 files changed, 304 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/button/OutlinedButtonTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/button/OutlinedButton.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/button/OutlinedButtonTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/button/OutlinedButtonTest.kt new file mode 100644 index 0000000..9c3d07b --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/button/OutlinedButtonTest.kt @@ -0,0 +1,231 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertWidthIsEqualTo +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.unit.dp +import eu.project.design_system.ContentDescription +import eu.project.design_system.TestTag +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class OutlinedButtonTest { + + @get:Rule + val composeTestRule = createComposeRule() + + + +//- State renders correct content ------------------------------------------------------------------ + + @Test + fun whenStateIsEnabled_labelIsDisplayed() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithText("Outlined") + .assertIsDisplayed() + } + + @Test + fun whenStateIsDisabled_labelIsDisplayed() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Disabled, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithText("Outlined") + .assertIsDisplayed() + } + + @Test + fun whenStateIsLoading_loadingIndicatorIsDisplayed() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Loading, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.loadingIndicator("test_outlined_button")) + .assertIsDisplayed() + } + + @Test + fun whenStateIsError_errorIconIsDisplayed() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Error, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.ERROR) + .assertIsDisplayed() + } + + @Test + fun whenStateIsSuccess_successIconIsDisplayed() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Success, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.SUCCESS) + .assertIsDisplayed() + } + + + +//- Enabled policy --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_buttonIsEnabled() { + composeTestRule.setContent { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithTag("test_outlined_button") + .assertIsEnabled() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_onClickIsInvoked() { + var clicked = false + + composeTestRule.setContent { + OutlinedButton( + onClick = { clicked = true }, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_outlined_button" + ) + } + + composeTestRule + .onNodeWithTag("test_outlined_button") + .performClick() + + assertTrue(clicked) + } + + @Test + fun whenStateIsNotEnabled_onClickIsNotInvoked() { + val nonEnabledStates = listOf( + ButtonState.Disabled, + ButtonState.Loading, + ButtonState.Error, + ButtonState.Success + ) + + var currentState by mutableStateOf(nonEnabledStates.first()) + var clicked = false + + composeTestRule.setContent { + OutlinedButton( + onClick = { clicked = true }, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = currentState, + testTag = "test_outlined_button" + ) + } + + nonEnabledStates.forEach { state -> + clicked = false + currentState = state + + composeTestRule + .onNodeWithTag("test_outlined_button") + .performClick() + + assertFalse("onClick should not fire in state $state", clicked) + } + } + + + +//- Width behavior --------------------------------------------------------------------------------- + + @Test + fun whenFullWidthIsTrue_buttonFillsMaxWidth() { + composeTestRule.setContent { + Box(modifier = Modifier.width(300.dp)) { + OutlinedButton( + onClick = {}, + label = "Outlined", + type = OutlinedButtonType.Secondary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_outlined_button", + fullWidth = true + ) + } + } + + composeTestRule + .onNodeWithTag("test_outlined_button") + .assertWidthIsEqualTo(300.dp) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/button/OutlinedButton.kt b/ui/src/main/java/eu/project/design_system/component/button/OutlinedButton.kt new file mode 100644 index 0000000..0b58162 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/button/OutlinedButton.kt @@ -0,0 +1,73 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.OutlinedButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.unit.dp +import eu.project.design_system.theme.Opacity +import eu.project.design_system.theme.SiaTheme + +enum class OutlinedButtonType { Secondary, Destructive } + +@Composable +fun OutlinedButton( + onClick: () -> Unit, + label: String, + type: OutlinedButtonType, + size: ButtonSize, + state: ButtonState, + testTag: String, + modifier: Modifier = Modifier, + fullWidth: Boolean = false, + leftAligned: Boolean = false +) { + val contentColor = when (type) { + OutlinedButtonType.Secondary -> SiaTheme.color.text.secondary + OutlinedButtonType.Destructive -> SiaTheme.color.text.destructive + } + + val borderColor = when (type) { + OutlinedButtonType.Secondary -> SiaTheme.color.border.regular + OutlinedButtonType.Destructive -> SiaTheme.color.border.destructive + } + + val isFullWidth = fullWidth || leftAligned + + OutlinedButton( + onClick = onClick, + modifier = Modifier + .height(buttonHeight(size)) + .then(if (isFullWidth) Modifier.fillMaxWidth() else Modifier.wrapContentWidth()) + .testTag(testTag) + .semantics { contentDescription = label } + .then(modifier), + enabled = state == ButtonState.Enabled, + shape = buttonShape(size), + contentPadding = buttonContentPadding(size), + border = BorderStroke( + width = 1.dp, + color = if (state == ButtonState.Enabled) borderColor else borderColor.copy(alpha = Opacity.Disabled.value) + ), + colors = ButtonDefaults.outlinedButtonColors( + contentColor = contentColor, + disabledContentColor = contentColor.copy(alpha = Opacity.Disabled.value) + ) + ) { + ButtonAnimatedContent( + label = label, + state = state, + size = size, + testTag = testTag, + horizontalArrangement = if (leftAligned) Arrangement.Start else Arrangement.Center + ) + } +} \ No newline at end of file From e75223d9d9cc3b494dd8607d3b3db2909df460fc Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 17:52:27 +0200 Subject: [PATCH 05/11] Add `TextButton` component and its corresponding tests - Implement `TextButton` design system component with support for `Primary`, `Secondary`, and `Destructive` types. - Add configuration options for `ButtonSize`, `ButtonState`, `fullWidth` toggling, and `leftAligned` arrangement. - Integrate `ButtonAnimatedContent` to handle state transitions (Loading, Error, Success) within the button. - Add `TextButtonTest` to verify label rendering, state-based content visibility, enabled/disabled policies, and click behavior. --- .../component/button/TextButtonTest.kt | 231 ++++++++++++++++++ .../component/button/TextButton.kt | 61 +++++ 2 files changed, 292 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/button/TextButtonTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/button/TextButton.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/button/TextButtonTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/button/TextButtonTest.kt new file mode 100644 index 0000000..d112cde --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/button/TextButtonTest.kt @@ -0,0 +1,231 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertWidthIsEqualTo +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.unit.dp +import eu.project.design_system.ContentDescription +import eu.project.design_system.TestTag +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class TextButtonTest { + + @get:Rule + val composeTestRule = createComposeRule() + + + +//- State renders correct content ------------------------------------------------------------------ + + @Test + fun whenStateIsEnabled_labelIsDisplayed() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithText("Cancel") + .assertIsDisplayed() + } + + @Test + fun whenStateIsDisabled_labelIsDisplayed() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Disabled, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithText("Cancel") + .assertIsDisplayed() + } + + @Test + fun whenStateIsLoading_loadingIndicatorIsDisplayed() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Loading, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.loadingIndicator("test_text_button")) + .assertIsDisplayed() + } + + @Test + fun whenStateIsError_errorIconIsDisplayed() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Error, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.ERROR) + .assertIsDisplayed() + } + + @Test + fun whenStateIsSuccess_successIconIsDisplayed() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Success, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithContentDescription(ContentDescription.Icon.SUCCESS) + .assertIsDisplayed() + } + + + +//- Enabled policy --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_buttonIsEnabled() { + composeTestRule.setContent { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithTag("test_text_button") + .assertIsEnabled() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_onClickIsInvoked() { + var clicked = false + + composeTestRule.setContent { + TextButton( + onClick = { clicked = true }, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_text_button" + ) + } + + composeTestRule + .onNodeWithTag("test_text_button") + .performClick() + + assertTrue(clicked) + } + + @Test + fun whenStateIsNotEnabled_onClickIsNotInvoked() { + val nonEnabledStates = listOf( + ButtonState.Disabled, + ButtonState.Loading, + ButtonState.Error, + ButtonState.Success + ) + + var currentState by mutableStateOf(nonEnabledStates.first()) + var clicked = false + + composeTestRule.setContent { + TextButton( + onClick = { clicked = true }, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = currentState, + testTag = "test_text_button" + ) + } + + nonEnabledStates.forEach { state -> + clicked = false + currentState = state + + composeTestRule + .onNodeWithTag("test_text_button") + .performClick() + + assertFalse("onClick should not fire in state $state", clicked) + } + } + + + +//- Width behavior --------------------------------------------------------------------------------- + + @Test + fun whenFullWidthIsTrue_buttonFillsMaxWidth() { + composeTestRule.setContent { + Box(modifier = Modifier.width(300.dp)) { + TextButton( + onClick = {}, + label = "Cancel", + type = TextButtonType.Primary, + size = ButtonSize.Medium, + state = ButtonState.Enabled, + testTag = "test_text_button", + fullWidth = true + ) + } + } + + composeTestRule + .onNodeWithTag("test_text_button") + .assertWidthIsEqualTo(300.dp) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/button/TextButton.kt b/ui/src/main/java/eu/project/design_system/component/button/TextButton.kt new file mode 100644 index 0000000..115ba12 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/button/TextButton.kt @@ -0,0 +1,61 @@ +package eu.project.design_system.component.button + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import eu.project.design_system.theme.Opacity +import eu.project.design_system.theme.SiaTheme + +enum class TextButtonType { Primary, Secondary, Destructive } + +@Composable +fun TextButton( + onClick: () -> Unit, + label: String, + type: TextButtonType, + size: ButtonSize, + state: ButtonState, + testTag: String, + modifier: Modifier = Modifier, + fullWidth: Boolean = false, + leftAligned: Boolean = false +) { + val contentColor = when (type) { + TextButtonType.Primary -> SiaTheme.color.text.primary + TextButtonType.Secondary -> SiaTheme.color.text.secondary + TextButtonType.Destructive -> SiaTheme.color.text.destructive + } + + TextButton( + onClick = onClick, + modifier = Modifier + .height(buttonHeight(size)) + .then(if (fullWidth) Modifier.fillMaxWidth() else Modifier.wrapContentWidth()) + .testTag(testTag) + .semantics { contentDescription = label } + .then(modifier), + enabled = state == ButtonState.Enabled, + shape = buttonShape(size), + contentPadding = buttonContentPadding(size), + colors = ButtonDefaults.textButtonColors( + contentColor = contentColor, + disabledContentColor = contentColor.copy(alpha = Opacity.Disabled.value) + ) + ) { + ButtonAnimatedContent( + label = label, + state = state, + size = size, + testTag = testTag, + horizontalArrangement = if (leftAligned) Arrangement.Start else Arrangement.Center + ) + } +} \ No newline at end of file From 2f713b4b95d844f1694f275f2bd0eefbe08f9d40 Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 18:37:09 +0200 Subject: [PATCH 06/11] Add `IconButton` component and tests to design system - Create `IconButton` custom component using Material3 with support for `IconButtonType` (Primary, Secondary, Destructive) and `IconButtonState`. - Implement semantic properties for accessibility using labels and test tags. - Add comprehensive instrumentation tests in `IconButtonTest.kt` to verify display, enabled/disabled states, and click behavior. --- .../component/button/IconButtonTest.kt | 134 ++++++++++++++++++ .../component/button/IconButton.kt | 50 +++++++ 2 files changed, 184 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/button/IconButtonTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/button/IconButton.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/button/IconButtonTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/button/IconButtonTest.kt new file mode 100644 index 0000000..2eb6d70 --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/button/IconButtonTest.kt @@ -0,0 +1,134 @@ +package eu.project.design_system.component.button + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class IconButtonTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val testIcon = Icons.Default.Add + private val testLabel = "Add Item" + private val testTag = "test_icon_button" + + + +//- State renders correct content ------------------------------------------------------------------ + + @Test + fun whenStateIsEnabled_iconIsDisplayed() { + composeTestRule.setContent { + IconButton( + onClick = {}, + icon = testIcon, + label = testLabel, + type = IconButtonType.Primary, + state = IconButtonState.Enabled, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithContentDescription(testLabel) + .assertIsDisplayed() + } + + @Test + fun whenStateIsDisabled_iconIsDisplayed() { + composeTestRule.setContent { + IconButton( + onClick = {}, + icon = testIcon, + label = testLabel, + type = IconButtonType.Primary, + state = IconButtonState.Disabled, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithContentDescription(testLabel) + .assertIsDisplayed() + } + + + +//- Enabled policy --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_buttonIsEnabled() { + composeTestRule.setContent { + IconButton( + onClick = {}, + icon = testIcon, + label = testLabel, + type = IconButtonType.Primary, + state = IconButtonState.Enabled, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .assertIsEnabled() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenStateIsEnabled_onClickIsInvoked() { + var clicked = false + + composeTestRule.setContent { + IconButton( + onClick = { clicked = true }, + icon = testIcon, + label = testLabel, + type = IconButtonType.Primary, + state = IconButtonState.Enabled, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .performClick() + + assertTrue(clicked) + } + + @Test + fun whenStateIsDisabled_onClickIsNotInvoked() { + var clicked = false + + composeTestRule.setContent { + IconButton( + onClick = { clicked = true }, + icon = testIcon, + label = testLabel, + type = IconButtonType.Primary, + state = IconButtonState.Disabled, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .performClick() + + assertFalse("onClick should not fire when state is Disabled", clicked) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/button/IconButton.kt b/ui/src/main/java/eu/project/design_system/component/button/IconButton.kt new file mode 100644 index 0000000..79065af --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/button/IconButton.kt @@ -0,0 +1,50 @@ +package eu.project.design_system.component.button + +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import eu.project.design_system.theme.Opacity +import eu.project.design_system.theme.SiaTheme + +enum class IconButtonType { Primary, Secondary, Destructive } +enum class IconButtonState { Enabled, Disabled } + +@Composable +fun IconButton( + onClick: () -> Unit, + icon: ImageVector, + label: String, + type: IconButtonType, + state: IconButtonState, + testTag: String, + modifier: Modifier = Modifier +) { + val contentColor = when (type) { + IconButtonType.Primary -> SiaTheme.color.text.primary + IconButtonType.Secondary -> SiaTheme.color.text.secondary + IconButtonType.Destructive -> SiaTheme.color.text.destructive + } + + IconButton( + onClick = onClick, + modifier = modifier + .testTag(testTag) + .semantics { contentDescription = label }, + enabled = state == IconButtonState.Enabled, + colors = IconButtonDefaults.iconButtonColors( + contentColor = contentColor, + disabledContentColor = contentColor.copy(alpha = Opacity.Disabled.value) + ) + ) { + Icon( + imageVector = icon, + contentDescription = null + ) + } +} \ No newline at end of file From f7fddea3daa5aa4c21e5cd55234e465aa31c133f Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 19:25:03 +0200 Subject: [PATCH 07/11] Add Checkbox component and associated tests - Implement a custom `Checkbox` component using Material3 with `SiaTheme` styling. - Add `CheckboxState` enum to manage selected and unselected states. - Include `CheckboxTest` for verifying rendering states and toggle behavior. --- .../design_system/component/CheckboxTest.kt | 75 +++++++++++++++++++ .../design_system/component/Checkbox.kt | 33 ++++++++ 2 files changed, 108 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/CheckboxTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/Checkbox.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/CheckboxTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/CheckboxTest.kt new file mode 100644 index 0000000..6abb906 --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/CheckboxTest.kt @@ -0,0 +1,75 @@ +package eu.project.design_system.component + +import androidx.compose.ui.test.assertIsOff +import androidx.compose.ui.test.assertIsOn +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class CheckboxTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val testTag = "test_checkbox" + + + +//- State renders correct content ------------------------------------------------------------------ + + @Test + fun whenStateIsSelected_checkboxIsOn() { + composeTestRule.setContent { + Checkbox( + state = CheckboxState.Selected, + onToggle = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .assertIsOn() + } + + @Test + fun whenStateIsUnselected_checkboxIsOff() { + composeTestRule.setContent { + Checkbox( + state = CheckboxState.Unselected, + onToggle = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .assertIsOff() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenClicked_onToggleIsInvoked() { + var toggled = false + + composeTestRule.setContent { + Checkbox( + state = CheckboxState.Unselected, + onToggle = { toggled = true }, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(testTag) + .performClick() + + assertTrue(toggled) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/Checkbox.kt b/ui/src/main/java/eu/project/design_system/component/Checkbox.kt new file mode 100644 index 0000000..394cd6b --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/Checkbox.kt @@ -0,0 +1,33 @@ +package eu.project.design_system.component + +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CheckboxDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import eu.project.design_system.theme.SiaTheme + +enum class CheckboxState { Selected, Unselected } + +@Composable +fun Checkbox( + state: CheckboxState, + onToggle: () -> Unit, + testTag: String +) { + val isSelected = state == CheckboxState.Selected + + val checkboxColors = CheckboxDefaults.colors( + checkedColor = SiaTheme.color.button.primary, + uncheckedColor = SiaTheme.color.text.secondary, + checkmarkColor = SiaTheme.color.text.onPrimary + ) + + Checkbox( + modifier = Modifier + .testTag(testTag), + checked = isSelected, + onCheckedChange = { onToggle() }, + colors = checkboxColors + ) +} \ No newline at end of file From 3d7f4c18ee418c1c9c6c4f144bfa426376d30312 Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 20:21:17 +0200 Subject: [PATCH 08/11] Add `Dialog` component and associated tests - Implement `Dialog` using Material3 `AlertDialog` with customizable headline, supporting text, and action buttons. - Define `DialogState` to manage dialog visibility. - Add `dialogConfirmButton` and `dialogDismissButton` helper functions to `TestTag` for standardized testing. - Add `DialogTest` to verify visibility states and button click behaviors. --- .../design_system/component/DialogTest.kt | 284 ++++++++++++++++++ .../java/eu/project/design_system/TestTag.kt | 3 + .../project/design_system/component/Dialog.kt | 79 +++++ 3 files changed, 366 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/DialogTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/Dialog.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/DialogTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/DialogTest.kt new file mode 100644 index 0000000..af06961 --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/DialogTest.kt @@ -0,0 +1,284 @@ +package eu.project.design_system.component + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertIsNotEnabled +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import eu.project.design_system.TestTag +import eu.project.design_system.component.button.ButtonState +import org.junit.Assert +import org.junit.Rule +import org.junit.Test + +class DialogTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val testTag = "test_dialog" + private val headline = "Delete Item" + private val supportingText = "Are you sure you want to delete this item?" + private val confirmLabel = "Delete" + private val dismissLabel = "Cancel" + + + +//- Visibility ------------------------------------------------------------------------------------- + + @Test + fun whenStateIsVisible_contentIsDisplayed() { + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule.onNodeWithText(headline).assertIsDisplayed() + composeTestRule.onNodeWithText(supportingText).assertIsDisplayed() + composeTestRule.onNodeWithText(confirmLabel).assertIsDisplayed() + composeTestRule.onNodeWithText(dismissLabel).assertIsDisplayed() + } + + @Test + fun whenStateIsHidden_contentIsNotDisplayed() { + composeTestRule.setContent { + Dialog( + state = DialogState.Hidden, + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule.onNodeWithText(headline).assertDoesNotExist() + composeTestRule.onNodeWithText(supportingText).assertDoesNotExist() + composeTestRule.onNodeWithText(confirmLabel).assertDoesNotExist() + composeTestRule.onNodeWithText(dismissLabel).assertDoesNotExist() + } + + + +//- Click behavior --------------------------------------------------------------------------------- + + @Test + fun whenConfirmClicked_onConfirmIsInvoked() { + var confirmed = false + + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = { confirmed = true }, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogConfirmButton(testTag)) + .performClick() + + Assert.assertTrue(confirmed) + } + + @Test + fun whenDismissClicked_onDismissIsInvoked() { + var dismissed = false + + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = { dismissed = true }, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogDismissButton(testTag)) + .performClick() + + Assert.assertTrue(dismissed) + } + + + +//- Dismissable ------------------------------------------------------------------------------------ + + @Test + fun whenDismissable_onDismissRequestInvokesOnDismiss() { + var dismissed = false + + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(dismissable = true), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = { dismissed = true }, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogDismissButton(testTag)) + .performClick() + + Assert.assertTrue(dismissed) + } + + + +//- Button states ---------------------------------------------------------------------------------- + + @Test + fun whenConfirmButtonStateIsEnabled_confirmButtonIsEnabled() { + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(confirmButtonState = ButtonState.Enabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogConfirmButton(testTag)) + .assertIsEnabled() + } + + @Test + fun whenConfirmButtonStateIsDisabled_confirmButtonIsNotEnabled() { + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(confirmButtonState = ButtonState.Disabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogConfirmButton(testTag)) + .assertIsNotEnabled() + } + + @Test + fun whenConfirmButtonStateIsDisabled_onConfirmIsNotInvoked() { + var confirmed = false + + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(confirmButtonState = ButtonState.Disabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = { confirmed = true }, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogConfirmButton(testTag)) + .performClick() + + Assert.assertFalse(confirmed) + } + + @Test + fun whenDismissButtonStateIsEnabled_dismissButtonIsEnabled() { + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(dismissButtonState = ButtonState.Enabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogDismissButton(testTag)) + .assertIsEnabled() + } + + @Test + fun whenDismissButtonStateIsDisabled_dismissButtonIsNotEnabled() { + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(dismissButtonState = ButtonState.Disabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = {}, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogDismissButton(testTag)) + .assertIsNotEnabled() + } + + @Test + fun whenDismissButtonStateIsDisabled_onDismissIsNotInvoked() { + var dismissed = false + + composeTestRule.setContent { + Dialog( + state = DialogState.Visible(dismissButtonState = ButtonState.Disabled), + headline = headline, + supportingText = supportingText, + dismissButtonLabel = dismissLabel, + onDismiss = { dismissed = true }, + confirmButtonLabel = confirmLabel, + onConfirm = {}, + testTag = testTag + ) + } + + composeTestRule + .onNodeWithTag(TestTag.Component.dialogDismissButton(testTag)) + .performClick() + + Assert.assertFalse(dismissed) + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/TestTag.kt b/ui/src/main/java/eu/project/design_system/TestTag.kt index 89f4afa..f2263b0 100644 --- a/ui/src/main/java/eu/project/design_system/TestTag.kt +++ b/ui/src/main/java/eu/project/design_system/TestTag.kt @@ -46,5 +46,8 @@ object TestTag { object Component { fun loadingIndicator(parentTag: String) = "${parentTag}_loading_indicator" fun animatedContent(parentTag: String) = "${parentTag}_animated_content" + + fun dialogConfirmButton(parentTag: String) = "${parentTag}_confirm_text_button" + fun dialogDismissButton(parentTag: String) = "${parentTag}_dismiss_text_button" } } \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/Dialog.kt b/ui/src/main/java/eu/project/design_system/component/Dialog.kt new file mode 100644 index 0000000..4cb7041 --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/Dialog.kt @@ -0,0 +1,79 @@ +package eu.project.design_system.component + +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import eu.project.design_system.TestTag +import eu.project.design_system.component.button.ButtonSize +import eu.project.design_system.component.button.ButtonState +import eu.project.design_system.component.button.TextButton +import eu.project.design_system.component.button.TextButtonType +import eu.project.design_system.theme.SiaTheme + +sealed class DialogState { + data object Hidden: DialogState() + data class Visible( + val dismissable: Boolean = true, + val confirmButtonState: ButtonState = ButtonState.Enabled, + val dismissButtonState: ButtonState = ButtonState.Enabled + ): DialogState() +} + +@Composable +fun Dialog( + state: DialogState, + + headline: String, + supportingText: String, + + dismissButtonLabel: String, + onDismiss: () -> Unit, + + confirmButtonLabel: String, + onConfirm: () -> Unit, + + testTag: String +) { + if (state is DialogState.Visible) { + AlertDialog( + containerColor = SiaTheme.color.surface.background, + onDismissRequest = { if (state.dismissable) { onDismiss() } }, + title = { + Text( + text = headline, + style = SiaTheme.typography.headlineSmall, + color = SiaTheme.color.text.primary + ) + }, + text = { + Text( + text = supportingText, + style = SiaTheme.typography.bodyMedium, + color = SiaTheme.color.text.secondary + ) + }, + confirmButton = { + TextButton( + onClick = onConfirm, + label = confirmButtonLabel, + type = TextButtonType.Destructive, + size = ButtonSize.Small, + state = state.confirmButtonState, + testTag = TestTag.Component.dialogConfirmButton(testTag), + fullWidth = true + ) + }, + dismissButton = { + TextButton( + onClick = onDismiss, + label = dismissButtonLabel, + type = TextButtonType.Primary, + size = ButtonSize.Small, + state = state.dismissButtonState, + testTag = TestTag.Component.dialogDismissButton(testTag), + fullWidth = true + ) + } + ) + } +} \ No newline at end of file From 40c1497b5f26972c0b9fc726f704f083844b2f39 Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 20:54:38 +0200 Subject: [PATCH 09/11] Add reusable BottomSheet component and tests - Implement a generic `BottomSheet` component using Material3 `ModalBottomSheet`. - Define `BottomSheetState` sealed class to handle `Hidden` and `Shown` states with type-safe data. - Configure `BottomSheet` with custom theme styling, including specific corner radius and surface colors. - Add `BottomSheetTest` to verify visibility, data passing, dismiss behavior, and state transitions. --- .../component/BottomSheetTest.kt | 156 ++++++++++++++++++ .../design_system/component/BottomSheet.kt | 59 +++++++ 2 files changed, 215 insertions(+) create mode 100644 ui/src/androidTest/java/eu/project/design_system/component/BottomSheetTest.kt create mode 100644 ui/src/main/java/eu/project/design_system/component/BottomSheet.kt diff --git a/ui/src/androidTest/java/eu/project/design_system/component/BottomSheetTest.kt b/ui/src/androidTest/java/eu/project/design_system/component/BottomSheetTest.kt new file mode 100644 index 0000000..10a7188 --- /dev/null +++ b/ui/src/androidTest/java/eu/project/design_system/component/BottomSheetTest.kt @@ -0,0 +1,156 @@ +package eu.project.design_system.component + +import android.annotation.SuppressLint +import androidx.compose.material3.Text +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performTouchInput +import androidx.compose.ui.test.swipeDown +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +class BottomSheetTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val testTag = "test_bottom_sheet" + private val testContentTag = "test_bottom_sheet_content" + private val testData = "Test Content" + + + +//- Visibility ------------------------------------------------------------------------------------- + + @Test + fun whenStateIsShown_contentIsDisplayed() { + composeTestRule.setContent { + BottomSheet( + state = BottomSheetState.Shown(testData), + onDismissRequest = {}, + testTag = testTag + ) { data -> + Text( + text = data, + modifier = Modifier.testTag(testContentTag) + ) + } + } + + composeTestRule.onNodeWithTag(testContentTag).assertIsDisplayed() + composeTestRule.onNodeWithText(testData).assertIsDisplayed() + } + + + +//- Dismiss behavior ------------------------------------------------------------------------------- + + @SuppressLint("CheckResult") + @Test + fun whenDismissed_onDismissRequestIsInvoked() { + var dismissed = false + + composeTestRule.setContent { + BottomSheet( + state = BottomSheetState.Shown(testData), + onDismissRequest = { dismissed = true }, + testTag = testTag + ) { data -> + Text(text = data) + } + } + + composeTestRule.onNodeWithTag(testTag).performTouchInput { this.swipeDown() } + + composeTestRule.runOnIdle { + assertTrue(dismissed) + } + } + + + +//- Data passing ----------------------------------------------------------------------------------- + + @Test + fun whenStateIsShownWithData_dataIsPassedToContent() { + val specificData = "Specific Test Data" + var receivedData: String? = null + + composeTestRule.setContent { + BottomSheet( + state = BottomSheetState.Shown(specificData), + onDismissRequest = {}, + testTag = testTag + ) { data -> + receivedData = data + Text(text = data) + } + } + + composeTestRule.runOnIdle { + assertEquals(specificData, receivedData) + } + } + + + +//- State transitions ------------------------------------------------------------------------------ + + @Test + fun whenStateChangesFromHiddenToShown_contentBecomesVisible() { + var state: BottomSheetState by mutableStateOf(BottomSheetState.Hidden) + + composeTestRule.setContent { + BottomSheet( + state = state, + onDismissRequest = {}, + testTag = testTag + ) { data -> + Text( + text = data, + modifier = Modifier.testTag(testContentTag) + ) + } + } + + composeTestRule.onNodeWithTag(testContentTag).assertDoesNotExist() + + state = BottomSheetState.Shown(testData) + + composeTestRule.onNodeWithTag(testContentTag).assertIsDisplayed() + } + + @Test + fun whenStateChangesFromShownToHidden_contentBecomesInvisible() { + var state: BottomSheetState by mutableStateOf(BottomSheetState.Shown(testData)) + + composeTestRule.setContent { + BottomSheet( + state = state, + onDismissRequest = {}, + testTag = testTag + ) { data -> + Text( + text = data, + modifier = Modifier.testTag(testContentTag) + ) + } + } + + composeTestRule.onNodeWithTag(testContentTag).assertIsDisplayed() + + state = BottomSheetState.Hidden + + composeTestRule.onNodeWithTag(testTag).assertDoesNotExist() + composeTestRule.onNodeWithTag(testContentTag).assertDoesNotExist() + } +} \ No newline at end of file diff --git a/ui/src/main/java/eu/project/design_system/component/BottomSheet.kt b/ui/src/main/java/eu/project/design_system/component/BottomSheet.kt new file mode 100644 index 0000000..3dfae7e --- /dev/null +++ b/ui/src/main/java/eu/project/design_system/component/BottomSheet.kt @@ -0,0 +1,59 @@ +package eu.project.design_system.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import eu.project.design_system.theme.Radius +import eu.project.design_system.theme.SiaTheme +import eu.project.design_system.theme.Space + +sealed class BottomSheetState { + data object Hidden : BottomSheetState() + data class Shown(val data: T) : BottomSheetState() +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun BottomSheet( + state: BottomSheetState, + onDismissRequest: () -> Unit, + testTag: String, + content: @Composable ColumnScope.(T) -> Unit +) { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + val isVisible = state is BottomSheetState.Shown + + LaunchedEffect(isVisible) { + if (isVisible) sheetState.show() else sheetState.hide() + } + + if (isVisible || sheetState.isVisible) { + ModalBottomSheet( + modifier = Modifier.testTag(testTag), + onDismissRequest = onDismissRequest, + sheetState = sheetState, + containerColor = SiaTheme.color.surface.background, + shape = RoundedCornerShape(topStart = Radius.R24.value, topEnd = Radius.R24.value), + dragHandle = {} + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Space.S16.value, vertical = Space.S24.value), + ) { + if (state is BottomSheetState.Shown) { + content(state.data) + } + } + } + } +} \ No newline at end of file From cfeff7c9a2a959f48f088a90db30d740e0f24902 Mon Sep 17 00:00:00 2001 From: Marcello Date: Thu, 2 Apr 2026 23:26:15 +0200 Subject: [PATCH 10/11] Update app name and refresh launcher icons - Rename the application from "Say It Again" to "Sia" in `strings.xml`. - Update `AndroidManifest.xml` to use `@mipmap/ic_launcher` and `@mipmap/ic_launcher_round` instead of the previous MVP icon. - Add adaptive icon XML definitions for API 26+ including support for background, foreground, and monochrome layers. - Add new launcher icon assets in WebP format across all screen density buckets (hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi). - Define `ic_launcher_background` color as `#1E1E1E`. - Add `ic_launcher-playstore.png` for store listing. --- app/src/main/AndroidManifest.xml | 4 ++-- app/src/main/ic_launcher-playstore.png | Bin 0 -> 15802 bytes .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 6 ++++++ .../res/mipmap-anydpi-v26/ic_launcher_round.xml | 6 ++++++ app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 826 bytes .../res/mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 914 bytes .../main/res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 1820 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 584 bytes .../res/mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 642 bytes .../main/res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1134 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1066 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 1260 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 2604 bytes app/src/main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 1570 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 1876 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 4088 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 2146 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.webp | Bin 0 -> 2706 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 5796 bytes .../main/res/values/ic_launcher_background.xml | 4 ++++ app/src/main/res/values/strings.xml | 2 +- 21 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values/ic_launcher_background.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 306c7bd..9881b55 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,9 +11,9 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/mvp_icon" + android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:roundIcon="@mipmap/mvp_icon" + android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.SayItAgain" tools:targetApi="31"> diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..d95331b150a77ad1dfea062f0befdfc726d9527f GIT binary patch literal 15802 zcmeHu_g7QFx9p|!^d7e?=b)|9J)0

i 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

ZIM$P;% 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 + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..65291b9 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..d1e8b595f8f8cccb3d7cbebc39181647d82ede1a GIT binary patch literal 826 zcmV-A1I7GONk&F80{{S5MM6+kP&iB`0{{RoN5Byfl~CHY&5&fpa`tQ_D!azEZQEMe zwr$(CZQCviNk)8 zg^0#Tz*H5CFrL=BF(Qg98fmTFwwa@&^29lh!&NnTTH5QN{_1#y126(nCDB{(ezR3I z!ps#SJgtZFY~i~qeEzwFu-g=VN@eFrE1yspCzz4O6 zLN#pjD*$kv*G-ItsJ3J^UGdrqHllu9+%Gy3hVrzw+9NIiU(J;A5miu84Q=(($7~7s zMQ7p=IjZYsvrjmr2l7F+t@K>cH^sl<#BoeE)c`R>RM^W091h9kSKC=G{Nlb_9wTuo z_!Z7ek#`^9rb_ag#)aZxYO7|jKM3_meV&-(fNLtq$94dRs~klAi1oXDda0wj`exG{ z)}y#)0E|%-?Z)Aama1yw6yR6AIm9UE4FImM-uec>BhADu_X2tFaKL(kP*lSp>5aD8V7gZF5IOo7%{yEr z6xZ7-+bqzOqp#6^{_KbZ@y0l86gT?V=8+RBx^+$ z^T$wfHN&EQSdfKTGw0osGJYgXQPvmh6v2-wVuccu&|o6r!@{iZ67zIM`DY2%V&jr) zW$w#7m3b)hD0DhZDP6>pED#VZ#Tu;3daN%zLRM#K77U^ki?RZ%u$u5u8tS{UpoHq* ER2SKnvj6}9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..413c8e3e914099fccded4039abd8db78c97ae527 GIT binary patch literal 914 zcmV;D18w|LNk&GB0{{S5MM6+kP&iC}0{{Rop+G1QwaAhr$#omu|5CVsyo3PW)&Nib z8vB9SeUA~`_a~uchE^acFZu`x0059}vtagC&9-gZwr$(CZCkf(+qPL76QHgCxBmac zLU?VonThExrB|XEtTRtIE;&=+{)ic#fscrQ!7uJGg8Q6j zg52WIBiK>9;|tXtVruk!jKhq{K#z7_3x+~MxQM@aF<1u%63$+j_ z)0v11Nq&dR@y>3}bDMz-Jrhj!jPY-Jr08&&d&sR~^4(1iMjWsmLS;ii-@6RV;Ks1y z@JO|MD3}e|Wz((5klCbKwz+99c*7Gr%?M$0p?0JV$KKE28V(c~h%z~al^Sh)fgNT3 zTT3t23hQ!UCZC#B2y>U0m*zAI6_8>e4^U}D@^ykg7MQ_Oc?1r}U|xf4!v$}hIN*di z-wq*wgM8WzV8?;Q4K~^0sTVfc23f>`6A`>jwQK!3PnDE`-@7`tH`3*WqNEHE3c&%_ zA=;1utASOBIN%wbNvle8i2=60kqYFdawiCAgEBx0*iuBm;?&wMgQKyukzBo3Qagu= zMo0^F+xt@yad3s~Sk!a<>WV8ry|?_}9cyleWV(#;t0ID*xQ|qS2(~%WZHndqgi;)v z(|A2!XGb9;w$A>qUpWN5L6QzFkX=Y#@O6zIX`#sIDV%}Lk<@9jwsYdkIK=QL1~*~O zV_wPk@)D1S+$D)3m=5nUIL1A!XcEZ(5dmePSd$^!b9SA~2%RRl*o4I~vIxNcoUs3m z2^?yaqMg8U1V-U(LMKL>Z~4Kt=DrGl&#Z@KkT(toZyROZRbM<)9d-uYp<0dN$x6MV z*W{~N8PQRKdr5HRQ2_YmP}VIZ^= zB57qB)$~g^o;yWYPDGg8zNdv`>VY)EHDMYh12$A;dmL(rv{s;xuLB^Y#S4w28O#9m z0?eOp`7ORF(oz_A>*g%qp`PE}9o+Mk!>M2;p8>h3*j{x?l%x!H=B)A^8q9-ZJCfXP oA8>Vuv~lGhw!wWSc(K;#HJ3_=XwNg)V@^=%`Ly-_*8d;#2B1~FN&o-= literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b3d7a9eb1501091999c219c713776532eb56f4b3 GIT binary patch literal 1820 zcmV+%2jlosNk&E#2LJ$9MM6+kP&iBo2LJ#sN5Byfm4<<|Z5IE&x8FfTOhA57pnH^M z+j7%b_os8l8L6sYn!%g@u&@;&L6U6Kw(dSY=i2tOZQC}#ZQK4+ux;C# zf^9!z@3$C8k`iYZJkY4Qktay7ZQGEfnFPwVt+s93wr$(CZCh#lKOICwuNr|Pf7VSz z^q+y-MvA;)kODfy4j4Y`y2x9b?s7t=LBClN9F z?_6HO2l+9-=3m^;!-LllFW-y5bB$g^(%2;ukjQWI_e8$H-x+H8!{?Wq2oRXgdVmu7 zPW|4)e^iwTVef~5#|jSR5>{1B-+LC3Fm_`V`IW;rRki3_pA6os>Xbw}Foq!CUOrit zR&B`Dt16$oN(e3SpB3S`Jjk$COU(ih1bV+J$kpC6J}YWo}RhY! zjr@yY=nsS1-rK-uPwym|1={U2RjX-p+L0wNtOKvmBx$?F1eN(Hdxl;Mx zM6o*lT9;_WvyWW8VIN*pnaJfmqww}>Rkh!@*1}Q@W^(IB$z1V|iothbU~|xw;8KJw0Xg)IDD*(6@Ou z&5suiKyjppZX{ly2rgG83w7kbtc_rvf&+>XG6?k2-7}dz1xKUg(*H0mb#k1o${5Q;5ke@$4&JqdfpTU;hGdjJIHWw!tN~K|D}1P}4^MuG@>N(^TP0 zs2K9fU>ESTtFG7C0B|?i{1;&dzM@KOgX>%Y<77+kw?m%978(_gV{| z(IpN(?x}r^$_{@D3a|f*F-hh|?+y2mQra(o-#yJ6wl@nCP(ZS^mR)LS*DrnQ;vK(d ztEOZmrFQa?{I}1X zHNzIRj@_rgM%9Eq-vNX^y^Dsd5LWXXsv-vs(H?fAz)wlBB7_M5&Lx|ueh;`7wse-h zvUWNJ5p?l=0C!qd3k(ts1#lt7#H1K-Qk7DFW`!}qZVR|10y=HWRqL>~B#|`=TLEm> zOiU-hX5DR{0eO39#lj5_0~G$oNXeA_&#i{`j&A&Ya6{8kasLe%ZHSMyO0tj{z0Dl*&Nk{w=K9O{)A~ARXqohsvIE`>&Uua=`I$Y_bwL;t|5fCZ(w@M9}$b@%j!H&Kofy*ertt zwz8c9`xAbnL#efk3yJ{sn82L(JV`RzXaljB2J!8`mV zD6_^Q>n;E6T);whP6)8&=X>+tru~)i=JW%XrwrTEkBdS?P0wTQ;&x1Lux!^6Fzy4B zh0Ru2Al7Wj7x+%s33@Qm=ybRZ{}SsQZfNhK&Fk*_cs;$ji-#7h)DaTQ&*i44`~67X z`&^wMNj)tSiMfy%{D~dhA7fTAi;{Dm*T@E3#yD84|APV{o(RU ziNHDowGM|s4;R8e#~<$-LcqX;@wN8w^-6e9f^fY5F)_j=UBqaBW|-ka)O*M7ME=b} z`QA>1nGmUP@YAHK7UJ!_GrcB%G2c6{WZD70amCw z3_XodCO8p{$j8iV(st+m^zmu_!hA8m?f>-><}_WGh$sZZ1v8YOI}WFThc>|hKSB_3 z7kif&Uy7bf(@RmjOBfNM*9*+hf(O+{WDeW{9ZaymdVve>o4By;ZAQ&~^n1kj%n!Vr<3Ne@Dr z6x2EmO=Om%J) z9!!O>>0Wbu_7y+35Q;gAx>BLJPaIqIHP9YEU4r~W3giqYyj2Zz8_%6p$1=<8_&s*%x&gXc&IiR-Gp*1iyep-@ks{Y2jgS5+e+Y7ZfJVw-Nl5ZCmPFckOo!){S+ zyd#Vyfg{Gb;ydA+!|FpZ?+HVp`X*_oftGF(7LpJalS^o2mDd~xg?OYa^-$)6pM*su zO!vT0%wf|wo~z4azVDuzZ8Vayn6Om>ht1-6rVfvjgndG4xI@ZJKYe!D0Y|*?!%it{ zd?TFD&NjgddtLC2a84`vSJPbAJomHhx(^NZc z)POjwwmOIsIIfkJqLS*MI2jWE@$gNNvTHwM5hzk=>jhyd+p%95zwl2wezEmhYUD)_ zf`oByV+FI7t|6((3&MHp%6I0Q{b_%Y)GV2AmGASm86VP+gkj-biG9(%WG;M=4K(>{ Wh(Q{1(n&)I0%=18qSABprvw0wH5H=( literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..ecdc67bd18f9a7f65c79c4724a1f35f5a8ca6623 GIT binary patch literal 642 zcmV-|0)72bNk&F`0ssJ4MM6+kP&iC(0ssInYrq;1mB^AL*|i$>zbQ5#hli;HPktNc zs%>dNDTd1LzEQs0~8cUK>+H&Oo@CZ`d1BA@Bqqowb6%m^A%`jRDKv~Q@ z&687}HZzOqq(g{T>OEfp@|gvE&d1PvRem0`&y^7ccLWA;XUj9m16=j<-?f~bhz>zu zfO6B!J7zMAAm2dNy&&DHzYo+e2tut>E{HC%j+x6g7C|1@K;W~szBAS>)QX4? zu!{E(UXZF|qH^3qj~Hjtp+9T>^P$)z2}3H~LrBNq%*~AQULGC&1|36fb$HA>Aq}9+ zjUhR}V_NiJ@CYe`o_J^P@;|z)+Tq0IL%HCMU|(&rjD50h)jRUXwHJ z5Ng~5l&?FKWfj0b7Y^Z)KlhZ)B&7wSqPD2C`LA9!x3ZGnQLwBmtXUE7Rm>LAr82pV zP12GFa{T}|haj+u&LU3K3P_Sl9S8_@XCfU+0w+rV<>!iS5j!fK9h00Y@iGv-;*Mzs z+2EfliCd_S#+4?1sqLs`ol1uiRW@5gt?*x!mkLAt!z)Xk0E=mXkOMp)&J&;F=bQ6v zIVJML%MC#sfUNmf4jq$aDJ||M{BEIeUX3E@n8t-^1+-++TP!XoqTARc>FB12>ijW# ck{wDJw;0mOqc{@euCA`G&RB==+y7rs0Z%YD82|tP literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..5d79778424faf030033240e1815b528232d7f126 GIT binary patch literal 1134 zcmV-!1d;nvNk&Fy1ONb6MM6+kP&iCk1ONapFTe{BwFW`9&FjzoF+{`!ti#LFY;9{B z=S}ZDt^&M({Pg}eXBjNKg7*-McsO!2-xTQ(WpD%>0RYH2$=SBesdl^Bwry=TA7Hz) zZF9eCJKI(o1#a6Y?Y3jaH%M@7+qA8o*tTukwr$(CZQHi(_qua&a+~n<&6SJwnMCwo zZQC{sQ>L=z2_7UsAh+m9i?NF%JqZL*tT`iX_#63D&a4Sk@9nEJI>~fw*3Fr@Hjm@Y z_0R24Y5Y7Lc{XuoLBAT<$$lyeBH1+qz{pW&YLkeVe*-y~MdW503DnpCkyLhiUnHpC zAP!pH7<)1{QB!FCBQjbaq(wHHL9s}rdl z>Lsdkx zWobB~UYAD3jw(g$G8`^dW7GWw=5#jpzmNNxG_0g$HoHjGZMy<_R}UXgZ{e(r#wJ15 z1NC9kTQ+PjANw6lJ;re!h~gKqY8NPSM$%_CGVz-h05ERoJT|Vs?1cdM%tGS-nZ6^S zF22wKPzlYIjX1pZ=LJwo4ijCxyxPzJvEh@u``4#p5o+rCs|*0=O7mbt?+{OF=)3^H z<1t1a`EqkngJ1*{6cqR;pTk@?{so+aGHY>J$mZ_5s9daj~oC5 zR&U#AI`t=SRN$o&CHLEZ4Ypr5h*bL^5U5i1+vvhV9+FZ5<@o;}d|M{68Uea&(EyjZ zV*ay*ld52!ymOr9((b^sNYNa;eDip{!wD63kX`RIJTC#b+lMm?^K3b;Q#X&dtcQOi z`W(Y|2-okJ8}NFyw2rT>bP^4Tdiic&->@L5RqGtFOSxv$H5GeFv$6Xnl0uzBC%ZB2 zyB(eG&Pnk{s|`>IaF?*itAoC@!ll&rz&mkeKGr?3K6@);PqF~FDBU?naer1l0Y%mh z`0DsL_t^RrBI_zHzm3m^)+vO zu+^0a3x`AEe$y%^3-NYtK-ix@d9L%cl-i6^z+)aIT=_aI4B~io7KSp`laD_ zWB?XCSo|nmZm6f^GD$zJHhz@0;MwclBys>ATxj3>{H$0^Ece%E>ax1~f2qzMr~WT= z*N4IL=Q4nDg$(*vR&U)txL@ONegHQCU3z+QEWa?o48Vg3^8N3J;j%@Skvsqb02!Pw AX8-^I literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..56a5ddf997cab7482e541b22d5a5e43a930a0d03 GIT binary patch literal 1066 zcmV+_1l9XeNk&E@1ONb6MM6+kP&iB$1ONapU%(d-mCgi2MBspB+jiRK{)U-k>7_J- z%zu1Rm)=+L+0URDBOqzpb}Z{vwr$%UcC-OwH60C`H*Qp`vGI>=o9_fj+qUg&q<<2O zwYF{Bwr$(CZQEm;Y4UsCq@82leqCiZ$8mS=BBK8jAYZHjff#H)LseK*4F)XoAeo-5 zcT41T^&lcsAe9#}wP|#}rYCyTs2eTY^dc6ZAd`@nwnUlionNK^Dpu-tiN5TQ`(@Dn z1+NB)Q+jWRbGPi7$v>yUQwww$LvO!B-i`ZCZFU{1wem8s^U=lI6W3W_zTIpp@6zx z=n+P%Op>o!YO&4_NOFlZWc~Li55F50$ty|f=%YVK`W|iXm~e|EGp{|avcxB=T1n9N zrD^&7w4I_|pnby>jIO19ZY4j499;lnCCl{`Un>3Lv@H zf&&*rp-X$Gw$l_q9kJMcQAZ%$ZDaJ-*?BF{fAOC`e-^cpL)7CFTr{>D*3h_3Ov;}D zWG_KZVOIKmCdA%LcbwS!P0SBamkPH`?w5-qncYn1Cm;~rdWpX2p9l9pSbFN`o%n%2 zkDFsh>D&I$pZkkGFX+3vozBt_fawPSK6IPf?bK4DEEboubqhKOIzIu19QH-wIJh2V zkLJz1R#87I^VA%Niz4h$082msu%LY+ILj?d>-we^`Pk3$(^J9fLI@z(P{9HRJn%+e kR|u*zzE&}0fR(8DS&(}1qN{izW@LL literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..116eef97e8879fe62985114ed51ef698ed1689b7 GIT binary patch literal 1260 zcmVse{IBs-?(ig$#I@)=PYWU5ioy`2`~rgX)SK||F0FcZQEpb zD?I~Ms)G(X$6BfXPkWElB=ztAgN!l8DUgw|fKot6IKtroj%P{`gajc$FeG$f5Coxf z&BJaH!VrR>6es|oxs3oo3jk`g04)jv0DyY2TsNVhLAe-EBLiGf5a1S(;g=$Ve~NO8 zb99HeHM0<|9#B$15YBKo9Ipv|eFp;IjTb-wyy1AkQwCv(4Ls$T!%`sdP8lrqMj-0F zgK|!sd$Z4ZfNx{0v8wkjL2cW%Gm`WqHLbC2+qP}n_B@rUwr$(CZF{PF@sqlqH*fkl z=Iu|r7193*0E_=E{GK;~Tb3-IEKMM!WmV_m zTyd0_E%Al1b7*mkE4=P`>%)8J0e1vUy&Vysoo(iJk8-K2{ zStvU6#BMdS^$f3&Id(F`$cmjo24r?Q^;sZ>yos2}D%yh_#ujTJeLCTS>fIh%3xg@0 zz{ff^-SRJE7irKDgnSEsivpBT_Qicn%)EY#a?%$|qVUC;K#bhf$>&{yqk)HA2%&cf z_$$z!Li-P*0GAmM{dUeA;Q+9B_Qo)EKSRwWzv>5o-ZEDL_v=KVJ(mU1F>%|hPIUnC zQEsk_!K}2-iSU{(3a}u82@#c;JM+hbRk)cHp!X8^Mi^k=unI)fAAUcg*{?`5ml)?u+sx4APV5j0kd{16GN?fP z!6}+>6cqsYy=qU0kqI$#iguFKw>2*wT-&o}&z_48!U6!lKHN=U!hI%<1s4Y6I&B({+9Ov{0gxLH>j_MgHIV=DM9zZnW0~0zCIIUq3YYVfo*7VRZo8SC zuL7)&QZM_#gcN(C19> zRD7Zj4FCCRd^Jg03INaCbHih)2x7pp%X^jvV{rW|PpEjm)wD8>1L0lJ1` z_Ix~_41p%l9m8h0`Rk=<0KoEl35pth^wxeLxqCqQ-8@FKpZ@>=`Sm0EiAfmD%7cp*Or6@>C&M_F W7B^2_XeWWi{}%sS{BQC9e_I0oxKv&M literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..c25ca7c2d0ec8c688010618f90820e8378357546 GIT binary patch literal 2604 zcmV+{3e)vcNk&E_3IG6CMM6+kP&iB%3IG5vU%(d-)rNw$ZJ2~V?(PzZhzS6^POPEK z_)xlSYlb8}if!ArZQJ(Pwr$(C?bpeS$cP^Owrwk7tS`r`H4*)H;5L#Xxt8H>Y2Xdi zWo>WUMqhSUJL!>&3JbpU{?qq=b0kGVBro7gg0bL2S7}U_q05)zq8MW_vNwvUjgSRN zvT0j!uz9%lwQbwRvu)e9ZQHi(_jPUCwzbzjAn9OH zn6#k)X_Zj~v#Kgm^S-hLqC>OUm%7i*p4*|*=bz=*afg&=CV6C)A)=4uQ-`M$pYF!{ z_y@DG8r!f3`+o2Lk5%f|-sh(iuMUXFR9UhJ+_f+i)9^Z`V>f~XhnRM>y%~7&1TDPS zTgB5!PoH7~`xIF4d9F1I9(CXr0yp#Z%hg+je}Bov&=U7QEevQ{p(Z*kl@3ThM|m<4 zQxOR(aS7X*OB@Q*WTfko*?gZ6RdN5rycnXVhq1%|8YOqhGS|$-?U<;FHFtp^64SAi z+55V&Q0L4CVg}IyVd5*r89mp-=gilNW23re?*FE&i0f)ZPe=ae<#MddnX&5WNTMvR zb3EO{d|h(PEU%eyuc0aypW#Dhm*)hy!inI&W8Ce+nkxr{RW?)zk&_z6T8*C~kbL5P~5=spG!74o6j z&C2r$J0-y0Pnq=D-QmoN6Q|;VJy!DM75x@fyuvA@XRahye^E9 z3B@$#G94&cfHPMj$Y>RdS#wIL*)6rTqfd|-aWFle8L49Rm-ExS^ zstlg@!!!lXbrX(?+UD58Dos%Aw$9npFkBaV(&d@ez&aW#7u1krF6(qbvs3VxqasWf zL0WCh1JOsa9K$>>VL)RBqj0NVha=0o7K|P<=Pfdvwm>S|yx-~ORJuH(*d=@Qp#s;;5l7E@{yb%B-e&|)NA0Uxi!~aupDrZcC zXj*-hI9K>BWJuNJlBsygq^QpT0ekubEk7f*X-;&SW}E{6vE?9B?A}g5ZsEu5au196-|*yJV^j_tSucts7TrA@#m4NKpL*uqT@f zv0M%Sti1{ar+dyXfUM~z1^!_0Ucj<*kmo%Lib(*Q14N2;AY{xd8ngac0JBaJ35mCm zduJ=d4qyG)fJ{y}fBuOfaxryGF!3wR$`kJ(=52iws^~=ZS&J>~8Tf+;xeRUB(75=7 zfz+I)x?2#l##k=j=-<a<8{2A-X(kR`zjODV-@k7G9nE&-V{3m-2gC(%B0~Zy zLa+@EZ8m|BHSR>_T_p-0CB$syfWB`6q5_oSS2T<&+nhUxx0Z@5q~b8d8Tk9p|q`Al;4gpS-KTfoPVYg2>JUqhYXT z3KSscMkK7}0x>(2l(_FItd!qcY0EQr0UoqqZk?<`>K8Si09vL1UQsuVd6E4()z9PJ zqVS5TM4j{C9TIo>m>Z0^h1t{>Er84Kk@|Hrt8bps9sN3B9y+>J(KVBH{J^aew)Ot3 z;6(gOzq5!NY39!`gmt_2z9%r99c!RK*M26`ufAs*R@rU9%b|Z-C0U|ZY@CpcB~dK% zYM&c#59?C^N^&4_F;TK4!3$`<2fbzL0Fa<=&XpY(D64B;dBvL$`PCKGCUkpeR)RVN z8L(g_a?>`hLCjVmIOJg?zkJ;~#wt|mN`S^7Gz+z!couah^-m zw-Uk2GwNnB40OQ!tR1hFO6&-wTS?%1deqetnHjEw1$eZ6C3Z5!`U1Rn)`y0u8@E3N zOK@wvbRem9nMv}CUAn>!CKJ4c3 z{@R0KjeAzT_7_*nF6?#A?82yV|Ne-z{?hj_vzV+VM>}9wJ&2vV(9U&00JBmOU#L_b znFo`txr+~mSEHRHpfeNy!gg{2KKI9L&!1_$X#H!Yw@d6=yU}jBD2@-T^l{_)R(@s-;8< O?Axh42KMd5rx5_+;|urz literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..8093dee2acc04264f06f7c4c502af0306b8b9fa5 GIT binary patch literal 1570 zcmV+-2Hp8mNk&E*1^@t8MM6+kP&iBu1^@srkH8}kwT9ZZZ5a9g$6K;Tgxa(X7(Az* z!ArEHrMUbU7RZ)uyKS43-ix|K5m)~5l)n`?xOr+<4c0J_A*Ary#1In!$F{X&&u`nd zZCgXI|0FB_VKEkMND+}6My1^tZw!vlmG-ZQ zlty?dW=MNwd zkWx-;=44=1lVU{$R60*NF`Co*3QSQOMa?*c#3~^*ET*-y5xv>xCKy;winpLT<~U`9Y)SwwSM)&N&T88)F^uLOYU@Z zZPq^gYGFh~HpBbti`&LKxtuj087an3`#bBLnAGwrBga3lP65&%Smfc3&ZO~OQk6{v z;s=hEkIZx;i3bR_ez|w~#!G_@q8Y$n{1^2yK(~h`Yo(f4?x-_n=N8*a;JFOs#=_1m zUoIh z&Gv4|T4fc5J*Gc(V2#XPKdgDVYt(%vqj!x(gKb}Oh%ApcR8&d|5K(_bjbIAOn?DBZ z`?9G>y`{1`gxlMIPv9Vo>wDIqfGAiz zRk`xR3qqm3CXpeA^M>qr6yQ)`o}^lQ zn;8dgJ%9bCq2U7)8zM^CRr^0PfPS=ANf$c&nH+T)BI-k@tpM%xsS=*_jvRMQlW8-8 z!O8JF#MHeu;6sWU(!@#v?PjCfZ4%Q6D-o6Ym0haZyi2 z+5=FP8Y`I$FQjSYt&9SjqDa~S^;bcAkK{kAP<$ICC5cy|4l3xr0I%bnz}?0YuVzdo z@FPQo@HgO70MJbh3XHv2R+jG5Ao}v>d?fIASOx7fAi6LfQOfauCGd=ph*-s4-?nv| zeN|BcOC}`4`{* zbq3;KH{d99f0`(gl-Xr=HQZYh5wWn0lm-_g{y!R261@K!AfmYm_UFDAsJ zI#_VU!wX(+zDG=mQqI(ipRJ4&G~Aw_0-`i#E%erdK;8G796O25w zQu0;u)DImF|jm2v4Ppqkl)!^@U zf?$8WXc{sIKPzOEwE@cT(NACeRNwDXL$^JUhu13eNI)1b`?P$0VF9CT4Id*3g$730 z&(Znk-S7X`cJL~;)q@6B3o&F+KzRq1(@RS9R=^JzkU<2&zN!cH1ZDvHke%-Fgny^b Ut4bqPL5iNi7*(ag%AkC&6v{^dYybcN literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..f032fca267cfaaf1ab51f5a67e8d53751fbf97a4 GIT binary patch literal 1876 zcmV-a2dnr}Nk&FY2LJ$9MM6+kP&iCK2LJ#sL%~oG^-z$uJ(1kx{zu6r_5$H#>}h?! zW-Bq?0%!kL%b*VSAK3Dkg1@(`#>^ZT$Gv7|hOyhsY=^Ux!kq{O000pG|NsC0|NsC0 z|K9{i=Ksw9ng28YXa3LppZP!Yf9C(p|7m!H4Mw&ln*f~BP$XX1=(X@E4dU_7##k@H zdrc+)9Q5|?54u7(cq^kozza7YhX7{DeT@u&6iiw7KH8ub)J z5;gQjo}#p@5t{L=PH|7QWcm(PTC&C1(>}h{c@qyPvLcNXqyd$?_|jxIQbSF2EL7S7 zI7-AT{*zyA3JlQ%pj4xVk1q8S=dgMSG{vZq(|F;D;uG0C^2Qb$Rf_}fu<0q)TeHY} z8`0vi_jSUq2L!QAok~(g!-sc`jW^7p0l6mg(KAfYS(%ztVbP{BacjzrXa%VP)&tV+ zw1;Q)LV!3@M-F!IlZt>JAH34EMm(b+h1~;U@kswdGyTXZO4+5!jZh^1NMuu&evCr8 z%foC1MqH9znRK1==1siSL6kPfiQt+Xx7OBToy={drf#m#FTlb7lSkkKd?= z&QwqpVo-XUCnUkUwJj*5{o~`(nd%d&w<4n;r=GGQF(d3IYjt3VjKDNLyWOd7v{m1A zrj{Eq5Pp4334Kx&aN<;ua2Pfs5>c2C?6^}!HQ{=d zU;xSR8e=f{l{5Tc&eEnNA_BPoP4p!^6;8CE#Tt1&RkT}GtjolFpESPH2EMBd0;Yb#OPn^O$YKgRUZRM z1lDtSimZ+&6M&(DHw~yAh*{q!LPsJy>H&etY90<|c|ww3X-I(@*V-p8uR4;kP$zli zIX^}cm?@2k2ih2V+}H7YjE=G!H3ian?q%cWqOk?D?}Kq~_Q*Sc zUt$$^B&hc9b+z{hkMw;Q1&Lc0E)IuP_mC^%YVyG3!-;~0BMTo^f5URvjfJOLW%mQl zi;{J36K?__ad!hpTkzYIJLrW#M3YC|!#*sW!_t|o{3@+#=%~(vSA?C%$Zy)>oyy(` z%iMDSpE2-sbyUyXc z|MzR$HxR=_RZH9*$0Qn&M~M_;<4|OJu!?*9$HkYim-_9WYveQGk9K9_$&{1r#VXjP4h^N$Hx}xA=*|=}=uKVXn(?c^M1i>S2p1&O@y3X>+?7j1L;!vk zT}@Al=gTJmiZ|ORxaq1i<0i2T5s^`laKKK}hvxh*g_)deMt$L?FcT341n?OqA{IWf z!FqCZw&itb@k&}~E1V2GkYOB#isY?G@fc2$D6#ZpO)j3vSSa}6Iv$=8Z{bCR5`#rV zUWW!1jFvy2Q@FtU3TiQ0ggXJ~1%Q}dNF!o1d0PwC>iN4HA|epOW57%aoM&W4i5G6+ z{%Akm@X_sdm)={w@z!#Lkzz#gBCy1_q|k8=l?oC=q;m)EyA~bY-|cqq;qf8TtW*_N z>Mn#lbmDFfjQZoDL0n}aLCBKAz`);@2UIPY`WrV5pOqOHxM=a7OXmN~|C#?Y|7ZTs O{Ga(h^MB_5tkwWnsg*_m literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..5827cff0254bbc637d49f0f9ecda1b65ef71c25c GIT binary patch literal 4088 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..9ebefaf11e7fd543e9e7b6d6c26dea3808b5b251 GIT binary patch literal 2146 zcmV-o2%Yy*Nk&Fm2mk_4`uaAn*Txxdy-d%iP3@DG2(MCZ>qV9m03|aOOf*3+Q}61f1KpO+DlJ z`@Yz=ZQFL8&a7doWHepfpD_P?{vkltC%p$}hvx|1?9s=^G zGjk*rnSH0KdQ>_TfL^^^ma6Kzm?I%!eyLh`S%dLVsJbCzA!A~9dMGt0mj?&4eiNgT zY#yuXkp|{c=P*vQM8sI!hI&DRvv4ro2W3VhnNLzZgvUW=Fv+uqNOZ&Mkp^hF9F4_9 z!lZErf#P6t0hI`a6el+BO&tmn9e;M+V?zOSGYRy3m@IY5_v0Ec6uxGvVVD3=fux)J<*YN)k{GBEzMV{)R*i)gUTdIvIaWRRpAl#vnReI+?{u zz5|^?rju2SGzi$K=*I*MH2*gWm#6;wT`@-|u$)ZuUVDi9U|*RQa7)jfJWakhdHPqa zU9VOZzfUd>@{4&jp0xeq!|=$c2g1C5 zRXuprA9>pk$)zuuKu$a4uPu~IZQ_8NfdX(qYGS6w-TIFl*7rkAD}lNv0H?i$d`adr z>cmOD{|w;ADrRoD6PKu@sH&1=3)?@kkP)W+OCYbjkiTE@S)x+DN)aEopX*-PRLVQ? z?z{j-l<$#1Y}q?Y~eeXl-2u%8Z~s&!p6cacV2vsy&)I0@N8jivXZRfz8LA&B2m zh*BE1$K>xMhP`~FzVnS@9Otqe8~UYE#i|(_VxXK31i_X;d?;0oE4o&26lCbUUIcgG zvl%&^#>WD5H6w`jCX5%QG%;vvFJFgLVb16HIt)ScM(C0^L6CKPAb?V;-ktw8HP{bu z#I}Yow*&~PNfKl=3N1n?RiYMDXQ?GPn@6>Dz}%21h#mtkCJ3QaF%Bz{$~yOm;osgo zp4jgoEA&F!|M92KL=@}Lt^y_?0B360)FP%a~Bo`vG zC&RCPg=p{>X{=qZC{$dcA)?PT9i%LDkivDcjfzcfh7RF>?uKJk&P11 zbj+b}=-$OfqtUn`f;`9doCQn>){F#f9mVrGM8WVGOa|!k zgs|QwAf`;beSk6^;VQR@rL3-6ju)$ag@UE|;_U)xmJ{GMC5~8By*8oHRbw2?+~%AL zC@VGbmP2>nF$2wSmX4B(QkrvQPTv*{%3kNbJ!+$HSVQFeyIwJ%uB+zAF$AKwhSl&1 zY&cKeP4B}< zVBW0?5UlR=LqvQYN(Eo{M0DT6L*$E2Bw!VnTBR@*Rz@kXtU#FYGOtU{BtZPT-JWRC z>-kkguLoFS|tynd&i9rRWTxWf3TuN=+x85E9G=+E$=Cb5MA?z|9>MqE*VlS z)@RFqdLmq<)GGL$hXJzM?_a%CIV{Hcl^K58YUO!6lN^ZX_@wE;X<6G2eEoWC@A}z8 zn)(06+qrH7!7nrpM6J00g6&7X?$7#ET|-1x{x#29j3}J!snx}9&(tuLvrM}^Q^VB# z$Rg;U{`+H1P6|6HFM}x0h02ugWL%)400lHUp6(-5Mn8{2FHjNy4!VGmI}H>E<2zUs zV1xijXxFpRK$$^*p)L~%=+whP2kPbUIOqhPRKp0m6f6}mgzfaCJcq}54#QhG?4g;A z0Ejm*hE=zyRj&?>MLC8?H9MHRi6o$a-VRQKktsNN5f+QX1p2ev9rRiXETEwcbJ)Xk zu=w7=`4A3=b6NM6p55F-yAl$hiv0~-;N739XP}E<)b_XDJbdnM_5~cPX~dgJR43n(Hm3M@?l16aZpUYSo8)M*+l4WCE&JQpZm+5mMqvdx9@%^8ex*a;tE@1gU#_CjU;_ySwCf!l;Q`-G=DW%K190w z?tg~a`abv9|Ngw!mv5>l#-vSB)fSf$I>+NtbNqNbF3L;MR!NMhn@LQds@1B^`PHgw YQWP`3f@UHT15iZF`082!^7mZ?0JF(0;{X5v literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..9bb953daf0201637b460ab0bcf7e7c17508f10bb GIT binary patch literal 2706 zcmai$XEz%P1AvLt9;r}!*Q{DmqhdCQ+9i=9c0<)xw?SIFW=U-lBQEZ(JtIbGj4qq1 zDyh*n#^q{Jd))hedq2GAyyrY0p7Z>I=Z=M$SsFV7gOjO=9nwz6>hZs>+DLr>Ld-qC z2rd#`J$IUv-3MTZ2S5!ZQrBfTu+ z{bh-%peg$ywOhzM(i``2uwv6n?EAVf-u7@3n-`bJ1Y`Sv8Wa7s3`rcb%r3q>%q57O zyesxD(Mc-+sIlKGIWb!;`8pnTP1Fp)#O)O8A_VD4&&g#h4-o)ub3z#7JS2E+n@gRI zbC2y*pRC$2GN?v10Fi{`sax(LzZNIqIOYU#{wU?JJ&ADsYhGjy1_ZTo8Fi7Drtd!q z{BuY9Vmbx~f18wz&sNypcOR2g2~EXci9?WpJZA0qzmCh20blvVS!5!<@RxQ(?$Rf; z4=GT8n(J3><9d5;a$;EKi?u6?y5h+E!Re}7P&LK%YzuWw+xVh!*d4{$s!bXe${#mO zr8b{LKZsML)TDgDdE#tMw2G#z2wVLINN zednBIyi$_|32h#71{_g9KR{QqC7sMc|jqw4m(p5shjcV!QW$`YlV+A(g>Z~gty#@4e4mxVr^m{JQ zADAQm-tt&gO~d81Sn6f$fWAAkef$Ah9Xw#=-dHq001L+RE{^8Vi)&3$+$C6-OgHSB z2ciT#!s3ju|;(i;a9N z^2C`<=J8Ew7?U5%soZc~MFwlozNb$69*>Z6@6R(X_^ZYaun5XBByLXZ4d7CW;LYi_s#dMA8T@co*Xz^U z%9>N$I9fuGG0c}~iF>A#O%~R-<-8jMJiiSeL{kjcnOXRA`E zXG4o2Mdi;Hd?aB2IRt$1Q6{C?l20UUd!0<6DBrH1NbqfrM{+?Cjg2KC?=rfs&O?5U zvU5+|;++&w{*Lu?n&c^Rs+G)q*!D=@Q1%6(V8JAEq{*6R3XwvB80LzZRSpt{>asNz zO6>_&^=MG&_)?6v5Rf2yh3%zOfmMUI8rbW+*+I zO%xKo7-8Met1F6a+dm4uFPm~8WY(`W7M#?`V?v*09U8!o+u`&~vB$KOBrZh`>`w{P zu-cyQvlj{{Ij-pb?)lo=eYZ2n-o1do9ZbzCrqYIEmZJ4kPsIAWDxc^gP_-4PTf2D+ z&k|{AF+wWq<>O4|4=q+u@5fv%0tBZosS-ia!!Z>KHMVQj?{_54>z=J^sCy6-Yc*L( zy>rBty&bOh}UdM3(GpVM&r`;Z{90xTq1b#mPNQ^u4Cg0^(GZX%i?MJ)@<3! zei?NorFtdQ;rlB2Z1!5Kzgb&S!aa#syB>&wtvev<6}x0wTn>7ZRrcsQd}BAJS~q1O zNUgOtOE;H-$%C4xVQ!#5J$O@6$*N=wHE2o3~<~I&Ncl zY_zCjp+eQ)d7`8L{4)0%r!LU|-!RM_VLoW(;+QP>efS(b%KGV9gmArdTE5@R&8mor z&ilL4=^x6*j2|q0_ybYkmEbfZxE65Ozg4${#Quc)@oz?h5HCFClif<L_ z`rxBAH|E%Wxq&hvo2_qK)yo5-gF_x#vl7_uWc?+PGIi4qVZF=>SgYsef^7=CM&DA7 zS=vi(@Rcx7T@1~q2&w(h@Px<7ZKI~MM?_g5Rp8+Sk4FH@{IO#?#g0AG#qj#GxxWuj zZ(f~u=ppUqK2V0nJV#-%DBY8U%mQPl*p_Z>hd#YG+OQtj;;6yY^_2v@Qz^;zN`~R6 z)CA3(sGjntMuX)7kBiBzXTD_8JK|wu&e^~iK>nX?_uI<7Sbfq$QF+ z^$T62H5R6ZgbFgCArZ9>gzb>1u~jIMM^maq#$62rHFfoaM}`C%b;qT$)luL;+MZHz z5+MQGwzI9SwM$nft7cn4lg{?BZQHhO+qP}nwohl5(I<;-8%vU$)K#_PcxD%i>6-U_ zQ~3Y?lodUcx%SPrZQHhO+qP}nUAyU4PiOC(-}(Rl^O^^+v%0U$$>!wAHSN^CI(xEf zz5DNEYx1c!qW=!uws9o-dfkRiX765L|2c&KH;{nT0e9VSoFKAJzvNTI3GAXGaNZ}@ zW)}sHp5J?{%>^hC3a%uftb<%s^xysOqR+qd=I{0FtVtR;iLHsO3WwnW+!N10+wpn) z0Dr*$a1C}~77JL!z+?8^DEie;zFPhM-Ou~&?`=&aPGBue;@BiUksrh!w869RA^ZlH zFUsZDw`jU+Ak|{I-Y^A;|i{Zhd7VLaq)8;vufMpYJB_acmMZ6bG^-dOOZsj{r(^o z&Bc$gQ(I#(rxG#KmfnB!F!&VFTzT_)6CDo2qwsB&VV+)%R>@;3@jt(7tMb6C-qArG z-igb!zPv1$N0^6CLqZQ`GwfU`H&kh+MHLypV)R{bQX8VKRGYtV*r**I`XU9;|Q-m5HtB@F{Y8$4wMf z&e3VvV4zIwFMnI~t+kaeIyP56U@axe4Pt z{tu|w2$vfLHfn*b>M&;_tJ1~}qOz|er8Rc&AvbBXIdbGWMCD#45pJ#-CQhYol$3cK zJK|LLN5B)D9vW#f^xz}5|$e}BWBD_%@R+940D2iy}QzXJ2bVQb+$@Plf zQ+;SP7l8h#v$ag}|7;jVO=JgnpVbV`hrV>wu_Jnps3YgG)gb0oxi_`Ri3D%-Svy+| zmHW0ANGqKHtsrL{3kt6)Z3-MpoRa)=&a4QG=WJqb1PGN=PJmBqIV+;%%SjZ`;Qn5x z$9h_Fkm*T*3L-`El{#D1BtJ`QqM%fa1Jp+|Th^2v8Gx+hIitoeh>K-~=S%OlwUI+- zwy-HXDj1hIgB(31bqkB3FTDUwX;YHtVrf&RSCEu+&Pnh&b+)vrDqaU!6qQn!(<_`= z8yL^ALUAc3j)T?_7mEw8D(-fi66$gw`fY*m#sBH3U|cjDWk85yur&w_ijL}7{ z+UmsOO;7|uv9rYBI?k*QjLQw_Y>ZX*hMn63i5j zZ78w$2+$xX?pRDT-f{M6%uFq9ti%1h;tt0N8pC7i-GU&Bf`B2%3})12jMN;jggME$ zsN*g=L-|+?5H)$$yhRG<+mJd=SZhInaIgByqM8%u;}b;~`b&7M*LX*dDLUyNf9O12 z?8bB|dLw|b!ayKecJX2k$4Raor&qCf+QoS~Wecb5c{8*`F)%Jex?j>Q;?)&hWf8Su zop~%r5hHDr=$azntSW2-SrQfAGJ+gmqjW3;ukA|F!`amfW268)Uwi;+Cn;D-G7*$2 zk{<`fa+xRq{$YnK+&msj#f(#Njns!?$1NdXVI^iNBrw?CQ5JSPjSCf`aTkrF zQ?Y5U#wWc6?bERE{-;r4*v}9o?;UtBwOF>C`L~V(=s! zU4na12%tfCsbJkq3efjouC={psx-Iqw=n3LybxFOZ5-$f*W+)(NeG zCdg)gGpR!1A2y=_DIgq!Oin`$H0WzxpxYHyJWB%ZQY4H^*4@TkePQ&896aQXoJMCz z=>FE=JR7TdiX`STqzBd&MWl~qZZs9w7*2qatk=Azl)M-#RdPA4(sPyt03M(~%c*!J z_GFryhG$Qz=^(>U(W1lI6&RuQw2hSZW|Q8-#>{*%q(j|2aX(%l+__}7jq3UU1XSoC zmCh6ZeR2e$)gX&T4lJ?zpN(zI5?d!rIgZ&asGWya+<%SeM`h1}3J_g@bi6=Usr(b) z9cWKZAq+GwxPdI&QJW+0$Py68yR1jo1)LrE>MkuPWWb(x?wufF6 zJ)a9Gi4nhTMbyW76_C|4k?1!Sn6#ikT<%)&$ibGF;>0tvNUHGs-40c+M|xOhaa=|P zl8icV7TYJa5ilxjb18;3FmJt{We_%MAt`d@Ug~lg>3XFZTtjEu8>l}=!3UcrvlUSp z#<~3G8D}Y?+fef`etX4|rEB-qfeX042_aJ5PR^(RvdP#=2Vw?y3P<<-yC#zaNnQLAW<}bdxrv3^ggXG(WkrU>5(GL}f+~}N?erdW z+L(K$H&V@W84eksd}BAr)CEK4z?n&_YMiUT{3FNLCFV z%#rC#c7Dl_?0ZF(wm#BkTut>cZ)L0|^ATTAB`^`@k!0f!c9A%_b~{fW%gPRkODI2P zZ@ItH%#9qv4PC1z5@hH{&KV(3s@Tk^jP$V?jek;q&O!A5ZOaMX2oL@nT0)R$yJAb6 zx3^^SlsM_%2BVL9+$vV;hmRBarj90fyM_6_(~K&Fc}81n8nm8GP; zI~uN~54I4XTG&;lcbBW|{jfa_^d7Va^}VvcoX@!#{a>H@fkM^fw$sKwe~E~mQB zxKzK>at3N$fMf*NFVGK~=w^)~^k_gcJR1j7CdYUpFE0qP|K3o5fl~J^u|XYB@KtVd z#M8s0#VA&MPs%^8z<6cfDqdbNk0A3Df&e9_O+A2&fw!`ad-SkWi(>XTKw~`jfu7m@ zghYN6$Q*lSU3~z;n&Nnl#h4nN9Yv89s)Qx*fxY~Bq8OLhou2o866s^ndPAV^6hW6(*uz$OY#ZtU zC$)I8>zSlQG(bh$IfW91K>YhUtu-tF2NW~#S1xhH(*ylu$jvDJR>>ajkQm$EXamhR z*YFvh6TZ-AoxUJ5-KLT1`cjBL63++(~cgwdx>=Z2d;i zKBv1N4g(gb0azS5Uk@)e+t1FmWzIk6T>a>R6r93qC%YDp=F_6Bgctrb2YXl6!Iyey zvy%7yVLl`BTSK2)YNvi9pkRDMm0qy^cLsrQ>#xY}#(j~d$!C!YxqT^tI3C4)=5>0g z>C_j367&$LoG2NplwYUepNB-0eQXQbz@o0tG%fCoHoc$KFqg!bO}lUnf{)rsQ~)4d zf&u)*@uhDag&?ISahU&EXr~o;YFQ3-8wr z^hPwX)-NK@lfaAd|7AJNtsRm#EW!rwQ-uc*9xl{Mp#msE2+U5Q^ukADKl{r+o#_bg z@1)8XZSw_%j~#1gPC`jVftNk`&D~2gmGOu}r?eIV&(HpT2bAyQ;598f%Q_(_5^yUB zrw+QtPEOvFKQ!dl+8f)pTtDA)z~JR~dbF-__m<3SJPJJ45-w15u+~^-WAP0xzE!K3KI% zDTirhtL)8rGjG#d&=kBOC^H-Z$Aa~}Y+Qn!>9uK|YeCaiBW22cvOxIRpQ+@=k;WC_ zE@&DT;#%MOAjAINi^fnrM!MVVY&Al)oLSv0*1v7ndCogVcr$o5AVNCnE1b0faVz2K zpfS_wW-pyn2-)wh@YXglE(u#huEAI5q=`^ETMz(I(kN+IOr65YkH2+*Kv!-Nzw(@P8Ihpf63lsT+7xyO+omp9pEvO}qCD_~YFuz}D zol7bM_B01ldf}g1(T+uU56t|AY3ij-F>1rO@(t41{o}ig*j*Cg~?Y z9$)MBl->g9^Wf@Lf%L~Z(o;bA|FX%|;Mv#dDZPbIjfcbCL9*Q{G|U$rJ7W(Y8nco1 zt6iv35O4(v>BSRkNalyTYx-9=Ivg!(*u1_1JiUK{#Mlz{EBhzhtBdAPm!o311Z+Au zyA`eza|>|K+yhEIW9ID_DN>*WEz!JA5uUG1Z{STbZ(nB+5op`RakvdI(Lns0g6tQw zr?(P*Y&5<*yE)R^?o!o&v3A(sY$g6xK;g{2*%d5r+w~7?p`M7Y2GHi?iv)MOeb!>; zY_GDVTV353_+!)0f0rv|DjBh72>C3xI%h5BEqW`VY^(cc145>ZoN@AJ$_As^^rG)> zcl^&))s&YLdy}74-2TOMHqv*XZr;0ifv>;4pP2DNV=PQE-@jhJATD}^-RWN*ggNUs z1;X>me=yUX?PCctuirFUr^pj>fg1O+WfxSf#)-Rrotn83BJfP+;fLwFuhW58pEO#P zf`j_ysd>?NQ*`=3sDNj#A;SK#6z#ef>Tt*?clJo8sPq!iZX)~GTV)-4EBnN)mp96u zpzU2Bx+!XFsQBA77A&3!f44^U-NWl1XbX)pn$4z<4?w2KH^stTqKeJH`eEk5Mw2_B zt{%Z>)*h?F5DD0G?Hq`8%Cx^hw5=9~CmCBU_qL>HAlB!#XTY?VYK#O017imw0AHs} zJAH(A5-5N;Lz8ja4>KP&`@3tv2OTi7QSn1AEeyy(0|xLvf%w~gDk-yDwCBJ#Fv!1c*@A~*QMW#&K{e%}1R2egBS2fJM`sm(W9$)ubi#i#` z`bzC?W%k?|K*DEa%KT5+($Mz|xL}?i3Z=X2Q%U_>NEmdUXO*tuzMMO9#-IT7{^{a@ zkee;`Pl(nD0;35SJ)olk7il1i1!%#iHh_3ArKl9W-8X$xWG99a zFpuY8n7+L^VBJ5x8`P$tUFdrlOa)572zd+yQ2i9WGfH?Qa_Yh`J}Z$E9`B4<_b-7s zCM;m>JeeUEV?sW6ARJSD9?-e%#GBuuK@D-RJfk0Y3feCG4s*00Ix65`LVpTb$CPCT{4$fVlTe1g#P zyIa>?|55t(gv`aPMS_)2{{C1@*_UyD6<((={^6h3u6uiTe(}^)yG-$48X#nM1RDMf z0T6P2b_;ahU2inoohMw+TEa<{lspzw`^s|-lfJ&YV57y_?E`&#b`BvoP0$WU-9)o8 zLFO%*PmcqL2I7<~*5B;RN}m_LO13ZuRScw5%3natSYB;XY5jU<&PK}=Lsq9iJPaP6 z@>l9G)dGyY8iYaAA&?s4RnGRH-F4|}EwNsL$*StBzoDWcCWK#|gyYulf4M#QRqk44 zZtspyYCSOOugtYr00#Q$&Gq2n?iOg5lv2#AoXuW)bM_9TZwsHrO3^OCgxFPm-_P^) zeZN{=O+v~3kF#%ndbip8W6DfwF3><8J`ApJrbld{w=&xTkYyWCBJU9542aVd-FMyf z`tnugMvJYXdvo_UWR3~fgvY|WR`z%HpI9nZNR|Kc^}E_rOL%JwS2IVaf4w#IXRop@ z*K5~JQR`D6&Ikj6MDK%gInH01aN%g=plkMSuIJ}hkgx{o)OCrJM2bn7Q%Qf6`LcMU z`P;T{+rRC2clPl8<8M}%w`&qEiBq6}=wF@BuWx$ImPYTCvQmV7Ad%NqA_O1shaggd zXo!V)z%MUT<_+^_CAVO#-Toy|mw?}$J&;=MX&S0bo#+Ey#;kIc0F@7(N8uFwIuLv@ z9~?hiogG4g3nYnC61ODW{^8lx!|`B#@z`lh!=ssBA&j2h3W)BqUGZ7#zB%nZb!v~- z7bo+p(jRw(8 zr_ass{)o@maM2#sH8mZ^ItWckBVCS0?aE>?^nIoY-ybd(mG)?~)M(Y39%DgLO=~h9 ikGtJ&T@&4IcRU^^YHuN}b(K^*Z8#(X5?Vh))@%Sr3rxxY literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..927922e --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #1E1E1E + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 35c022d..f56d82f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Say It Again + Sia \ No newline at end of file From 6406b05d3d470e62d6ee6f87dc79faa7f1c27dd0 Mon Sep 17 00:00:00 2001 From: Marcello Date: Fri, 3 Apr 2026 10:04:15 +0200 Subject: [PATCH 11/11] Implement Android SplashScreen and update app theme - Add `androidx.core:core-splashscreen` dependency (version 1.2.0). - Create `sia_icon.xml` vector drawable for the splash screen icon. - Define `Theme.Sia.Start` in `themes.xml` using `Theme.SplashScreen` with a new background color. - Update `MainActivity` to call `installSplashScreen()` before `onCreate`. - Rename base theme from `Theme.SayItAgain` to `Theme.Sia`. - Update `AndroidManifest.xml` to use the splash screen theme for the application and main activity. - Remove legacy `mvp_icon.png`. --- app/build.gradle.kts | 3 +++ app/src/main/AndroidManifest.xml | 4 ++-- .../java/eu/project/sayitagain/MainActivity.kt | 2 ++ app/src/main/res/drawable/sia_icon.xml | 12 ++++++++++++ app/src/main/res/mipmap-hdpi/mvp_icon.png | Bin 7193 -> 0 bytes app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/themes.xml | 13 ++++++++++++- gradle/libs.versions.toml | 2 ++ 8 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/sia_icon.xml delete mode 100644 app/src/main/res/mipmap-hdpi/mvp_icon.png diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 911a657..af91f3a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -67,6 +67,9 @@ dependencies { implementation(libs.hilt.android) ksp(libs.hilt.android.compiler) +// Splash screen + implementation(libs.androidx.core.splashscreen) + implementation(project(":common")) implementation(project(":scaffold")) implementation(project(":localData")) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9881b55..dcca169 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,12 +15,12 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.SayItAgain" + android:theme="@style/Theme.Sia.Start" tools:targetApi="31"> + android:theme="@style/Theme.Sia.Start"> diff --git a/app/src/main/java/eu/project/sayitagain/MainActivity.kt b/app/src/main/java/eu/project/sayitagain/MainActivity.kt index 6afa7f6..afa1c66 100644 --- a/app/src/main/java/eu/project/sayitagain/MainActivity.kt +++ b/app/src/main/java/eu/project/sayitagain/MainActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle @@ -53,6 +54,7 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + installSplashScreen() enableEdgeToEdge() setContent { diff --git a/app/src/main/res/drawable/sia_icon.xml b/app/src/main/res/drawable/sia_icon.xml new file mode 100644 index 0000000..31e00db --- /dev/null +++ b/app/src/main/res/drawable/sia_icon.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/mvp_icon.png b/app/src/main/res/mipmap-hdpi/mvp_icon.png deleted file mode 100644 index b3bafd5a874db334f2493c3e71617dc8ac7c9604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7193 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 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..edcaa6a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,5 @@ #FF018786 #FF000000 #FFFFFFFF + #FF1E1E1E \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index eb443aa..6533238 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,15 @@ - \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ae14ba2..dfc26b2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] converterGsonVersion = "3.0.0" +coreSplashscreenVersion = "1.2.0" hiltNavigationComposeVersion = "1.2.0" activityComposeVersion = "1.10.1" composeBom = "2026.03.00" @@ -36,6 +37,7 @@ ksp = "2.2.21-2.0.4" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityComposeVersion" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" } +androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreenVersion" } androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espressoCore" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationComposeVersion" } androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junitVersion" }