Skip to content

Commit 6491b3b

Browse files
authored
Merge pull request #116 from NordicPlayground/bugfix/back-handler
Predictive back invocation for navigation drawer
2 parents 95df207 + 73021dc commit 6491b3b

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

app/src/main/java/no/nordicsemi/android/common/test/MainActivity.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,14 @@ import androidx.compose.material3.NavigationDrawerItem
6565
import androidx.compose.material3.NavigationDrawerItemDefaults
6666
import androidx.compose.material3.Scaffold
6767
import androidx.compose.material3.Text
68+
import androidx.compose.material3.TopAppBarDefaults
6869
import androidx.compose.material3.rememberDrawerState
6970
import androidx.compose.runtime.Composable
7071
import androidx.compose.runtime.getValue
7172
import androidx.compose.runtime.rememberCoroutineScope
7273
import androidx.compose.ui.Modifier
7374
import androidx.compose.ui.graphics.vector.ImageVector
75+
import androidx.compose.ui.input.nestedscroll.nestedScroll
7476
import androidx.compose.ui.platform.LocalContext
7577
import androidx.compose.ui.res.stringResource
7678
import androidx.compose.ui.unit.dp
@@ -101,7 +103,7 @@ import no.nordicsemi.android.common.theme.NordicTheme
101103
import no.nordicsemi.android.common.ui.view.NavigationDrawerDividerDefaults
102104
import no.nordicsemi.android.common.ui.view.NavigationDrawerTitle
103105
import no.nordicsemi.android.common.ui.view.NavigationDrawerTitleDefaults
104-
import no.nordicsemi.android.common.ui.view.NordicAppBar
106+
import no.nordicsemi.android.common.ui.view.NordicLargeAppBar
105107
import no.nordicsemi.android.common.ui.view.NordicLogo
106108

107109
data class Item(val title: String, val destinationId: DestinationId<Unit, *>, val icon: ImageVector)
@@ -139,16 +141,11 @@ class MainActivity : NordicActivity() {
139141
val drawerState = rememberDrawerState(DrawerValue.Closed)
140142
val scope = rememberCoroutineScope()
141143

142-
BackHandler(
143-
enabled = drawerState.isOpen,
144-
) {
145-
scope.launch { drawerState.close() }
146-
}
147-
148144
ModalNavigationDrawer(
149145
drawerState = drawerState,
150146
drawerContent = {
151147
ModalDrawerSheet(
148+
drawerState = drawerState,
152149
modifier = Modifier
153150
.fillMaxHeight()
154151
.verticalScroll(rememberScrollState()),
@@ -210,9 +207,11 @@ class MainActivity : NordicActivity() {
210207
) {
211208
val currentDestination by navigator.currentDestination()
212209
.collectAsStateWithLifecycle()
210+
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
213211
Scaffold(
212+
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
214213
topBar = {
215-
NordicAppBar(
214+
NordicLargeAppBar(
216215
title = { Text(text = stringResource(id = R.string.title_main)) },
217216
showBackButton = listOf(Hello, HelloDialog).contains(
218217
currentDestination
@@ -221,6 +220,7 @@ class MainActivity : NordicActivity() {
221220
onHamburgerButtonClick = {
222221
scope.launch { drawerState.open() }
223222
},
223+
scrollBehavior = scrollBehavior,
224224
actions = {
225225
val context = LocalContext.current
226226
LoggerAppBarIcon(
@@ -267,6 +267,12 @@ class MainActivity : NordicActivity() {
267267
}
268268
}
269269
) { padding ->
270+
// This is a workaround for the issue with the back button going back
271+
// to the previous tab instead of closing the drawer.
272+
// BackHandler(
273+
// enabled = drawerState.isOpen,
274+
// onBack = { scope.launch { drawerState.close() } }
275+
// )
270276
NavigationView(
271277
destinations = listOf(
272278
Tabs with ((FirstTab with MainDestinations) + (SecondTab with SecondDestinations) + ThirdDestination),

0 commit comments

Comments
 (0)