From 8ea665849174ce4a528d6be3713e0ad63ee69935 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Wed, 11 Mar 2026 22:50:12 +0530 Subject: [PATCH] feat: implement PlatformBackHandler for back navigation support across platforms --- .../nuvio/app/core/ui/PlatformBackHandler.android.kt | 12 ++++++++++++ .../com/nuvio/app/core/ui/PlatformBackHandler.kt | 9 +++++++++ .../nuvio/app/features/settings/SettingsScreen.kt | 7 +++++++ .../com/nuvio/app/core/ui/PlatformBackHandler.ios.kt | 9 +++++++++ 4 files changed, 37 insertions(+) create mode 100644 composeApp/src/androidMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.android.kt create mode 100644 composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.kt create mode 100644 composeApp/src/iosMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.ios.kt diff --git a/composeApp/src/androidMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.android.kt b/composeApp/src/androidMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.android.kt new file mode 100644 index 000000000..e1688358e --- /dev/null +++ b/composeApp/src/androidMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.android.kt @@ -0,0 +1,12 @@ +package com.nuvio.app.core.ui + +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable + +@Composable +actual fun PlatformBackHandler( + enabled: Boolean, + onBack: () -> Unit, +) { + BackHandler(enabled = enabled, onBack = onBack) +} diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.kt new file mode 100644 index 000000000..9c7f71dc7 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.kt @@ -0,0 +1,9 @@ +package com.nuvio.app.core.ui + +import androidx.compose.runtime.Composable + +@Composable +expect fun PlatformBackHandler( + enabled: Boolean, + onBack: () -> Unit, +) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt index 88bc50431..5b5048620 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.nuvio.app.core.ui.PlatformBackHandler import com.nuvio.app.core.ui.NuvioScreen import com.nuvio.app.core.ui.NuvioScreenHeader import com.nuvio.app.features.addons.AddonRepository @@ -61,6 +62,12 @@ fun SettingsScreen( var currentPage by rememberSaveable { mutableStateOf(SettingsPage.Root.name) } val page = remember(currentPage) { SettingsPage.valueOf(currentPage) } + val previousPage = page.previousPage() + + PlatformBackHandler( + enabled = previousPage != null, + onBack = { previousPage?.let { currentPage = it.name } }, + ) if (maxWidth >= 768.dp) { TabletSettingsScreen( diff --git a/composeApp/src/iosMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.ios.kt b/composeApp/src/iosMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.ios.kt new file mode 100644 index 000000000..6434bd49e --- /dev/null +++ b/composeApp/src/iosMain/kotlin/com/nuvio/app/core/ui/PlatformBackHandler.ios.kt @@ -0,0 +1,9 @@ +package com.nuvio.app.core.ui + +import androidx.compose.runtime.Composable + +@Composable +actual fun PlatformBackHandler( + enabled: Boolean, + onBack: () -> Unit, +) = Unit