diff --git a/app/src/main/java/de/pawcode/cardstore/navigation/Navigation.kt b/app/src/main/java/de/pawcode/cardstore/navigation/Navigation.kt index 5e4a6c6..eac5f44 100644 --- a/app/src/main/java/de/pawcode/cardstore/navigation/Navigation.kt +++ b/app/src/main/java/de/pawcode/cardstore/navigation/Navigation.kt @@ -55,6 +55,7 @@ fun Navigation(modifier: Modifier = Modifier) { snackbar = { snackbarData -> Snackbar( snackbarData = snackbarData, + shape = MaterialTheme.shapes.medium, containerColor = MaterialTheme.colorScheme.inverseSurface, contentColor = MaterialTheme.colorScheme.inverseOnSurface, actionColor = MaterialTheme.colorScheme.inversePrimary, diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/AddCardComponent.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/AddCardComponent.kt index 80723d4..3017a7b 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/AddCardComponent.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/AddCardComponent.kt @@ -29,6 +29,7 @@ fun AddCardComponent(hasCards: Boolean, onClick: () -> Unit) { modifier = Modifier.fillMaxWidth().aspectRatio(1.586f).clickable { onClick() }, colors = CardDefaults.outlinedCardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer), + shape = MaterialTheme.shapes.large, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/AppBar.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/AppBar.kt index 216a3d6..5208e57 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/AppBar.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/AppBar.kt @@ -2,6 +2,8 @@ package de.pawcode.cardstore.ui.components import androidx.compose.foundation.layout.RowScope import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.FilledIconButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -14,15 +16,21 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import de.pawcode.cardstore.R -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun AppBar( title: String, + subtitle: String? = null, onBack: (() -> Unit)? = null, actions: @Composable (RowScope.() -> Unit)? = null, ) { TopAppBar( title = { Text(text = title) }, + subtitle = { + if (subtitle != null) { + Text(text = subtitle) + } + }, navigationIcon = { if (onBack != null) { IconButton(onClick = { onBack() }) { @@ -39,6 +47,7 @@ fun AppBar( containerColor = MaterialTheme.colorScheme.primaryContainer, navigationIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer, titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer, + subtitleContentColor = MaterialTheme.colorScheme.onPrimaryContainer, actionIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer, ), ) @@ -55,9 +64,10 @@ fun PreviewAppBar() { fun PreviewAppBarActions() { AppBar( title = "Card Store", + subtitle = "My cool card", onBack = {}, actions = { - IconButton(onClick = {}) { + FilledIconButton(onClick = {}) { Icon( painterResource(R.drawable.sort_solid), contentDescription = stringResource(R.string.cards_sort), diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/CardComponent.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/CardComponent.kt index 6f695c8..03c6c97 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/CardComponent.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/CardComponent.kt @@ -44,6 +44,7 @@ fun CardComponent(card: CardEntity, onClick: () -> Unit, onLongPress: () -> Unit ), elevation = CardDefaults.cardElevation(defaultElevation = 8.dp), colors = CardDefaults.cardColors(containerColor = color), + shape = MaterialTheme.shapes.large, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/EditCardForm.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/EditCardForm.kt index 13d22cb..0cd7238 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/EditCardForm.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/EditCardForm.kt @@ -1,5 +1,6 @@ package de.pawcode.cardstore.ui.components +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -260,6 +261,7 @@ fun EditCardForm( val chipSelected = label.labelId == card.labels.find { it.labelId == label.labelId }?.labelId FilterChip( + modifier = Modifier.padding(bottom = 4.dp), selected = chipSelected, onClick = { onCardUpdate( @@ -275,13 +277,13 @@ fun EditCardForm( }, label = { Text( - modifier = Modifier.padding(vertical = 8.dp), + modifier = Modifier.padding(vertical = 10.dp), text = label.name, style = MaterialTheme.typography.bodyLarge, ) }, leadingIcon = { - if (chipSelected) { + AnimatedVisibility(visible = chipSelected) { Icon(painterResource(R.drawable.check_solid), contentDescription = null) } }, diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/LabelsListComponent.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/LabelsListComponent.kt index 44ed903..6c425b7 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/LabelsListComponent.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/LabelsListComponent.kt @@ -1,5 +1,6 @@ package de.pawcode.cardstore.ui.components +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -7,9 +8,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState -import androidx.compose.material3.FilledTonalIconButton +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.FilledIconButton import androidx.compose.material3.FilterChip import androidx.compose.material3.Icon +import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -24,6 +27,7 @@ import de.pawcode.cardstore.data.database.entities.EXAMPLE_LABEL import de.pawcode.cardstore.data.database.entities.EXAMPLE_LABEL_LIST import de.pawcode.cardstore.data.database.entities.LabelEntity +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun LabelsListComponent( labels: List, @@ -54,15 +58,16 @@ fun LabelsListComponent( FilterChip( selected = chipSelected, onClick = { onLabelClick(label) }, + shape = MaterialTheme.shapes.medium, label = { Text( - modifier = Modifier.padding(vertical = 8.dp), + modifier = Modifier.padding(vertical = 10.dp), text = label.name, style = MaterialTheme.typography.bodyLarge, ) }, leadingIcon = { - if (chipSelected) { + AnimatedVisibility(visible = chipSelected) { Icon(painterResource(R.drawable.check_solid), contentDescription = null) } }, @@ -71,14 +76,26 @@ fun LabelsListComponent( } } - FilledTonalIconButton(shape = MaterialTheme.shapes.small, onClick = { onEdit() }) { + FilledIconButton( + modifier = + Modifier.padding(start = 8.dp) + .size( + IconButtonDefaults.smallContainerSize(IconButtonDefaults.IconButtonWidthOption.Wide) + ), + shapes = + IconButtonDefaults.shapes( + shape = IconButtonDefaults.smallSquareShape, + pressedShape = IconButtonDefaults.smallPressedShape, + ), + onClick = { onEdit() }, + ) { Icon( painter = painterResource( if (labels.isNotEmpty()) R.drawable.edit_note_solid else R.drawable.add_solid ), contentDescription = stringResource(R.string.labels_edit), - modifier = Modifier.size(32.dp), + modifier = Modifier.size(IconButtonDefaults.smallIconSize), ) } } diff --git a/app/src/main/java/de/pawcode/cardstore/ui/components/SelectDropdownMenu.kt b/app/src/main/java/de/pawcode/cardstore/ui/components/SelectDropdownMenu.kt index 007b9a6..1a978e0 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/components/SelectDropdownMenu.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/components/SelectDropdownMenu.kt @@ -1,20 +1,30 @@ package de.pawcode.cardstore.ui.components import androidx.annotation.DrawableRes +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.DpOffset +import androidx.compose.ui.unit.dp import de.pawcode.cardstore.R import de.pawcode.cardstore.data.enums.SortAttribute @@ -24,6 +34,7 @@ data class DropdownOption>( val value: TValue, ) +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun > SelectDropdownMenu( @DrawableRes icon: Int, @@ -35,27 +46,54 @@ fun > SelectDropdownMenu( ) { var dropdownExpanded by remember { mutableStateOf(initiallyExpanded) } - IconButton(onClick = { dropdownExpanded = !dropdownExpanded }) { - Icon(painterResource(icon), contentDescription = title) - } - DropdownMenu(expanded = dropdownExpanded, onDismissRequest = { dropdownExpanded = false }) { - values.forEach { option -> - DropdownMenuItem( - text = { Text(text = option.title, maxLines = 1, overflow = TextOverflow.Ellipsis) }, - leadingIcon = { - Icon(painter = painterResource(option.icon), contentDescription = option.title) - }, - trailingIcon = { - if (value == option.value) { - Icon(painterResource(R.drawable.check_solid), contentDescription = null) - } - }, - onClick = { - onValueChange(option.value) - dropdownExpanded = false - }, + Box { + IconButton( + modifier = + Modifier.size( + IconButtonDefaults.smallContainerSize(IconButtonDefaults.IconButtonWidthOption.Wide) + ), + onClick = { dropdownExpanded = !dropdownExpanded }, + shapes = + IconButtonDefaults.shapes( + shape = IconButtonDefaults.smallRoundShape, + pressedShape = IconButtonDefaults.smallPressedShape, + ), + ) { + Icon( + painterResource(icon), + contentDescription = title, + modifier = Modifier.size(IconButtonDefaults.smallIconSize), ) } + DropdownMenu( + expanded = dropdownExpanded, + onDismissRequest = { dropdownExpanded = false }, + offset = DpOffset(0.dp, 4.dp), + shape = MaterialTheme.shapes.medium, + containerColor = MaterialTheme.colorScheme.surfaceVariant, + ) { + values.forEach { option -> + DropdownMenuItem( + text = { + Text( + modifier = Modifier.padding(4.dp), + text = option.title, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + }, + leadingIcon = { + Icon(painter = painterResource(option.icon), contentDescription = option.title) + }, + trailingIcon = { + AnimatedVisibility(visible = value === option.value) { + Icon(painterResource(R.drawable.check_solid), contentDescription = null) + } + }, + onClick = { onValueChange(option.value) }, + ) + } + } } } diff --git a/app/src/main/java/de/pawcode/cardstore/ui/screens/AboutScreen.kt b/app/src/main/java/de/pawcode/cardstore/ui/screens/AboutScreen.kt index 11ebc06..3ddcb87 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/screens/AboutScreen.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/screens/AboutScreen.kt @@ -146,8 +146,15 @@ fun AboutScreenComponent( val versionName = packageInfo.versionName ?: "Unknown version" val isDebug = packageInfo.packageName.endsWith(".debug") - Scaffold(topBar = { AppBar(title = stringResource(R.string.app_name), onBack = { onBack() }) }) { - innerPadding -> + Scaffold( + topBar = { + AppBar( + title = stringResource(R.string.app_name), + subtitle = stringResource(R.string.about), + onBack = { onBack() }, + ) + } + ) { innerPadding -> Column( modifier = Modifier.padding(innerPadding).fillMaxSize().verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally, @@ -265,8 +272,8 @@ fun AboutScreenComponent( } } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewAboutScreenComponent() { val packageInfo = PackageInfo() diff --git a/app/src/main/java/de/pawcode/cardstore/ui/screens/CardListScreen.kt b/app/src/main/java/de/pawcode/cardstore/ui/screens/CardListScreen.kt index 97d2761..58b5529 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/screens/CardListScreen.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/screens/CardListScreen.kt @@ -1,17 +1,25 @@ package de.pawcode.cardstore.ui.screens +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.FloatingActionButtonMenu +import androidx.compose.material3.FloatingActionButtonMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -137,7 +145,7 @@ fun CardListScreen(navController: NavController, viewModel: CardViewModel = view ) } -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun CardListScreenComponent( cardsFlow: Flow>, @@ -170,7 +178,6 @@ fun CardListScreenComponent( val cardShareSheetState = rememberModalBottomSheetState() val cardImportSheetState = rememberModalBottomSheetState() val cardOptionSheetState = rememberModalBottomSheetState() - val cardCreateSheetState = rememberModalBottomSheetState() var selectedLabel by remember { mutableStateOf(null) } @@ -203,55 +210,117 @@ fun CardListScreenComponent( AppBar( title = stringResource(R.string.app_name), actions = { - IconButton(onClick = { onShowAbout() }) { - Icon( - painterResource(R.drawable.info), - contentDescription = stringResource(R.string.about), - ) - } - SelectDropdownMenu( - icon = R.drawable.sort_solid, - title = stringResource(R.string.cards_sort), - value = sortBy, - values = - listOf( - DropdownOption( - title = stringResource(R.string.sort_intelligent), - icon = R.drawable.wand_shine_solid, - value = SortAttribute.INTELLIGENT, - ), - DropdownOption( - title = stringResource(R.string.sort_alphabetically), - icon = R.drawable.sort_by_alpha_solid, - value = SortAttribute.ALPHABETICALLY, + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + IconButton( + modifier = + Modifier.size( + IconButtonDefaults.smallContainerSize( + IconButtonDefaults.IconButtonWidthOption.Wide + ) ), - DropdownOption( - title = stringResource(R.string.sort_most_used), - icon = R.drawable.trending_up_solid, - value = SortAttribute.MOST_USED, + onClick = { onShowAbout() }, + shapes = + IconButtonDefaults.shapes( + shape = IconButtonDefaults.smallRoundShape, + pressedShape = IconButtonDefaults.smallPressedShape, ), - DropdownOption( - title = stringResource(R.string.sort_recently_used), - icon = R.drawable.history_solid, - value = SortAttribute.RECENTLY_USED, + ) { + Icon( + painterResource(R.drawable.info), + contentDescription = stringResource(R.string.about), + modifier = Modifier.size(IconButtonDefaults.smallIconSize), + ) + } + + SelectDropdownMenu( + icon = R.drawable.sort_solid, + title = stringResource(R.string.cards_sort), + value = sortBy, + values = + listOf( + DropdownOption( + title = stringResource(R.string.sort_intelligent), + icon = R.drawable.wand_shine_solid, + value = SortAttribute.INTELLIGENT, + ), + DropdownOption( + title = stringResource(R.string.sort_alphabetically), + icon = R.drawable.sort_by_alpha_solid, + value = SortAttribute.ALPHABETICALLY, + ), + DropdownOption( + title = stringResource(R.string.sort_most_used), + icon = R.drawable.trending_up_solid, + value = SortAttribute.MOST_USED, + ), + DropdownOption( + title = stringResource(R.string.sort_recently_used), + icon = R.drawable.history_solid, + value = SortAttribute.RECENTLY_USED, + ), ), - ), - onValueChange = { onSortChange(it) }, - ) + onValueChange = { onSortChange(it) }, + ) + } }, ) }, floatingActionButton = { - ExtendedFloatingActionButton( - onClick = { showCardCreateSheet = true }, - text = { Text(stringResource(R.string.cards_new)) }, - icon = { - Icon( - painterResource(R.drawable.add_card), - contentDescription = stringResource(R.string.cards_new), + FloatingActionButtonMenu( + expanded = showCardCreateSheet, + button = { + ExtendedFloatingActionButton( + onClick = { showCardCreateSheet = !showCardCreateSheet }, + text = { Text(stringResource(R.string.cards_new)) }, + expanded = !showCardCreateSheet, + icon = { + Icon( + painterResource( + if (!showCardCreateSheet) { + R.drawable.add_card + } else { + R.drawable.close_solid + } + ), + contentDescription = stringResource(R.string.cards_new), + ) + }, ) }, - ) + ) { + FloatingActionButtonMenuItem( + onClick = { + showBarcodeScanner = true + showCardCreateSheet = false + }, + text = { Text(stringResource(R.string.scan_barcode)) }, + icon = { + Icon(painterResource(R.drawable.barcode_scanner_solid), contentDescription = null) + }, + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + ) + FloatingActionButtonMenuItem( + onClick = { + showPkpassPicker = true + showCardCreateSheet = false + }, + text = { Text(stringResource(R.string.card_create_pkpass)) }, + icon = { Icon(painterResource(R.drawable.file_open_solid), contentDescription = null) }, + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + ) + FloatingActionButtonMenuItem( + onClick = { + onCreateCard(null, null) + showCardCreateSheet = false + }, + text = { Text(stringResource(R.string.card_create_manual)) }, + icon = { Icon(painterResource(R.drawable.edit_solid), contentDescription = null) }, + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + ) + } }, ) { innerPadding -> Column(modifier = Modifier.padding(innerPadding).padding(horizontal = 8.dp)) { @@ -362,41 +431,6 @@ fun CardListScreenComponent( } } - if (showCardCreateSheet) { - ModalBottomSheet( - sheetState = cardCreateSheetState, - dragHandle = {}, - onDismissRequest = { showCardCreateSheet = false }, - ) { - OptionSheet( - Option( - label = stringResource(R.string.scan_barcode), - icon = R.drawable.barcode_scanner_solid, - onClick = { - showBarcodeScanner = true - showCardCreateSheet = false - }, - ), - Option( - label = stringResource(R.string.card_create_pkpass), - icon = R.drawable.file_open_solid, - onClick = { - showPkpassPicker = true - showCardCreateSheet = false - }, - ), - Option( - label = stringResource(R.string.card_create_manual), - icon = R.drawable.edit_solid, - onClick = { - onCreateCard(null, null) - showCardCreateSheet = false - }, - ), - ) - } - } - openDeleteDialog?.let { ConfirmDialog( onDismissRequest = { openDeleteDialog = null }, @@ -440,8 +474,8 @@ fun CardListScreenComponent( } } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewCardListScreenComponent() { CardListScreenComponent( @@ -459,8 +493,8 @@ fun PreviewCardListScreenComponent() { ) } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewCardListScreenComponentEmpty() { CardListScreenComponent( diff --git a/app/src/main/java/de/pawcode/cardstore/ui/screens/EditCardScreen.kt b/app/src/main/java/de/pawcode/cardstore/ui/screens/EditCardScreen.kt index b74ced8..631c36a 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/screens/EditCardScreen.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/screens/EditCardScreen.kt @@ -153,6 +153,7 @@ fun EditCardScreenComponent( topBar = { AppBar( title = stringResource(if (!isCreateCard) R.string.card_edit else R.string.card_add), + subtitle = if (!isCreateCard) initialCard.card.storeName else null, onBack = { handleBack() }, ) }, @@ -179,8 +180,8 @@ fun EditCardScreenComponent( } } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewEditCardScreenComponent() { EditCardScreenComponent( @@ -192,8 +193,8 @@ fun PreviewEditCardScreenComponent() { ) } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewEditCardScreenComponentEmpty() { EditCardScreenComponent( diff --git a/app/src/main/java/de/pawcode/cardstore/ui/screens/EditLabelScreen.kt b/app/src/main/java/de/pawcode/cardstore/ui/screens/EditLabelScreen.kt index 486283d..05b8d00 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/screens/EditLabelScreen.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/screens/EditLabelScreen.kt @@ -129,6 +129,7 @@ fun EditLabelScreenComponent( topBar = { AppBar( title = stringResource(if (!isCreateLabel) R.string.label_edit else R.string.label_add), + subtitle = initialLabel.name, onBack = { handleBack() }, ) }, @@ -186,8 +187,8 @@ fun EditLabelScreenComponent( } } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewEditLabelScreenComponent() { EditLabelScreenComponent( @@ -198,8 +199,8 @@ fun PreviewEditLabelScreenComponent() { ) } -@Preview -@Preview(device = "id:pixel_tablet") +@Preview(showSystemUi = true) +@Preview(device = "id:pixel_tablet", showSystemUi = true) @Composable fun PreviewEditLabelScreenComponentEmpty() { EditLabelScreenComponent( diff --git a/app/src/main/java/de/pawcode/cardstore/ui/theme/Theme.kt b/app/src/main/java/de/pawcode/cardstore/ui/theme/Theme.kt index b55aeb8..ea128a5 100644 --- a/app/src/main/java/de/pawcode/cardstore/ui/theme/Theme.kt +++ b/app/src/main/java/de/pawcode/cardstore/ui/theme/Theme.kt @@ -1,20 +1,17 @@ package de.pawcode.cardstore.ui.theme import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.MaterialExpressiveTheme +import androidx.compose.material3.MotionScheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme +import androidx.compose.material3.expressiveLightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -private val DarkColorScheme = - darkColorScheme(primary = Purple80, secondary = PurpleGrey80, tertiary = Pink80) - -private val LightColorScheme = - lightColorScheme(primary = Purple40, secondary = PurpleGrey40, tertiary = Pink40) - +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun CardStoreTheme( darkTheme: Boolean = isSystemInDarkTheme(), @@ -28,9 +25,14 @@ fun CardStoreTheme( if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) } - darkTheme -> DarkColorScheme - else -> LightColorScheme + darkTheme -> darkColorScheme() + else -> expressiveLightColorScheme() } - MaterialTheme(colorScheme = colorScheme, typography = Typography, content = content) + MaterialExpressiveTheme( + colorScheme = colorScheme, + typography = Typography, + motionScheme = MotionScheme.expressive(), + content = content, + ) } diff --git a/app/src/main/res/drawable/close_solid.xml b/app/src/main/res/drawable/close_solid.xml new file mode 100644 index 0000000..77be1d0 --- /dev/null +++ b/app/src/main/res/drawable/close_solid.xml @@ -0,0 +1,10 @@ + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aabfc79..83d2f91 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,6 +15,7 @@ junitVersion = "1.3.0" kotlin = "2.2.21" kotlinxSerializationJson = "1.9.0" lifecycleRuntimeKtx = "2.10.0" +material3 = "1.5.0-alpha09" navigationCompose = "2.9.6" playServicesCodeScanner = "16.1.0" revealswipe = "3.0.0" @@ -31,7 +32,7 @@ androidx-datastore-preferences = { group = "androidx.datastore", name = "datasto androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } -androidx-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } androidx-room-common = { group = "androidx.room", name = "room-common", version.ref = "room" } androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }