Skip to content

Commit 802f4b3

Browse files
committed
build: Replace custom BackHandler with NavigationBackHandler
- Add `androidx-navigationevent-compose` version `1.0.1` to `libs.versions.toml`. - Add `androidx.navigationevent:navigationevent-compose` dependency to `ui:shared`. - Replace the platform-specific `BackHandler` expect/actual implementation with a common `NavBackHandler` using `NavigationBackHandler` from the `navigationevent` library. - Remove redundant `BackHandler` implementations in `androidMain`, `iosMain`, `jvmMain`, and `wasmJsMain`. - Update `AdaptiveMainScreen`, `SettingsDetailScreen`, `NoteDetail`, and `SettingsMasterScreen` to use the new `NavBackHandler`.
1 parent bb59942 commit 802f4b3

File tree

11 files changed

+19
-22
lines changed

11 files changed

+19
-22
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ composeMaterialAdaptive = "1.2.0"
2626
androidxAppcompat = "1.7.1"
2727
androidxViewModel = "2.9.6"
2828
androidxNavigation = "2.9.2"
29+
androidxNavigationEvent = "1.0.1"
2930
androidxActivityCompose = "1.12.4"
3031
androidxComposeTest = "1.10.4"
3132
androidxCoreSplashscreen = "1.2.0"
@@ -120,6 +121,7 @@ compose-adaptive-navigation = { module = "org.jetbrains.compose.material3.adapti
120121

121122
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidxAppcompat" }
122123
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidxNavigation" }
124+
androidx-navigationevent-compose = { module = "org.jetbrains.androidx.navigationevent:navigationevent-compose", version.ref = "androidxNavigationEvent" }
123125
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidxActivityCompose" }
124126
androidx-compose-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4-android", version.ref = "androidxComposeTest" }
125127
androidx-compose-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "androidxComposeTest" }

ui/shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ kotlin {
6060
implementation(libs.koin.core)
6161
implementation(libs.koin.compose.viewmodel.navigation)
6262
implementation(libs.androidx.navigation.compose)
63+
implementation(libs.androidx.navigationevent.compose)
6364
implementation(libs.androidx.lifecycle.runtime.compose)
6465
implementation(libs.material.theme.prefs)
6566
implementation(libs.androidx.paging.compose)

ui/shared/src/androidMain/kotlin/com/softartdev/notedelight/ui/Composables.android.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,3 @@ actual fun EnableEdgeToEdge() {
2626
}
2727
activity.enableEdgeToEdge(statusBarStyle = sbStyle, navigationBarStyle = sbStyle)
2828
}
29-
30-
@Composable
31-
actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) =
32-
androidx.activity.compose.BackHandler(enabled, onBack)

ui/shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/Composables.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ import androidx.compose.ui.text.TextStyle
3636
import androidx.compose.ui.text.font.FontWeight
3737
import androidx.compose.ui.tooling.preview.Preview
3838
import androidx.compose.ui.unit.dp
39+
import androidx.navigationevent.NavigationEventInfo
40+
import androidx.navigationevent.compose.NavigationBackHandler
41+
import androidx.navigationevent.compose.rememberNavigationEventState
3942
import com.softartdev.notedelight.util.EMPTY_RESULT_LABEL_TAG
4043
import notedelight.ui.shared.generated.resources.Res
4144
import notedelight.ui.shared.generated.resources.detail_pane_placeholder
@@ -48,7 +51,11 @@ import org.jetbrains.compose.resources.stringResource
4851
expect fun EnableEdgeToEdge()
4952

5053
@Composable
51-
expect fun BackHandler(enabled: Boolean = true, onBack: () -> Unit)
54+
fun NavBackHandler(enabled: Boolean = true, onBack: () -> Unit) = NavigationBackHandler(
55+
state = rememberNavigationEventState(NavigationEventInfo.None),
56+
isBackEnabled = enabled,
57+
onBackCompleted = onBack,
58+
)
5259

5360
@Composable
5461
fun MainDetailPanePlaceholder() = Card(shape = RoundedCornerShape(size = 0.dp)) {

ui/shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/main/AdaptiveMainScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.softartdev.notedelight.di.PreviewKoin
2121
import com.softartdev.notedelight.navigation.Router
2222
import com.softartdev.notedelight.presentation.main.MainViewModel
2323
import com.softartdev.notedelight.presentation.note.NoteViewModel
24-
import com.softartdev.notedelight.ui.BackHandler
24+
import com.softartdev.notedelight.ui.NavBackHandler
2525
import com.softartdev.notedelight.ui.VerticalPaneExpansionDragHandle
2626
import com.softartdev.theme.material3.PreferableMaterialTheme
2727
import kotlinx.coroutines.launch
@@ -53,7 +53,7 @@ fun AdaptiveMainScreen(
5353
},
5454
paneExpansionState = paneExpansionState
5555
)
56-
BackHandler(navigator.canNavigateBack()) { coroutineScope.launch { navigator.navigateBack() } }
56+
NavBackHandler(navigator.canNavigateBack()) { coroutineScope.launch { navigator.navigateBack() } }
5757
}
5858

5959
@Preview

ui/shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/main/NoteDetail.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import androidx.compose.ui.unit.dp
3838
import com.softartdev.notedelight.presentation.note.NoteAction
3939
import com.softartdev.notedelight.presentation.note.NoteResult
4040
import com.softartdev.notedelight.presentation.note.NoteViewModel
41-
import com.softartdev.notedelight.ui.BackHandler
41+
import com.softartdev.notedelight.ui.NavBackHandler
4242
import com.softartdev.notedelight.ui.MainDetailPanePlaceholder
4343
import com.softartdev.notedelight.util.DELETE_NOTE_BUTTON_TAG
4444
import com.softartdev.notedelight.util.EDIT_TITLE_BUTTON_TAG
@@ -96,7 +96,7 @@ fun NoteDetail(
9696
textState = textState,
9797
onAction = onAction
9898
)
99-
BackHandler { onAction(NoteAction.CheckSaveChange(textState.text)) }
99+
NavBackHandler { onAction(NoteAction.CheckSaveChange(textState.text)) }
100100
}
101101

102102
@Composable

ui/shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/settings/detail/SettingsDetailScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ import com.softartdev.notedelight.presentation.settings.SettingsAction
6060
import com.softartdev.notedelight.presentation.settings.SettingsResult
6161
import com.softartdev.notedelight.presentation.settings.SettingsViewModel
6262
import com.softartdev.notedelight.repository.SafeRepo
63-
import com.softartdev.notedelight.ui.BackHandler
63+
import com.softartdev.notedelight.ui.NavBackHandler
6464
import com.softartdev.notedelight.ui.SettingsDetailPanePlaceholder
6565
import com.softartdev.notedelight.ui.icon.FileLock
6666
import com.softartdev.notedelight.util.ENABLE_ENCRYPTION_SWITCH_TAG
@@ -111,7 +111,7 @@ fun SettingsDetailScreen(settingsViewModel: SettingsViewModel) {
111111
onRefresh = { settingsViewModel.onAction(SettingsAction.Refresh) },
112112
refreshState = refreshState,
113113
)
114-
BackHandler { settingsViewModel.onAction(SettingsAction.NavBack) }
114+
NavBackHandler { settingsViewModel.onAction(SettingsAction.NavBack) }
115115
}
116116
}
117117
}

ui/shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/settings/master/SettingsMasterScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import com.softartdev.notedelight.presentation.settings.SettingsCategoriesAction
3434
import com.softartdev.notedelight.presentation.settings.SettingsCategoriesResult
3535
import com.softartdev.notedelight.presentation.settings.SettingsCategoriesViewModel
3636
import com.softartdev.notedelight.model.SettingsCategory
37-
import com.softartdev.notedelight.ui.BackHandler
37+
import com.softartdev.notedelight.ui.NavBackHandler
3838
import com.softartdev.notedelight.ui.selectedListItemColor
3939
import com.softartdev.notedelight.util.icon
4040
import com.softartdev.notedelight.util.tag
@@ -63,7 +63,7 @@ fun SettingsMasterScreen(categoriesViewModel: SettingsCategoriesViewModel) {
6363
refreshState = refreshState,
6464
onNavigateBack = { categoriesViewModel.onAction(SettingsCategoriesAction.NavBack) }
6565
)
66-
BackHandler(enabled = result.selectedCategoryId == null) {
66+
NavBackHandler(enabled = result.selectedCategoryId == null) {
6767
categoriesViewModel.onAction(SettingsCategoriesAction.NavBack)
6868
}
6969
}

ui/shared/src/iosMain/kotlin/com/softartdev/notedelight/ui/Composables.ios.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@ import androidx.compose.runtime.Composable
44

55
@Composable
66
actual fun EnableEdgeToEdge() {}
7-
8-
@Composable
9-
actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) {}

ui/shared/src/jvmMain/kotlin/com/softartdev/notedelight/ui/Composables.jvm.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@ import androidx.compose.runtime.Composable
44

55
@Composable
66
actual fun EnableEdgeToEdge() {}
7-
8-
@Composable
9-
actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) {}

0 commit comments

Comments
 (0)