From 37d8518e5089cb0ae4a5b6c7900a79555eaa9f77 Mon Sep 17 00:00:00 2001 From: jonasgaudian <43753916+jonasgaudian@users.noreply.github.com> Date: Sat, 14 Feb 2026 00:25:23 +0100 Subject: [PATCH] update `AppFabMenu` to support optional titles and expand FABs in `MainVocabularyScreen` and `VocabularyMenu` --- .../eu/gaudian/translator/model/WidgetType.kt | 2 +- .../translator/view/composable/AppFabMenu.kt | 30 +++++++++++++++---- .../translator/view/dialogs/VocabularyMenu.kt | 2 +- .../view/vocabulary/MainVocabularyScreen.kt | 20 +++++++++---- app/src/main/res/values-de-rDE/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt b/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt index 154fc01..7382afd 100644 --- a/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt +++ b/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt @@ -12,7 +12,7 @@ sealed class WidgetType(val id: String, @param:StringRes val titleRes: Int) { data object StartButtons : WidgetType("start_buttons", R.string.label_start_exercise) data object AllVocabulary : WidgetType("all_vocabulary", R.string.label_all_vocabulary) data object DueToday : WidgetType("due_today", R.string.title_widget_due_today) - data object CategoryProgress : WidgetType("category_progress", R.string.title_widget_category_progress) + data object CategoryProgress : WidgetType("category_progress", R.string.label_categories) data object WeeklyActivityChart : WidgetType("weekly_activity_chart", R.string.text_widget_title_weekly_activity) data object Levels : WidgetType("category_stats", R.string.levels) diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt index cfb5fe7..e6c8812 100644 --- a/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt @@ -54,7 +54,8 @@ data class FabMenuItem( @Composable fun AppFabMenu( items: List, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + title: String? = null ) { var isMenuExpanded by remember { mutableStateOf(false) } @@ -67,6 +68,10 @@ fun AppFabMenu( label = "fabRotation" ) + // Only rotate the FAB itself if there's no title, otherwise rotate just the icon + val fabRotationAngle = if (title == null) rotationAngle else 0f + val iconRotationAngle = if (title != null) rotationAngle else 0f + Column( modifier = modifier, horizontalAlignment = Alignment.End, @@ -97,16 +102,29 @@ fun AppFabMenu( FloatingActionButton( onClick = { isMenuExpanded = !isMenuExpanded }, - modifier = Modifier.rotate(rotationAngle), + modifier = Modifier.rotate(fabRotationAngle), shape = RoundedCornerShape(16.dp), containerColor = MaterialTheme.colorScheme.primary, contentColor = MaterialTheme.colorScheme.onPrimary, elevation = FloatingActionButtonDefaults.elevation(defaultElevation = ComponentDefaults.DefaultElevation) ) { - Icon( - imageVector = AppIcons.Add, - contentDescription = stringResource(R.string.cd_toggle_menu) - ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(horizontal = 16.dp) + ) { + Icon( + imageVector = AppIcons.Add, + contentDescription = stringResource(R.string.cd_toggle_menu), + modifier = Modifier.rotate(iconRotationAngle) + ) + if (title != null) { + Text( + text = title, + style = MaterialTheme.typography.labelLarge + ) + } + } } } } diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt index 2147682..d9013f1 100644 --- a/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt @@ -48,7 +48,7 @@ fun VocabularyMenu( ) ) - AppFabMenu(items = menuItems, modifier = modifier) + AppFabMenu(items = menuItems, modifier = modifier, title = stringResource(R.string.label_add_vocabulary)) if (showAddVocabularyDialog) { AddVocabularyDialog( diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt index f5b4852..7943004 100644 --- a/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt @@ -382,7 +382,7 @@ fun MainVocabularyScreen( var menuHeightPx by remember { mutableIntStateOf(0) } val density = LocalDensity.current val menuHeightDp = (menuHeightPx / density.density).dp - val animatedBottomPadding by animateDpAsState(targetValue = 16.dp + 8.dp + menuHeightDp, label = "fabBottomPadding") + val animatedBottomPadding by animateDpAsState(targetValue = 16.dp + 8.dp + menuHeightDp, label = "FBottomPadding") Column( modifier = Modifier @@ -402,10 +402,20 @@ fun MainVocabularyScreen( .align(Alignment.BottomEnd) .padding(end = 16.dp, bottom = animatedBottomPadding) ) { - Icon( - imageVector = AppIcons.Quiz, - contentDescription = stringResource(R.string.cd_start_exercise) - ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(horizontal = 16.dp) + ) { + Icon( + imageVector = AppIcons.Quiz, + contentDescription = null + ) + Text( + text = stringResource(R.string.label_start_exercise), + style = MaterialTheme.typography.labelLarge + ) + } } } } diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 13f8276..0d28029 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -33,7 +33,6 @@ Einzeln Streak Alle Vokabeln - Kategoriefortschritt Heute fällig Erfolgsmeldung anzeigen Kategorie hinzufügen diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8de65d3..e7ad634 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -33,7 +33,6 @@ Único Sequência Todo o Vocabulário - Progresso da Categoria Para Hoje Mostrar Mensagem de Sucesso Adicionar Categoria diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 031f598..b6e6970 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -986,7 +986,6 @@ Show Success Message Single Preview Title - Category Progress Due Today Streak