From dbcabd0848f0878564d1c5a7e6e892960494c199 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Wed, 13 May 2026 21:00:22 +0200 Subject: [PATCH] refactor: navigation drawer to use state management and auto-close on item selection --- .../home/components/TvNavigationDrawer.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/home/components/TvNavigationDrawer.kt b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/home/components/TvNavigationDrawer.kt index c1c73bda..519f4f41 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/home/components/TvNavigationDrawer.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/home/components/TvNavigationDrawer.kt @@ -30,12 +30,14 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.tv.material3.DrawerState import androidx.tv.material3.DrawerValue import androidx.tv.material3.Icon import androidx.tv.material3.NavigationDrawer import androidx.tv.material3.NavigationDrawerItem import androidx.tv.material3.Text import androidx.tv.material3.darkColorScheme +import androidx.tv.material3.rememberDrawerState import hu.bbara.purefin.core.navigation.Route import hu.bbara.purefin.tv.R import androidx.tv.material3.MaterialTheme as TvMaterialTheme @@ -52,11 +54,14 @@ fun TvNavigationDrawer( content: @Composable () -> Unit ) { ProvideTvDrawerTheme { + val drawerState = rememberDrawerState(DrawerValue.Closed) + NavigationDrawer( modifier = modifier.fillMaxSize(), - drawerContent = { drawerValue -> + drawerState = drawerState, + drawerContent = { TvNavigationDrawerRail( - drawerValue = drawerValue, + drawerState = drawerState, destinations = destinations, selectedDestination = selectedDestination, onDestinationSelected = onDestinationSelected @@ -135,12 +140,12 @@ fun TvDrawerHeader( @Composable private fun androidx.tv.material3.NavigationDrawerScope.TvNavigationDrawerRail( - drawerValue: DrawerValue, + drawerState: DrawerState, destinations: List, selectedDestination: Route, onDestinationSelected: (Route) -> Unit, ) { - val expanded = drawerValue == DrawerValue.Open + val expanded = drawerState.currentValue == DrawerValue.Open val scheme = MaterialTheme.colorScheme var hasDrawerFocus by remember { mutableStateOf(false) } @@ -164,7 +169,12 @@ private fun androidx.tv.material3.NavigationDrawerScope.TvNavigationDrawerRail( val isSelected = destination.destination == selectedDestination NavigationDrawerItem( selected = isSelected, - onClick = { onDestinationSelected(destination.destination) }, + onClick = { + onDestinationSelected(destination.destination) + if (isSelected) { + drawerState.setValue(DrawerValue.Closed) + } + }, modifier = Modifier .testTag("$TvDrawerItemTagPrefix$index") .semantics { selected = isSelected }