Skip to content

Commit 4e2918a

Browse files
authored
Added predictive back support to the drawer (#1454)
In M3 1.3, the drawerState can be passed to the ModalDrawerSheet to get predictive back animations without the need for a PredictiveBackHandler to be manually defined.
2 parents 76eff91 + 3acc3f4 commit 4e2918a

3 files changed

Lines changed: 11 additions & 10 deletions

File tree

JetNews/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<application
1818
android:name=".JetnewsApplication"
1919
android:allowBackup="true"
20+
android:enableOnBackInvokedCallback="true"
2021
android:icon="@mipmap/ic_launcher"
2122
android:label="@string/app_name"
2223
android:supportsRtl="true"

JetNews/app/src/main/java/com/example/jetnews/ui/AppDrawer.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ import androidx.compose.foundation.layout.width
2424
import androidx.compose.material.icons.Icons
2525
import androidx.compose.material.icons.filled.Home
2626
import androidx.compose.material.icons.filled.ListAlt
27-
import androidx.compose.material3.ExperimentalMaterial3Api
27+
import androidx.compose.material3.DrawerState
28+
import androidx.compose.material3.DrawerValue
2829
import androidx.compose.material3.Icon
2930
import androidx.compose.material3.MaterialTheme
3031
import androidx.compose.material3.ModalDrawerSheet
3132
import androidx.compose.material3.NavigationDrawerItem
3233
import androidx.compose.material3.NavigationDrawerItemDefaults
3334
import androidx.compose.material3.Text
35+
import androidx.compose.material3.rememberDrawerState
3436
import androidx.compose.runtime.Composable
3537
import androidx.compose.ui.Modifier
3638
import androidx.compose.ui.res.painterResource
@@ -40,16 +42,19 @@ import androidx.compose.ui.unit.dp
4042
import com.example.jetnews.R
4143
import com.example.jetnews.ui.theme.JetnewsTheme
4244

43-
@OptIn(ExperimentalMaterial3Api::class)
4445
@Composable
4546
fun AppDrawer(
47+
drawerState: DrawerState,
4648
currentRoute: String,
4749
navigateToHome: () -> Unit,
4850
navigateToInterests: () -> Unit,
4951
closeDrawer: () -> Unit,
5052
modifier: Modifier = Modifier
5153
) {
52-
ModalDrawerSheet(modifier) {
54+
ModalDrawerSheet(
55+
drawerState = drawerState,
56+
modifier = modifier,
57+
) {
5358
JetNewsLogo(
5459
modifier = Modifier.padding(horizontal = 28.dp, vertical = 24.dp)
5560
)
@@ -93,6 +98,7 @@ private fun JetNewsLogo(modifier: Modifier = Modifier) {
9398
fun PreviewAppDrawer() {
9499
JetnewsTheme {
95100
AppDrawer(
101+
drawerState = rememberDrawerState(initialValue = DrawerValue.Open),
96102
currentRoute = JetnewsDestinations.HOME_ROUTE,
97103
navigateToHome = {},
98104
navigateToInterests = {},

JetNews/app/src/main/java/com/example/jetnews/ui/JetnewsApp.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.example.jetnews.ui
1818

19-
import androidx.activity.compose.BackHandler
2019
import androidx.compose.foundation.layout.Row
2120
import androidx.compose.material3.DrawerState
2221
import androidx.compose.material3.DrawerValue
@@ -54,15 +53,10 @@ fun JetnewsApp(
5453
val isExpandedScreen = widthSizeClass == WindowWidthSizeClass.Expanded
5554
val sizeAwareDrawerState = rememberSizeAwareDrawerState(isExpandedScreen)
5655

57-
BackHandler(sizeAwareDrawerState.isOpen) {
58-
coroutineScope.launch {
59-
sizeAwareDrawerState.close()
60-
}
61-
}
62-
6356
ModalNavigationDrawer(
6457
drawerContent = {
6558
AppDrawer(
59+
drawerState = sizeAwareDrawerState,
6660
currentRoute = currentRoute,
6761
navigateToHome = navigationActions.navigateToHome,
6862
navigateToInterests = navigationActions.navigateToInterests,

0 commit comments

Comments
 (0)