Files
MyWallet/app/src/main/java/ica/tees/mywallet/components/SystemBackButtonHandler.kt
T
2024-10-28 20:47:35 +00:00

54 lines
1.4 KiB
Kotlin

package ica.tees.mywallet.components
import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback
import androidx.activity.OnBackPressedDispatcherOwner
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalLifecycleOwner
private val LocalBackPressedDispatcher =
staticCompositionLocalOf<OnBackPressedDispatcherOwner?> { null }
private class ComposableBackNavigationHandler(enabled: Boolean) : OnBackPressedCallback(enabled) {
lateinit var onBackPressed: () -> Unit
override fun handleOnBackPressed() {
onBackPressed()
}
}
@Composable
internal fun ComposableHandler(
enabled: Boolean = true,
onBackPressed: () -> Unit
) {
val dispatcher = (LocalBackPressedDispatcher.current ?: return).onBackPressedDispatcher
val handler = remember { ComposableBackNavigationHandler(enabled) }
DisposableEffect(dispatcher) {
dispatcher.addCallback(handler)
onDispose { handler.remove() }
}
LaunchedEffect(enabled) {
handler.isEnabled = enabled
handler.onBackPressed = onBackPressed
}
}
@Composable
internal fun SystemBackButtonHandler(onBackPressed: () -> Unit) {
CompositionLocalProvider(
LocalBackPressedDispatcher provides LocalLifecycleOwner.current as ComponentActivity
) {
ComposableHandler {
onBackPressed()
}
}
}