diff --git a/mobile-app/composeApp/release/composeApp-release.aab b/mobile-app/composeApp/release/composeApp-release.aab index c3f31f08..012ed02d 100644 Binary files a/mobile-app/composeApp/release/composeApp-release.aab and b/mobile-app/composeApp/release/composeApp-release.aab differ diff --git a/mobile-app/composeApp/src/androidMain/kotlin/de/tsschulz/tt_tagebuch/app/ui/AppRoot.kt b/mobile-app/composeApp/src/androidMain/kotlin/de/tsschulz/tt_tagebuch/app/ui/AppRoot.kt index 09c5edc3..d8ea0f99 100644 --- a/mobile-app/composeApp/src/androidMain/kotlin/de/tsschulz/tt_tagebuch/app/ui/AppRoot.kt +++ b/mobile-app/composeApp/src/androidMain/kotlin/de/tsschulz/tt_tagebuch/app/ui/AppRoot.kt @@ -5105,6 +5105,8 @@ private fun MembersScreen( var selectedSort by rememberSaveable { mutableStateOf("name") } var sortAscending by rememberSaveable { mutableStateOf(true) } var showTrainingParticipationsColumn by rememberSaveable { mutableStateOf(false) } + var memberActionsPanelExpanded by rememberSaveable { mutableStateOf(false) } + var memberFiltersPanelExpanded by rememberSaveable { mutableStateOf(false) } var groupFilterMenuOpen by remember { mutableStateOf(false) } var ratingsBusy by remember { mutableStateOf(false) } var membersActionNote by remember { mutableStateOf(null) } @@ -5668,7 +5670,12 @@ private fun MembersScreen( } } } - Row(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.fillMaxWidth()) { + MembersTogglePanel( + title = tr("members.actions", "Aktionen"), + expanded = memberActionsPanelExpanded, + onToggle = { memberActionsPanelExpanded = !memberActionsPanelExpanded }, + ) { + Row(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.fillMaxWidth()) { OutlinedButton( onClick = { dependencies.applicationScope.launch { dependencies.membersManager.loadMembers(clubId) } }, modifier = Modifier @@ -5780,7 +5787,13 @@ private fun MembersScreen( ) { Text(tr("members.transferMembers", "Transfer"), style = MaterialTheme.typography.caption) } } } - OutlinedTextField( + } + MembersTogglePanel( + title = tr("members.filterSearchSort", "Filter, Suche & Sortierung"), + expanded = memberFiltersPanelExpanded, + onToggle = { memberFiltersPanelExpanded = !memberFiltersPanelExpanded }, + ) { + OutlinedTextField( value = query, onValueChange = { query = it }, label = { Text(tr("mobile.search", "Suche")) }, @@ -6118,6 +6131,7 @@ private fun MembersScreen( ) { Text(tr("members.bulkEndTest", "Test beenden (Liste)"), style = MaterialTheme.typography.caption) } } } + } membersActionNote?.let { note -> Text(note, style = MaterialTheme.typography.caption, color = MaterialTheme.colors.primary, modifier = Modifier.padding(bottom = 6.dp)) } @@ -7383,6 +7397,44 @@ private fun FormScaffold( } } +@Composable +private fun MembersTogglePanel( + title: String, + expanded: Boolean, + onToggle: () -> Unit, + content: @Composable ColumnScope.() -> Unit, +) { + Card( + modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp), + elevation = 1.dp, + backgroundColor = MaterialTheme.colors.onSurface.copy(alpha = 0.03f), + ) { + Column(modifier = Modifier.fillMaxWidth()) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(onClick = onToggle) + .padding(horizontal = 12.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text(title, fontWeight = FontWeight.SemiBold, style = MaterialTheme.typography.subtitle2) + Icon( + imageVector = if (expanded) Icons.Filled.ExpandLess else Icons.Filled.ExpandMore, + contentDescription = null, + modifier = Modifier.size(20.dp), + ) + } + if (expanded) { + Column( + modifier = Modifier.fillMaxWidth().padding(horizontal = 12.dp, vertical = 8.dp), + content = content, + ) + } + } + } +} + @Composable private fun Header(text: String) { Text(text, style = MaterialTheme.typography.h5, fontWeight = FontWeight.SemiBold) diff --git a/mobile-app/gradle/libs.versions.toml b/mobile-app/gradle/libs.versions.toml index 547d72e1..b83b02dc 100644 --- a/mobile-app/gradle/libs.versions.toml +++ b/mobile-app/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # composeApp (Play Store / „Über die App“-Build) -appVersionCode = "26" -appVersionName = "1.7.6" +appVersionCode = "27" +appVersionName = "1.7.7" agp = "9.2.1" android-compileSdk = "35" android-minSdk = "24"