Skip to content

Commit fbfa1fd

Browse files
committed
refactor navigation and settings screens
1 parent 881792e commit fbfa1fd

7 files changed

Lines changed: 273 additions & 256 deletions

File tree

app/src/main/java/org/schabi/newpipe/navigation/Screen.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
package org.schabi.newpipe.navigation
77

8+
import androidx.navigation3.runtime.NavKey
89
import kotlinx.serialization.Serializable
910

10-
1111
@Serializable
12-
sealed interface Screen {
12+
sealed interface Screen : NavKey {
1313

14-
sealed interface Settings: Screen {
14+
sealed interface Settings : Screen {
1515
@Serializable
1616
data object Home : Settings
1717

@@ -51,5 +51,4 @@ sealed interface Screen {
5151
@Serializable
5252
data object Debug : Settings
5353
}
54-
55-
}
54+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2025-2026 NewPipe e.V. <https://newpipe-ev.de>
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package org.schabi.newpipe.navigation
7+
8+
import androidx.compose.material3.Text
9+
import androidx.compose.runtime.Composable
10+
import androidx.compose.ui.res.stringResource
11+
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
12+
import androidx.navigation3.runtime.entryProvider
13+
import androidx.navigation3.runtime.rememberNavBackStack
14+
import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
15+
import androidx.navigation3.ui.NavDisplay
16+
import org.schabi.newpipe.R
17+
import org.schabi.newpipe.ui.screens.DebugScreen
18+
import org.schabi.newpipe.ui.screens.SettingsScreen
19+
20+
@Composable
21+
fun SettingsNavigation(onExitSettings: () -> Unit) {
22+
val backStack = rememberNavBackStack(Screen.Settings.Home)
23+
24+
val handleBack: () -> Unit = {
25+
if (backStack.size > 1) {
26+
backStack.removeLastOrNull()
27+
} else {
28+
onExitSettings()
29+
}
30+
}
31+
32+
NavDisplay(
33+
backStack = backStack,
34+
onBack = handleBack,
35+
entryProvider = entryProvider {
36+
entry<Screen.Settings.Home> { SettingsScreen(backStack, handleBack) }
37+
entry<Screen.Settings.Player> { Text(stringResource(id = R.string.settings_category_player_title)) }
38+
entry<Screen.Settings.Behaviour> { Text(stringResource(id = R.string.settings_category_player_behavior_title)) }
39+
entry<Screen.Settings.Download> { Text(stringResource(id = R.string.settings_category_downloads_title)) }
40+
entry<Screen.Settings.LookFeel> { Text(stringResource(id = R.string.settings_category_look_and_feel_title)) }
41+
entry<Screen.Settings.HistoryCache> { Text(stringResource(id = R.string.settings_category_history_title)) }
42+
entry<Screen.Settings.Content> { Text(stringResource(id = R.string.settings_category_content_title)) }
43+
entry<Screen.Settings.Feed> { Text(stringResource(id = R.string.settings_category_feed_title)) }
44+
entry<Screen.Settings.Services> { Text(stringResource(id = R.string.settings_category_services_title)) }
45+
entry<Screen.Settings.Language> { Text(stringResource(id = R.string.settings_category_language_title)) }
46+
entry<Screen.Settings.BackupRestore> { Text(stringResource(id = R.string.settings_category_backup_restore_title)) }
47+
entry<Screen.Settings.Updates> { Text(stringResource(id = R.string.settings_category_updates_title)) }
48+
entry<Screen.Settings.Debug> { DebugScreen(backStack) }
49+
},
50+
entryDecorators = listOf(
51+
rememberSaveableStateHolderNavEntryDecorator(),
52+
rememberViewModelStoreNavEntryDecorator()
53+
)
54+
)
55+
}

app/src/main/java/org/schabi/newpipe/settings/navigation/SettingsNavigation.kt

Lines changed: 0 additions & 56 deletions
This file was deleted.

app/src/main/java/org/schabi/newpipe/settings/screens/DebugScreen.kt

Lines changed: 0 additions & 125 deletions
This file was deleted.

0 commit comments

Comments
 (0)