From 00dc69ae6cffd48c20c5641545f2cbf0f4e53255 Mon Sep 17 00:00:00 2001 From: sockenklaus Date: Fri, 22 Jul 2022 03:08:38 +0200 Subject: [PATCH] Fixed backpress behaviour BatteryDetails.kt --- .../ui/composables/BatteryDetails.kt | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt index d400d37..2043ced 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt @@ -1,12 +1,15 @@ package com.sockenklaus.batterytracker.ui.composables +import androidx.activity.OnBackPressedCallback +import androidx.activity.OnBackPressedDispatcher +import androidx.activity.compose.LocalOnBackPressedDispatcherOwner import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.Text import androidx.compose.material.TopAppBar import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.runtime.Composable +import androidx.compose.runtime.* import androidx.navigation.NavController import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.models.MainViewModel @@ -17,6 +20,14 @@ fun BatteryDetails( batteryId: Int? = null, appState: MainViewModel ){ + var onBack = { + val backTarget = navController.previousBackStackEntry?.destination?.route ?: Routes.HOME + appState.currentScreen = backTarget + navController.navigate(backTarget) + } + + BackPressHandler(onBackPressed = onBack) + Text(batteryId.toString()) } @@ -39,4 +50,28 @@ fun DetailsTopAppBar( } } ) +} + +@Composable +fun BackPressHandler( + backPressedDispatcher: OnBackPressedDispatcher? = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher, + onBackPressed: () -> Unit +) { + val currentOnBackPressed by rememberUpdatedState(newValue = onBackPressed) + + val backCallback = remember { + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + currentOnBackPressed() + } + } + } + + DisposableEffect(key1 = backPressedDispatcher) { + backPressedDispatcher?.addCallback(backCallback) + + onDispose { + backCallback.remove() + } + } } \ No newline at end of file