From 5b244bcddd759de0804b34ebdda077b19cf1e086 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 6 Apr 2024 17:23:10 +0800 Subject: [PATCH] Flatten Navigation hiearchy (#4233) * Simplify code of Preferences.kt * Flatten navigation hierarchy To make implementation of TwoPaneNav, this commit flattens the navigation hierarchy. * Reorganize a bit * Use nested NavGraphs for sub-destinations Also add a dummy preference for TwoPane preparation * Change highlight logic to use .contains() * spotlessApply --- .../lawnchair/backup/ui/CreateBackupScreen.kt | 7 - .../backup/ui/RestoreBackupScreen.kt | 39 ++- .../gestures/config/GestureHandlerOption.kt | 2 +- .../app/lawnchair/override/CustomizeDialog.kt | 5 +- .../search/LawnchairAppSearchAlgorithm.kt | 1 + .../SmartspacePreferencesShortcut.kt | 2 +- .../smartspace/SmartspaceViewContainer.kt | 2 +- .../lawnchair/smartspace/SmartspacerView.kt | 2 +- .../smartspace/provider/NowPlayingProvider.kt | 2 +- .../smartspace/provider/SmartspaceProvider.kt | 2 +- .../ui/preferences/PreferenceGraph.kt | 26 -- .../lawnchair/ui/preferences/Preferences.kt | 239 +++++++++++++----- .../lawnchair/ui/preferences/about/About.kt | 12 +- .../acknowledgements/Acknowledgements.kt | 94 +++---- .../preferences/components/FontPreference.kt | 2 +- .../colorpreference/ColorPreference.kt | 2 +- .../ColorSelectionPreference.kt | 27 -- .../components/controls/PreferenceCategory.kt | 101 ++++---- .../destinations/AppDrawerPreferences.kt | 11 +- .../destinations/CustomIconShapePreference.kt | 9 +- .../destinations/DebugMenuPreferences.kt | 6 - .../destinations/DockPreferences.kt | 11 +- .../destinations/DummyPreference.kt | 22 ++ .../ExperimentalFeaturesPreferences.kt | 6 - .../destinations/FolderPreferences.kt | 6 - .../destinations/FontSelectionPreference.kt | 23 -- .../destinations/GeneralPreferences.kt | 17 +- .../destinations/GesturePreferences.kt | 6 - .../destinations/HiddenAppsPreferences.kt | 6 - .../destinations/HomeScreenGridPreferences.kt | 6 - .../destinations/HomeScreenPreferences.kt | 11 +- .../destinations/IconPackPreferences.kt | 6 - .../destinations/IconPickerPreference.kt | 22 -- .../IconShapePreference.kt | 18 +- .../destinations/PickAppForGesture.kt | 6 - .../destinations/PreferencesDashboard.kt | 39 ++- .../destinations/QuickstepPreferences.kt | 6 - .../destinations/SearchPreferences.kt | 6 - .../destinations/SearchProviderPreferences.kt | 6 - .../destinations/SelectIconPreference.kt | 27 +- .../destinations/SmartspacePreferences.kt | 10 - 41 files changed, 354 insertions(+), 499 deletions(-) delete mode 100644 lawnchair/src/app/lawnchair/ui/preferences/PreferenceGraph.kt create mode 100644 lawnchair/src/app/lawnchair/ui/preferences/destinations/DummyPreference.kt rename lawnchair/src/app/lawnchair/ui/preferences/{components => destinations}/IconShapePreference.kt (93%) diff --git a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt index 2318974691..38c4b9bf26 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt @@ -38,7 +38,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import androidx.navigation.NavGraphBuilder import app.lawnchair.backup.LawnchairBackup import app.lawnchair.preferences.PreferenceManager import app.lawnchair.ui.preferences.LocalNavController @@ -47,7 +46,6 @@ import app.lawnchair.ui.preferences.components.WallpaperPreview import app.lawnchair.ui.preferences.components.controls.FlagSwitchPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.BackHandler import app.lawnchair.util.checkAndRequestFilesPermission import app.lawnchair.util.filesAndStorageGranted @@ -58,11 +56,6 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberPermissionState import kotlinx.coroutines.launch - -fun NavGraphBuilder.createBackupGraph(route: String) { - preferenceGraph(route, { CreateBackupScreen(viewModel()) }) -} - @OptIn(ExperimentalPermissionsApi::class) @Composable fun CreateBackupScreen( diff --git a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt index 43258a190c..e62a7bc598 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt @@ -49,7 +49,6 @@ import app.lawnchair.ui.preferences.components.DummyLauncherBox import app.lawnchair.ui.preferences.components.controls.FlagSwitchPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.BackHandler import app.lawnchair.util.hasFlag import app.lawnchair.util.restartLauncher @@ -58,26 +57,24 @@ import java.util.Base64 import kotlinx.coroutines.launch fun NavGraphBuilder.restoreBackupGraph(route: String) { - preferenceGraph(route, {}) { subRoute -> - composable( - route = subRoute("{base64Uri}"), - arguments = listOf( - navArgument("base64Uri") { type = NavType.StringType }, - ), - ) { backStackEntry -> - val args = backStackEntry.arguments!! - val backupUri = remember { - val base64Uri = args.getString("base64Uri")!! - val backupUriString = String(Base64.getDecoder().decode(base64Uri)) - Uri.parse(backupUriString) - } - val viewModel: RestoreBackupViewModel = viewModel() - DisposableEffect(key1 = null) { - viewModel.init(backupUri) - onDispose { } - } - RestoreBackupScreen() + composable( + route = "$route/{base64Uri}", + arguments = listOf( + navArgument("base64Uri") { type = NavType.StringType }, + ), + ) { backStackEntry -> + val args = backStackEntry.arguments!! + val backupUri = remember { + val base64Uri = args.getString("base64Uri")!! + val backupUriString = String(Base64.getDecoder().decode(base64Uri)) + Uri.parse(backupUriString) } + val viewModel: RestoreBackupViewModel = viewModel() + DisposableEffect(key1 = null) { + viewModel.init(backupUri) + onDispose { } + } + RestoreBackupScreen() } } @@ -224,7 +221,7 @@ fun restoreBackupOpener(): () -> Unit { val uri = it.data?.data ?: return@rememberLauncherForActivityResult val base64Uri = Base64.getEncoder().encodeToString(uri.toString().toByteArray()) - navController.navigate("/${Routes.RESTORE_BACKUP}/$base64Uri/") + navController.navigate("${Routes.RESTORE_BACKUP}/$base64Uri") } return { diff --git a/lawnchair/src/app/lawnchair/gestures/config/GestureHandlerOption.kt b/lawnchair/src/app/lawnchair/gestures/config/GestureHandlerOption.kt index 2633ef6c1f..e80530ba69 100644 --- a/lawnchair/src/app/lawnchair/gestures/config/GestureHandlerOption.kt +++ b/lawnchair/src/app/lawnchair/gestures/config/GestureHandlerOption.kt @@ -35,7 +35,7 @@ sealed class GestureHandlerOption( GestureHandlerConfig.OpenApp::class.java, ) { override suspend fun buildConfig(activity: Activity): GestureHandlerConfig? { - val intent = PreferenceActivity.createIntent(activity, "/${Routes.PICK_APP_FOR_GESTURE}/") + val intent = PreferenceActivity.createIntent(activity, "${Routes.PICK_APP_FOR_GESTURE}") val result = BlankActivity.startBlankActivityForResult(activity, intent) val configString = result.data?.getStringExtra("config") ?: return null return kotlinxJson.decodeFromString(configString) diff --git a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt index 205821d345..80aaa8d356 100644 --- a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt +++ b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt @@ -2,6 +2,7 @@ package app.lawnchair.override import android.app.Activity import android.graphics.drawable.Drawable +import android.util.Log import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.Image @@ -125,8 +126,10 @@ fun CustomizeAppDialog( onClose() } + Log.d("TEST", "${Routes.SELECT_ICON}/$componentKey") + val openIconPicker = { - val destination = "/${Routes.SELECT_ICON}/$componentKey/" + val destination = "${Routes.SELECT_ICON}/$componentKey/" request.launch(PreferenceActivity.createIntent(context, destination)) } diff --git a/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt index d0abba48fa..c53b00c945 100644 --- a/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt @@ -143,6 +143,7 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c } searchTargets.add(generateSearchTarget.getHeaderTarget(SPACE)) + searchTargets.add(generateSearchTarget.getStartPageSearchItem(query)) generateSearchTarget.getMarketSearchItem(query)?.let { searchTargets.add(it) } diff --git a/lawnchair/src/app/lawnchair/smartspace/SmartspacePreferencesShortcut.kt b/lawnchair/src/app/lawnchair/smartspace/SmartspacePreferencesShortcut.kt index 5cb31f1f91..24753ddddc 100644 --- a/lawnchair/src/app/lawnchair/smartspace/SmartspacePreferencesShortcut.kt +++ b/lawnchair/src/app/lawnchair/smartspace/SmartspacePreferencesShortcut.kt @@ -9,7 +9,7 @@ class SmartspacePreferencesShortcut : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - startActivity(PreferenceActivity.createIntent(this, "/${Routes.SMARTSPACE_WIDGET}/")) + startActivity(PreferenceActivity.createIntent(this, "${Routes.SMARTSPACE_WIDGET}")) finish() } } diff --git a/lawnchair/src/app/lawnchair/smartspace/SmartspaceViewContainer.kt b/lawnchair/src/app/lawnchair/smartspace/SmartspaceViewContainer.kt index aa014ea5f3..9649645aa0 100644 --- a/lawnchair/src/app/lawnchair/smartspace/SmartspaceViewContainer.kt +++ b/lawnchair/src/app/lawnchair/smartspace/SmartspaceViewContainer.kt @@ -52,7 +52,7 @@ class SmartspaceViewContainer @JvmOverloads constructor( R.drawable.ic_setting, StatsLogManager.LauncherEvent.IGNORE, ) { - context.startActivity(PreferenceActivity.createIntent(context, "/${Routes.SMARTSPACE}/")) + context.startActivity(PreferenceActivity.createIntent(context, "${Routes.SMARTSPACE}")) true } diff --git a/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt b/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt index 571ad6696d..2a9b9779e9 100644 --- a/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt +++ b/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt @@ -124,7 +124,7 @@ class SmartspacerView(context: Context, attrs: AttributeSet?) : BcSmartspaceView R.drawable.ic_setting, StatsLogManager.LauncherEvent.IGNORE, ) { - context.startActivity(PreferenceActivity.createIntent(context, "/${Routes.SMARTSPACE}/")) + context.startActivity(PreferenceActivity.createIntent(context, "${Routes.SMARTSPACE}")) true } } diff --git a/lawnchair/src/app/lawnchair/smartspace/provider/NowPlayingProvider.kt b/lawnchair/src/app/lawnchair/smartspace/provider/NowPlayingProvider.kt index 6b828dad7f..40a9cbee10 100644 --- a/lawnchair/src/app/lawnchair/smartspace/provider/NowPlayingProvider.kt +++ b/lawnchair/src/app/lawnchair/smartspace/provider/NowPlayingProvider.kt @@ -65,7 +65,7 @@ class NowPlayingProvider(context: Context) : SmartspaceDataSource( notificationDotsEnabled(context = context).first().not() override suspend fun startSetup(activity: Activity) { - val intent = PreferenceActivity.createIntent(activity, "/${Routes.GENERAL}/") + val intent = PreferenceActivity.createIntent(activity, "${Routes.GENERAL}") val message = activity.getString( R.string.event_provider_missing_notification_dots, activity.getString(providerName), diff --git a/lawnchair/src/app/lawnchair/smartspace/provider/SmartspaceProvider.kt b/lawnchair/src/app/lawnchair/smartspace/provider/SmartspaceProvider.kt index 673022a1f3..5cd63096b9 100644 --- a/lawnchair/src/app/lawnchair/smartspace/provider/SmartspaceProvider.kt +++ b/lawnchair/src/app/lawnchair/smartspace/provider/SmartspaceProvider.kt @@ -47,7 +47,7 @@ class SmartspaceProvider private constructor(context: Context) { headerAction = SmartspaceAction( id = "smartspaceSetupAction", title = context.getString(R.string.smartspace_requires_setup), - intent = PreferenceActivity.createIntent(context, "/${Routes.SMARTSPACE}/"), + intent = PreferenceActivity.createIntent(context, "${Routes.SMARTSPACE}"), ), score = 999f, featureType = SmartspaceTarget.FeatureType.FEATURE_TIPS, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGraph.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGraph.kt deleted file mode 100644 index aa5ea21a08..0000000000 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGraph.kt +++ /dev/null @@ -1,26 +0,0 @@ -package app.lawnchair.ui.preferences - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.compositionLocalOf -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable - -inline fun NavGraphBuilder.preferenceGraph( - route: String, - crossinline root: @Composable () -> Unit, - crossinline block: NavGraphBuilder.(subRoute: (String) -> String) -> Unit = { }, -) { - val subRoute: (String) -> String = { name -> "$route$name/" } - composable(route = route) { - CompositionLocalProvider(LocalRoute provides route) { - root() - } - } - block(subRoute) -} - -val LocalRoute = compositionLocalOf { "" } - -@Composable -fun subRoute(name: String) = "${LocalRoute.current}$name/" diff --git a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt index 62d3648d5c..f173018128 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt @@ -24,35 +24,59 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.LayoutDirection import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController +import androidx.navigation.NavHostController +import androidx.navigation.NavType import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import app.lawnchair.backup.ui.createBackupGraph +import androidx.navigation.navArgument +import androidx.navigation.navigation +import app.lawnchair.backup.ui.CreateBackupScreen import app.lawnchair.backup.ui.restoreBackupGraph -import app.lawnchair.ui.preferences.about.aboutGraph -import app.lawnchair.ui.preferences.components.colorpreference.colorSelectionGraph +import app.lawnchair.preferences.BasePreferenceManager +import app.lawnchair.preferences.preferenceManager +import app.lawnchair.ui.preferences.about.About +import app.lawnchair.ui.preferences.about.AboutRoutes +import app.lawnchair.ui.preferences.about.acknowledgements.Acknowledgements +import app.lawnchair.ui.preferences.components.colorpreference.ColorPreferenceModelList +import app.lawnchair.ui.preferences.components.colorpreference.ColorSelection +import app.lawnchair.ui.preferences.destinations.AppDrawerPreferences +import app.lawnchair.ui.preferences.destinations.AppDrawerRoutes +import app.lawnchair.ui.preferences.destinations.CustomIconShapePreference +import app.lawnchair.ui.preferences.destinations.DebugMenuPreferences +import app.lawnchair.ui.preferences.destinations.DockPreferences +import app.lawnchair.ui.preferences.destinations.DockRoutes +import app.lawnchair.ui.preferences.destinations.DummyPreference +import app.lawnchair.ui.preferences.destinations.ExperimentalFeaturesPreferences +import app.lawnchair.ui.preferences.destinations.FolderPreferences +import app.lawnchair.ui.preferences.destinations.FontSelection +import app.lawnchair.ui.preferences.destinations.GeneralPreferences +import app.lawnchair.ui.preferences.destinations.GeneralRoutes +import app.lawnchair.ui.preferences.destinations.GesturePreferences +import app.lawnchair.ui.preferences.destinations.HiddenAppsPreferences +import app.lawnchair.ui.preferences.destinations.HomeScreenGridPreferences +import app.lawnchair.ui.preferences.destinations.HomeScreenPreferences +import app.lawnchair.ui.preferences.destinations.HomeScreenRoutes +import app.lawnchair.ui.preferences.destinations.IconPackPreferences +import app.lawnchair.ui.preferences.destinations.IconPickerPreference +import app.lawnchair.ui.preferences.destinations.IconShapePreference +import app.lawnchair.ui.preferences.destinations.IconShapeRoutes +import app.lawnchair.ui.preferences.destinations.PickAppForGesture import app.lawnchair.ui.preferences.destinations.PreferencesDashboard -import app.lawnchair.ui.preferences.destinations.appDrawerGraph -import app.lawnchair.ui.preferences.destinations.debugMenuGraph -import app.lawnchair.ui.preferences.destinations.dockGraph -import app.lawnchair.ui.preferences.destinations.experimentalFeaturesGraph -import app.lawnchair.ui.preferences.destinations.folderGraph -import app.lawnchair.ui.preferences.destinations.fontSelectionGraph -import app.lawnchair.ui.preferences.destinations.generalGraph -import app.lawnchair.ui.preferences.destinations.gesturesGraph -import app.lawnchair.ui.preferences.destinations.homeScreenGraph -import app.lawnchair.ui.preferences.destinations.iconPickerGraph -import app.lawnchair.ui.preferences.destinations.pickAppForGestureGraph -import app.lawnchair.ui.preferences.destinations.quickstepGraph -import app.lawnchair.ui.preferences.destinations.searchGraph -import app.lawnchair.ui.preferences.destinations.selectIconGraph -import app.lawnchair.ui.preferences.destinations.smartspaceGraph -import app.lawnchair.ui.preferences.destinations.smartspaceWidgetGraph +import app.lawnchair.ui.preferences.destinations.QuickstepPreferences +import app.lawnchair.ui.preferences.destinations.SearchPreferences +import app.lawnchair.ui.preferences.destinations.SearchProviderPreferences +import app.lawnchair.ui.preferences.destinations.SelectIconPreference +import app.lawnchair.ui.preferences.destinations.SmartspacePreferences import app.lawnchair.ui.util.ProvideBottomSheetHandler import app.lawnchair.util.ProvideLifecycleState +import com.android.launcher3.util.ComponentKey import soup.compose.material.motion.animation.materialSharedAxisXIn import soup.compose.material.motion.animation.materialSharedAxisXOut import soup.compose.material.motion.animation.rememberSlideDistance @@ -88,6 +112,8 @@ val LocalPreferenceInteractor = staticCompositionLocalOf { error("CompositionLocal LocalPreferenceInteractor not present") } +val LocalIsExpandedScreen = compositionLocalOf { false } + @Composable fun Preferences( windowSizeClass: WindowSizeClass, @@ -97,65 +123,156 @@ fun Preferences( val navController = rememberNavController() val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl val slideDistance = rememberSlideDistance() - val isExpandedScreen = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Expanded - Providers(isExpandedScreen) { + Providers { Surface( modifier = modifier, ) { CompositionLocalProvider( LocalNavController provides navController, LocalPreferenceInteractor provides interactor, + LocalIsExpandedScreen provides isExpandedScreen, ) { - NavHost( - navController = navController, - startDestination = "/", - enterTransition = { materialSharedAxisXIn(!isRtl, slideDistance) }, - exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, - popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, - popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, - ) { - preferenceGraph(route = "/", { PreferencesDashboard() }) { subRoute -> - generalGraph(route = subRoute(Routes.GENERAL)) - homeScreenGraph(route = subRoute(Routes.HOME_SCREEN)) - dockGraph(route = subRoute(Routes.DOCK)) - appDrawerGraph(route = subRoute(Routes.APP_DRAWER)) - folderGraph(route = subRoute(Routes.FOLDERS)) - quickstepGraph(route = subRoute(Routes.QUICKSTEP)) - aboutGraph(route = subRoute(Routes.ABOUT)) - fontSelectionGraph(route = subRoute(Routes.FONT_SELECTION)) - colorSelectionGraph(route = subRoute(Routes.COLOR_SELECTION)) - debugMenuGraph(route = subRoute(Routes.DEBUG_MENU)) - selectIconGraph(route = subRoute(Routes.SELECT_ICON)) - iconPickerGraph(route = subRoute(Routes.ICON_PICKER)) - experimentalFeaturesGraph(route = subRoute(Routes.EXPERIMENTAL_FEATURES)) - smartspaceGraph(route = subRoute(Routes.SMARTSPACE)) - smartspaceWidgetGraph(route = subRoute(Routes.SMARTSPACE_WIDGET)) - createBackupGraph(route = subRoute(Routes.CREATE_BACKUP)) - restoreBackupGraph(route = subRoute(Routes.RESTORE_BACKUP)) - pickAppForGestureGraph(route = subRoute(Routes.PICK_APP_FOR_GESTURE)) - gesturesGraph(route = subRoute(Routes.GESTURES)) - searchGraph(route = subRoute(Routes.SEARCH)) - } - } + InnerNavigation(navController, isRtl, slideDistance) } } } } @Composable -private fun Providers( - isExpandedScreen: Boolean = false, - content: @Composable () -> Unit, +private fun InnerNavigation( + navController: NavHostController, + isRtl: Boolean, + slideDistance: Int, ) { - CompositionLocalProvider(LocalIsExpandedScreen provides isExpandedScreen) { - ProvideLifecycleState { - ProvideBottomSheetHandler { - content() - } + NavHost( + navController = navController, + startDestination = "/", + enterTransition = { materialSharedAxisXIn(!isRtl, slideDistance) }, + exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, + popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, + popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, + ) { + composable(route = "/") { + PreferencesDashboard( + currentRoute = navController.currentDestination?.route ?: "/", + onNavigate = { + navController.navigate(it) + }, + ) } + composable(route = "dummy") { + DummyPreference() + } + + navigation(route = Routes.GENERAL, startDestination = "main") { + composable(route = "main") { + GeneralPreferences() + } + composable(route = GeneralRoutes.ICON_PACK) { IconPackPreferences() } + composable(route = GeneralRoutes.ICON_SHAPE) { IconShapePreference() } + composable(route = IconShapeRoutes.CUSTOM_ICON_SHAPE_CREATOR) { CustomIconShapePreference() } + } + + navigation(route = Routes.HOME_SCREEN, startDestination = "main") { + composable(route = "main") { HomeScreenPreferences() } + composable(route = HomeScreenRoutes.GRID) { HomeScreenGridPreferences() } + } + + navigation(route = Routes.DOCK, startDestination = "main") { + composable(route = "main") { DockPreferences() } + composable(route = DockRoutes.SEARCH_PROVIDER) { SearchProviderPreferences() } + } + + composable(route = Routes.SMARTSPACE) { SmartspacePreferences(fromWidget = false) } + composable(route = Routes.SMARTSPACE_WIDGET) { SmartspacePreferences(fromWidget = true) } + + navigation(route = Routes.APP_DRAWER, startDestination = "main") { + composable(route = "main") { AppDrawerPreferences() } + composable(route = AppDrawerRoutes.HIDDEN_APPS) { HiddenAppsPreferences() } + } + + composable(route = Routes.SEARCH) { SearchPreferences() } + composable(route = Routes.FOLDERS) { FolderPreferences() } + + composable(route = Routes.GESTURES) { GesturePreferences() } + composable(route = Routes.PICK_APP_FOR_GESTURE) { PickAppForGesture() } + + composable(route = Routes.QUICKSTEP) { QuickstepPreferences() } + + composable(route = Routes.ABOUT) { About() } + composable(route = AboutRoutes.LICENSES) { Acknowledgements() } + composable( + route = "${Routes.FONT_SELECTION}/{prefKey}", + arguments = listOf( + navArgument("prefKey") { type = NavType.StringType }, + ), + ) { backStackEntry -> + val args = backStackEntry.arguments!! + val prefKey = args.getString("prefKey")!! + val pref = preferenceManager().prefsMap[prefKey] + as? BasePreferenceManager.FontPref ?: return@composable + FontSelection(pref) + } + + composable(route = Routes.DEBUG_MENU) { DebugMenuPreferences() } + + composable( + route = "${Routes.SELECT_ICON}/{packageName}/{nameAndUser}/", + arguments = listOf( + navArgument("packageName") { type = NavType.StringType }, + navArgument("nameAndUser") { type = NavType.StringType }, + ), + ) { backStackEntry -> + val args = backStackEntry.arguments!! + val packageName = args.getString("packageName") + val nameAndUser = args.getString("nameAndUser") + val key = ComponentKey.fromString("$packageName/$nameAndUser")!! + SelectIconPreference(key) + } + composable(route = Routes.ICON_PICKER) { IconPickerPreference(packageName = "") } + composable( + route = "${Routes.ICON_PICKER}/{packageName}", + arguments = listOf( + navArgument("packageName") { type = NavType.StringType }, + ), + ) { backStackEntry -> + val args = backStackEntry.arguments!! + val packageName = args.getString("packageName")!! + IconPickerPreference(packageName) + } + + composable(route = Routes.EXPERIMENTAL_FEATURES) { ExperimentalFeaturesPreferences() } + composable( + route = "${Routes.COLOR_SELECTION}/{prefKey}", + arguments = listOf( + navArgument("prefKey") { type = NavType.StringType }, + ), + ) { backStackEntry -> + val args = backStackEntry.arguments!! + val prefKey = args.getString("prefKey")!! + val modelList = ColorPreferenceModelList.INSTANCE.get(LocalContext.current) + val model = modelList[prefKey] + ColorSelection( + label = stringResource(id = model.labelRes), + preference = model.prefObject, + dynamicEntries = model.dynamicEntries, + ) + } + + composable(route = Routes.CREATE_BACKUP) { CreateBackupScreen(viewModel()) } + restoreBackupGraph(route = Routes.RESTORE_BACKUP) } } -val LocalIsExpandedScreen = compositionLocalOf { false } +@Composable +private fun Providers( + content: @Composable () -> Unit, +) { + ProvideLifecycleState { + ProvideBottomSheetHandler { + content() + } + } +} diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt index 7fda3ffdbc..22e4f33c79 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt @@ -43,14 +43,10 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.core.net.toUri -import androidx.navigation.NavGraphBuilder -import app.lawnchair.ui.preferences.about.acknowledgements.licensesGraph import app.lawnchair.ui.preferences.components.NavigationActionPreference import app.lawnchair.ui.preferences.components.controls.ClickablePreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import com.android.launcher3.BuildConfig import com.android.launcher3.R @@ -209,12 +205,6 @@ object AboutRoutes { const val LICENSES = "licenses" } -fun NavGraphBuilder.aboutGraph(route: String) { - preferenceGraph(route, { About() }) { subRoute -> - licensesGraph(route = subRoute(AboutRoutes.LICENSES)) - } -} - @OptIn(ExperimentalFoundationApi::class) @Composable fun About( @@ -294,7 +284,7 @@ fun About( PreferenceGroup { NavigationActionPreference( label = stringResource(id = R.string.acknowledgements), - destination = subRoute(name = AboutRoutes.LICENSES), + destination = AboutRoutes.LICENSES, ) ClickablePreference( label = stringResource(id = R.string.translate), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt index ef992d940e..a8e03c86d0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt @@ -19,6 +19,7 @@ package app.lawnchair.ui.preferences.about.acknowledgements import androidx.compose.animation.Crossfade import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text @@ -36,32 +37,15 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import app.lawnchair.ui.preferences.LocalNavController +import app.lawnchair.ui.ModalBottomSheetContent import app.lawnchair.ui.preferences.LocalPreferenceInteractor import app.lawnchair.ui.preferences.components.layout.LoadingScreen -import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceLayoutLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute +import app.lawnchair.ui.util.bottomSheetHandler import com.android.launcher3.R -fun NavGraphBuilder.licensesGraph(route: String) { - preferenceGraph(route, { Acknowledgements() }) { subRoute -> - composable( - route = subRoute("{licenseIndex}"), - arguments = listOf(navArgument("licenseIndex") { type = NavType.IntType }), - ) { backStackEntry -> - NoticePage(index = backStackEntry.arguments!!.getInt("licenseIndex")) - } - } -} - @Composable fun Acknowledgements( modifier: Modifier = Modifier, @@ -90,8 +74,7 @@ fun OssLibraryItem( index: Int, modifier: Modifier = Modifier, ) { - val navController = LocalNavController.current - val destination = subRoute(name = "$index") + val bottomSheetHandler = bottomSheetHandler PreferenceTemplate( title = { @@ -102,53 +85,60 @@ fun OssLibraryItem( ) }, modifier = modifier - .clickable { navController.navigate(route = destination) }, + .clickable { + bottomSheetHandler.show { + NoticePage(ossLibrary = ossLibrary) + } + }, ) } @Composable fun NoticePage( - index: Int, + ossLibrary: OssLibrary?, modifier: Modifier = Modifier, ) { - val ossLibraries by LocalPreferenceInteractor.current.ossLibraries.collectAsState() - val ossLibrary = ossLibraries.getOrNull(index) val dataState = ossLibrary?.let { loadNotice(ossLibrary = it) } val data = dataState?.value - PreferenceLayout( - label = ossLibrary?.name ?: stringResource(id = R.string.loading), + ModalBottomSheetContent( + title = { + Text(text = ossLibrary?.name ?: stringResource(id = R.string.loading)) + }, + buttons = {}, modifier = modifier, ) { - Crossfade(targetState = data, label = "") { it -> - it ?: return@Crossfade - val uriHandler = LocalUriHandler.current - val layoutResult = remember { mutableStateOf(null) } - val pressIndicator = Modifier.pointerInput(Unit) { - detectTapGestures { pos -> - layoutResult.value?.let { layoutResult -> - val position = layoutResult.getOffsetForPosition(pos) - val annotation = - it.notice.getStringAnnotations(position, position).firstOrNull() - if (annotation?.tag == "URL") { - uriHandler.openUri(annotation.item) + Column { + Crossfade(targetState = data, label = "") { it -> + it ?: return@Crossfade + val uriHandler = LocalUriHandler.current + val layoutResult = remember { mutableStateOf(null) } + val pressIndicator = Modifier.pointerInput(Unit) { + detectTapGestures { pos -> + layoutResult.value?.let { layoutResult -> + val position = layoutResult.getOffsetForPosition(pos) + val annotation = + it.notice.getStringAnnotations(position, position).firstOrNull() + if (annotation?.tag == "URL") { + uriHandler.openUri(annotation.item) + } } } } - } - Text( - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp, top = 8.dp, bottom = 16.dp) - .then(pressIndicator), - text = it.notice, - fontFamily = FontFamily.Monospace, - fontSize = 14.sp, - onTextLayout = { - layoutResult.value = it - }, - ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp, end = 16.dp, top = 8.dp, bottom = 16.dp) + .then(pressIndicator), + text = it.notice, + fontFamily = FontFamily.Monospace, + fontSize = 14.sp, + onTextLayout = { + layoutResult.value = it + }, + ) + } } } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt index 9877d19976..b246857dc5 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt @@ -27,6 +27,6 @@ fun FontPreference( ) }, modifier = modifier - .clickable { navController.navigate(route = "/fontSelection/${fontPref.key}/") }, + .clickable { navController.navigate(route = "fontSelection/${fontPref.key}") }, ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt index c81b1c43ff..61879e733c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt @@ -53,6 +53,6 @@ fun ColorPreference( description = { Text(text = adapter.state.value.colorPreferenceEntry.label()) }, - modifier = modifier.clickable { navController.navigate(route = "/colorSelection/${model.prefObject.key.name}/") }, + modifier = modifier.clickable { navController.navigate(route = "colorSelection/${model.prefObject.key.name}") }, ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt index 56cea00627..61febb07d6 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt @@ -22,10 +22,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument import app.lawnchair.preferences.getAdapter import app.lawnchair.theme.color.ColorOption import app.lawnchair.ui.preferences.components.colorpreference.pickers.CustomColorPicker @@ -34,34 +30,11 @@ import app.lawnchair.ui.preferences.components.colorpreference.pickers.SwatchGri import app.lawnchair.ui.preferences.components.layout.BottomSpacer import app.lawnchair.ui.preferences.components.layout.Chip import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R import com.patrykmichalik.opto.domain.Preference import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch -fun NavGraphBuilder.colorSelectionGraph(route: String) { - preferenceGraph(route, {}) { subRoute -> - composable( - route = subRoute("{prefKey}"), - arguments = listOf( - navArgument("prefKey") { type = NavType.StringType }, - ), - ) { backStackEntry -> - - val args = backStackEntry.arguments!! - val prefKey = args.getString("prefKey")!! - val modelList = ColorPreferenceModelList.INSTANCE.get(LocalContext.current) - val model = modelList[prefKey] - ColorSelection( - label = stringResource(id = model.labelRes), - preference = model.prefObject, - dynamicEntries = model.dynamicEntries, - ) - } - } -} - @Composable fun ColorSelection( label: String, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt index 73b333ac3e..2c613cea8e 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt @@ -17,10 +17,10 @@ package app.lawnchair.ui.preferences.components.controls import androidx.annotation.DrawableRes +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon @@ -32,78 +32,63 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import app.lawnchair.ui.preferences.LocalNavController import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate -import app.lawnchair.ui.preferences.subRoute import app.lawnchair.ui.theme.LawnchairTheme import app.lawnchair.ui.util.PreviewLawnchair import com.android.launcher3.R @Composable fun PreferenceCategory( - label: String, - @DrawableRes iconResource: Int, - route: String, - description: String? = null, -) { - val navController = LocalNavController.current - val resolvedRoute = subRoute(name = route) - - PreferenceCategory( - label = label, - iconResource = iconResource, - onNavigate = { navController.navigate(resolvedRoute) }, - description = description, - ) -} - -@Composable -private fun PreferenceCategory( label: String, @DrawableRes iconResource: Int, onNavigate: () -> Unit, modifier: Modifier = Modifier, + isSelected: Boolean = false, description: String? = null, ) { - Row( - modifier = modifier.padding(horizontal = 16.dp), - ) { - PreferenceTemplate( - modifier = Modifier - .clip(MaterialTheme.shapes.large) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = ripple( - bounded = true, - color = MaterialTheme.colorScheme.primaryContainer, - ), - ) { onNavigate() }, - verticalPadding = 14.dp, - title = { - Text(text = label) - }, - description = { - if (description != null) { - Text(text = description) - } - }, - startWidget = { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier.size(32.dp), - ) { - Icon( - painter = painterResource(id = iconResource), - contentDescription = null, - modifier = Modifier.size(24.dp), - tint = MaterialTheme.colorScheme.primary, - ) - } - }, - ) - } + PreferenceTemplate( + modifier = modifier + .padding(horizontal = 16.dp) + .clip(MaterialTheme.shapes.large) + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = ripple( + bounded = true, + color = MaterialTheme.colorScheme.primaryContainer, + ), + ) { onNavigate() } + .background( + if (isSelected) MaterialTheme.colorScheme.surfaceVariant else Color.Transparent, + ), + verticalPadding = 14.dp, + title = { + Text( + text = label, + color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onBackground, + ) + }, + description = { + if (description != null) { + Text(text = description) + } + }, + startWidget = { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.size(32.dp), + ) { + Icon( + painter = painterResource(id = iconResource), + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = MaterialTheme.colorScheme.primary, + ) + } + }, + ) } @PreviewLawnchair diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/AppDrawerPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/AppDrawerPreferences.kt index 3a7f81fc5e..a9e5846463 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/AppDrawerPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/AppDrawerPreferences.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.not import app.lawnchair.preferences.preferenceManager @@ -32,20 +31,12 @@ import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import com.android.launcher3.R object AppDrawerRoutes { const val HIDDEN_APPS = "hiddenApps" } -fun NavGraphBuilder.appDrawerGraph(route: String) { - preferenceGraph(route, { AppDrawerPreferences() }) { subRoute -> - hiddenAppsGraph(route = subRoute(AppDrawerRoutes.HIDDEN_APPS)) - } -} - @Composable fun AppDrawerPreferences( modifier: Modifier = Modifier, @@ -88,7 +79,7 @@ fun AppDrawerPreferences( NavigationActionPreference( label = stringResource(id = R.string.hidden_apps_label), subtitle = resources.getQuantityString(R.plurals.apps_count, hiddenApps.size, hiddenApps.size), - destination = subRoute(name = AppDrawerRoutes.HIDDEN_APPS), + destination = AppDrawerRoutes.HIDDEN_APPS, ) } PreferenceGroup(heading = stringResource(id = R.string.grid)) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/CustomIconShapePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/CustomIconShapePreference.kt index 4c3456289a..922480b1ed 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/CustomIconShapePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/CustomIconShapePreference.kt @@ -38,13 +38,11 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.navigation.NavGraphBuilder import app.lawnchair.icons.shape.IconCornerShape import app.lawnchair.icons.shape.IconShape import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.ui.ModalBottomSheetContent -import app.lawnchair.ui.preferences.components.IconShapePreview import app.lawnchair.ui.preferences.components.controls.getSteps import app.lawnchair.ui.preferences.components.controls.snapSliderValue import app.lawnchair.ui.preferences.components.layout.BottomSpacer @@ -52,19 +50,14 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceDivider import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.ui.util.LocalBottomSheetHandler import app.lawnchair.util.copyToClipboard import app.lawnchair.util.getClipboardContent import com.android.launcher3.R import kotlin.math.roundToInt -fun NavGraphBuilder.customIconShapePreferenceGraph(route: String) { - preferenceGraph(route, { CustomIconShapePreference() }) -} - @Composable -private fun CustomIconShapePreference( +fun CustomIconShapePreference( modifier: Modifier = Modifier, ) { val preferenceManager2 = preferenceManager2() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt index 75dab0a372..ce19055943 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt @@ -6,7 +6,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.datastore.preferences.core.Preferences -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager @@ -18,15 +17,10 @@ import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.controls.TextPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.settings.SettingsActivity import com.android.launcher3.uioverrides.flags.DeveloperOptionsFragment import com.patrykmichalik.opto.domain.Preference -fun NavGraphBuilder.debugMenuGraph(route: String) { - preferenceGraph(route, { DebugMenuPreferences() }) -} - /** * A screen to house unfinished preferences and debug flags */ diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DockPreferences.kt index 378d6676ad..c3c053182b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DockPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DockPreferences.kt @@ -21,7 +21,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.hotseat.HotseatMode import app.lawnchair.hotseat.LawnchairHotseat import app.lawnchair.preferences.PreferenceAdapter @@ -39,8 +38,6 @@ import app.lawnchair.ui.preferences.components.layout.DividerColumn import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import com.android.launcher3.R import kotlinx.collections.immutable.toPersistentList @@ -48,12 +45,6 @@ object DockRoutes { const val SEARCH_PROVIDER = "searchProvider" } -fun NavGraphBuilder.dockGraph(route: String) { - preferenceGraph(route, { DockPreferences() }) { subRoute -> - searchProviderGraph(subRoute(DockRoutes.SEARCH_PROVIDER)) - } -} - @Composable fun DockPreferences( modifier: Modifier = Modifier, @@ -87,7 +78,7 @@ fun DockPreferences( val hotseatQsbProviderAdapter by preferenceManager2().hotseatQsbProvider.getAdapter() NavigationActionPreference( label = stringResource(R.string.search_provider), - destination = subRoute(DockRoutes.SEARCH_PROVIDER), + destination = DockRoutes.SEARCH_PROVIDER, subtitle = stringResource( id = QsbSearchProvider.values() .first { it == hotseatQsbProviderAdapter } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DummyPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DummyPreference.kt new file mode 100644 index 0000000000..8e1de9e622 --- /dev/null +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DummyPreference.kt @@ -0,0 +1,22 @@ +package app.lawnchair.ui.preferences.destinations + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import app.lawnchair.ui.preferences.components.layout.PreferenceLayout +import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate + +@Composable +fun DummyPreference( + modifier: Modifier = Modifier, +) { + PreferenceLayout( + label = "", + backArrowVisible = false, + modifier = modifier, + ) { + PreferenceTemplate(title = { + Text("Tap a preference in the left hand menu") + }) + } +} diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt index 1d1af8a04e..02657f2e82 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt @@ -3,20 +3,14 @@ package app.lawnchair.ui.preferences.destinations import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R -fun NavGraphBuilder.experimentalFeaturesGraph(route: String) { - preferenceGraph(route, { ExperimentalFeaturesPreferences() }) -} - @Composable fun ExperimentalFeaturesPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/FolderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/FolderPreferences.kt index b8cf516d99..c3b6f1b243 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/FolderPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/FolderPreferences.kt @@ -19,7 +19,6 @@ package app.lawnchair.ui.preferences.destinations import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.preferenceManager2 @@ -29,13 +28,8 @@ import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R -fun NavGraphBuilder.folderGraph(route: String) { - preferenceGraph(route, { FolderPreferences() }) -} - @Composable fun FolderPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/FontSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/FontSelectionPreference.kt index 1c268558a3..dc27622ca0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/FontSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/FontSelectionPreference.kt @@ -42,16 +42,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument import app.lawnchair.font.FontCache import app.lawnchair.font.googlefonts.GoogleFontsListing import app.lawnchair.preferences.BasePreferenceManager import app.lawnchair.preferences.PreferenceAdapter import app.lawnchair.preferences.getAdapter -import app.lawnchair.preferences.preferenceManager import app.lawnchair.ui.AndroidText import app.lawnchair.ui.OverflowMenu import app.lawnchair.ui.preferences.components.layout.PreferenceDivider @@ -60,26 +55,8 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceSearchScaffold import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R -fun NavGraphBuilder.fontSelectionGraph(route: String) { - preferenceGraph(route, {}) { subRoute -> - composable( - route = subRoute("{prefKey}"), - arguments = listOf( - navArgument("prefKey") { type = NavType.StringType }, - ), - ) { backStackEntry -> - val args = backStackEntry.arguments!! - val prefKey = args.getString("prefKey")!! - val pref = preferenceManager().prefsMap[prefKey] - as? BasePreferenceManager.FontPref ?: return@composable - FontSelection(pref) - } - } -} - private enum class ContentType { ADD_BUTTON, FONT, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt index 03d2feb4d7..9b48958a96 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.asState @@ -31,7 +30,6 @@ import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.theme.color.ColorOption import app.lawnchair.ui.preferences.LocalPreferenceInteractor import app.lawnchair.ui.preferences.components.FontPreference -import app.lawnchair.ui.preferences.components.IconShapePreview import app.lawnchair.ui.preferences.components.NavigationActionPreference import app.lawnchair.ui.preferences.components.NotificationDotsPreference import app.lawnchair.ui.preferences.components.ThemePreference @@ -40,16 +38,12 @@ import app.lawnchair.ui.preferences.components.colorpreference.ColorPreference import app.lawnchair.ui.preferences.components.controls.SliderPreference import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.controls.WarningPreference -import app.lawnchair.ui.preferences.components.iconShapeEntries -import app.lawnchair.ui.preferences.components.iconShapeGraph import app.lawnchair.ui.preferences.components.layout.DividerColumn import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.notificationDotsEnabled import app.lawnchair.ui.preferences.components.notificationServiceEnabled -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import com.android.launcher3.R object GeneralRoutes { @@ -57,13 +51,6 @@ object GeneralRoutes { const val ICON_SHAPE = "iconShape" } -fun NavGraphBuilder.generalGraph(route: String) { - preferenceGraph(route, { GeneralPreferences() }) { subRoute -> - iconPackGraph(route = subRoute(GeneralRoutes.ICON_PACK)) - iconShapeGraph(route = subRoute(GeneralRoutes.ICON_SHAPE)) - } -} - @Composable fun GeneralPreferences() { val context = LocalContext.current @@ -136,7 +123,7 @@ fun GeneralPreferences() { ) { NavigationActionPreference( label = stringResource(id = R.string.icon_style), - destination = subRoute(name = GeneralRoutes.ICON_PACK), + destination = GeneralRoutes.ICON_PACK, subtitle = iconStyleSubtitle, ) ExpandAndShrink(visible = themedIconsEnabled) { @@ -148,7 +135,7 @@ fun GeneralPreferences() { } NavigationActionPreference( label = stringResource(id = R.string.icon_shape_label), - destination = subRoute(name = GeneralRoutes.ICON_SHAPE), + destination = GeneralRoutes.ICON_SHAPE, subtitle = iconShapeSubtitle, endWidget = { IconShapePreview(iconShape = iconShapeAdapter.state.value) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GesturePreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GesturePreferences.kt index 4b4f2c1a5e..1508d9fd66 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GesturePreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GesturePreferences.kt @@ -3,19 +3,13 @@ package app.lawnchair.ui.preferences.destinations import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.ui.preferences.components.GestureHandlerPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R -fun NavGraphBuilder.gesturesGraph(route: String) { - preferenceGraph(route, { GesturePreferences() }) -} - @Composable fun GesturePreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HiddenAppsPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HiddenAppsPreferences.kt index 4bc1395d22..24ef2f153d 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HiddenAppsPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HiddenAppsPreferences.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.ui.preferences.LocalIsExpandedScreen @@ -36,7 +35,6 @@ import app.lawnchair.ui.preferences.components.AppItemPlaceholder import app.lawnchair.ui.preferences.components.layout.PreferenceLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceScaffold import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.App import app.lawnchair.util.appComparator import app.lawnchair.util.appsState @@ -45,10 +43,6 @@ import java.util.Comparator.comparing import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.toPersistentSet -fun NavGraphBuilder.hiddenAppsGraph(route: String) { - preferenceGraph(route, { HiddenAppsPreferences() }) -} - @Composable fun HiddenAppsPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenGridPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenGridPreferences.kt index 08f2f3024b..02e401d6d7 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenGridPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenGridPreferences.kt @@ -19,7 +19,6 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.asPreferenceAdapter import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager @@ -28,14 +27,9 @@ import app.lawnchair.ui.preferences.components.GridOverridesPreview import app.lawnchair.ui.preferences.components.controls.SliderPreference import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.LauncherAppState import com.android.launcher3.R -fun NavGraphBuilder.homeScreenGridGraph(route: String) { - preferenceGraph(route, { HomeScreenGridPreferences() }) -} - @Composable fun HomeScreenGridPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt index e077efcdae..7fbf907088 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.data.iconoverride.IconOverrideRepository import app.lawnchair.nexuslauncher.OverlayCallbackImpl import app.lawnchair.preferences.getAdapter @@ -41,8 +40,6 @@ import app.lawnchair.ui.preferences.components.layout.DividerColumn import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import app.lawnchair.util.collectAsStateBlocking import com.android.launcher3.R import com.android.launcher3.Utilities @@ -52,12 +49,6 @@ object HomeScreenRoutes { const val GRID = "grid" } -fun NavGraphBuilder.homeScreenGraph(route: String) { - preferenceGraph(route, { HomeScreenPreferences() }) { subRoute -> - homeScreenGridGraph(route = subRoute(HomeScreenRoutes.GRID)) - } -} - @Composable fun HomeScreenPreferences( modifier: Modifier = Modifier, @@ -120,7 +111,7 @@ fun HomeScreenPreferences( val rows by prefs.workspaceRows.getAdapter() NavigationActionPreference( label = stringResource(id = R.string.home_screen_grid), - destination = subRoute(name = HomeScreenRoutes.GRID), + destination = HomeScreenRoutes.GRID, subtitle = stringResource(id = R.string.x_by_y, columns, rows), ) DividerColumn { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPackPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPackPreferences.kt index c3c5560a49..41b0c4e4f4 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPackPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPackPreferences.kt @@ -51,7 +51,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.PreferenceAdapter import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager @@ -66,7 +65,6 @@ import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.NestedScrollStretch import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.Constants import app.lawnchair.util.getThemedIconPacksInstalled import app.lawnchair.util.isPackageInstalled @@ -103,10 +101,6 @@ enum class ThemedIconsState( } } -fun NavGraphBuilder.iconPackGraph(route: String) { - preferenceGraph(route, { IconPackPreferences() }) -} - @Composable fun IconPackPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPickerPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPickerPreference.kt index 6871d524a3..69bcb2a6f3 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPickerPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconPickerPreference.kt @@ -34,10 +34,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument import app.lawnchair.icons.CustomIconPack import app.lawnchair.icons.IconPack import app.lawnchair.icons.IconPackProvider @@ -48,7 +44,6 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceGroupDescription import app.lawnchair.ui.preferences.components.layout.PreferenceLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceSearchScaffold import app.lawnchair.ui.preferences.components.layout.verticalGridItems -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.ui.util.LazyGridLayout import app.lawnchair.ui.util.resultSender import app.lawnchair.util.requireSystemService @@ -58,23 +53,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.catch import kotlinx.coroutines.launch -fun NavGraphBuilder.iconPickerGraph(route: String) { - preferenceGraph(route, { - IconPickerPreference(packageName = "") - }) { subRoute -> - composable( - route = subRoute("{packageName}"), - arguments = listOf( - navArgument("packageName") { type = NavType.StringType }, - ), - ) { backStackEntry -> - val args = backStackEntry.arguments!! - val packageName = args.getString("packageName")!! - IconPickerPreference(packageName) - } - } -} - @Composable fun IconPickerPreference( packageName: String, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconShapePreference.kt similarity index 93% rename from lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt rename to lawnchair/src/app/lawnchair/ui/preferences/destinations/IconShapePreference.kt index 19bb453de4..5a56c43c07 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/IconShapePreference.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package app.lawnchair.ui.preferences.components +package app.lawnchair.ui.preferences.destinations import android.content.Context import androidx.compose.foundation.Canvas @@ -47,7 +47,6 @@ import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.icons.shape.IconShape import app.lawnchair.icons.shape.IconShapeManager import app.lawnchair.preferences.PreferenceAdapter @@ -59,21 +58,12 @@ import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate -import app.lawnchair.ui.preferences.destinations.customIconShapePreferenceGraph -import app.lawnchair.ui.preferences.preferenceGraph -import app.lawnchair.ui.preferences.subRoute import com.android.launcher3.R object IconShapeRoutes { const val CUSTOM_ICON_SHAPE_CREATOR = "customIconShapeCreator" } -fun NavGraphBuilder.iconShapeGraph(route: String) { - preferenceGraph(route, { IconShapePreference() }) { subRoute -> - customIconShapePreferenceGraph(subRoute(IconShapeRoutes.CUSTOM_ICON_SHAPE_CREATOR)) - } -} - /** * @return The list of all [IconShape]s each wrapped inside a [ListPreferenceEntry]. */ @@ -114,7 +104,7 @@ fun IconShapePreference( PreferenceGroup( heading = stringResource(id = R.string.custom), ) { - CustomIconShapePreference( + CustomIconShapePreferenceOption( iconShapeAdapter = iconShapeAdapter, ) ModifyCustomIconShapePreference( @@ -148,7 +138,7 @@ fun IconShapePreference( } @Composable -private fun CustomIconShapePreference( +private fun CustomIconShapePreferenceOption( iconShapeAdapter: PreferenceAdapter, modifier: Modifier = Modifier, ) { @@ -182,7 +172,7 @@ private fun ModifyCustomIconShapePreference( modifier: Modifier = Modifier, ) { val navController = LocalNavController.current - val route = subRoute(IconShapeRoutes.CUSTOM_ICON_SHAPE_CREATOR) + val route = IconShapeRoutes.CUSTOM_ICON_SHAPE_CREATOR val created = customIconShape != null diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PickAppForGesture.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PickAppForGesture.kt index eb5b2db496..f5987e3661 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PickAppForGesture.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PickAppForGesture.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.gestures.config.GestureHandlerConfig import app.lawnchair.gestures.handlers.OpenAppTarget import app.lawnchair.ui.preferences.LocalIsExpandedScreen @@ -17,17 +16,12 @@ import app.lawnchair.ui.preferences.components.AppItemPlaceholder import app.lawnchair.ui.preferences.components.layout.PreferenceLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceScaffold import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.App import app.lawnchair.util.appsState import app.lawnchair.util.kotlinxJson import com.android.launcher3.R import kotlinx.serialization.encodeToString -fun NavGraphBuilder.pickAppForGestureGraph(route: String) { - preferenceGraph(route, { PickAppForGesture() }) -} - @Composable fun PickAppForGesture() { val apps by appsState() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt index 887b425016..85149c7b69 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt @@ -43,7 +43,6 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceDivider import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate import app.lawnchair.ui.preferences.data.liveinfo.SyncLiveInformation -import app.lawnchair.ui.preferences.subRoute import app.lawnchair.util.isDefaultLauncher import app.lawnchair.util.restartLauncher import com.android.launcher3.BuildConfig @@ -51,6 +50,8 @@ import com.android.launcher3.R @Composable fun PreferencesDashboard( + currentRoute: String, + onNavigate: (String) -> Unit, modifier: Modifier = Modifier, ) { val context = LocalContext.current @@ -76,56 +77,64 @@ fun PreferencesDashboard( label = stringResource(R.string.general_label), description = stringResource(R.string.general_description), iconResource = R.drawable.ic_general, - route = Routes.GENERAL, + onNavigate = { onNavigate(Routes.GENERAL) }, + isSelected = currentRoute.contains(Routes.GENERAL), ) PreferenceCategory( label = stringResource(R.string.home_screen_label), description = stringResource(R.string.home_screen_description), iconResource = R.drawable.ic_home_screen, - route = Routes.HOME_SCREEN, + onNavigate = { onNavigate(Routes.HOME_SCREEN) }, + isSelected = currentRoute.contains(Routes.HOME_SCREEN), ) PreferenceCategory( label = stringResource(id = R.string.smartspace_widget), description = stringResource(R.string.smartspace_widget_description), iconResource = R.drawable.ic_smartspace, - route = Routes.SMARTSPACE, + onNavigate = { onNavigate(Routes.SMARTSPACE) }, + isSelected = currentRoute.contains(Routes.SMARTSPACE), ) PreferenceCategory( label = stringResource(R.string.dock_label), description = stringResource(R.string.dock_description), iconResource = R.drawable.ic_dock, - route = Routes.DOCK, + onNavigate = { onNavigate(Routes.DOCK) }, + isSelected = currentRoute.contains(Routes.DOCK), ) PreferenceCategory( label = stringResource(R.string.app_drawer_label), description = stringResource(R.string.app_drawer_description), iconResource = R.drawable.ic_app_drawer, - route = Routes.APP_DRAWER, + onNavigate = { onNavigate(Routes.APP_DRAWER) }, + isSelected = currentRoute.contains(Routes.APP_DRAWER), ) PreferenceCategory( label = stringResource(R.string.drawer_search_label), description = stringResource(R.string.drawer_search_description), iconResource = R.drawable.ic_search, - route = Routes.SEARCH, + onNavigate = { onNavigate(Routes.SEARCH) }, + isSelected = currentRoute.contains(Routes.SEARCH), ) PreferenceCategory( label = stringResource(R.string.folders_label), description = stringResource(R.string.folders_description), iconResource = R.drawable.ic_folder, - route = Routes.FOLDERS, + onNavigate = { onNavigate(Routes.FOLDERS) }, + isSelected = currentRoute.contains(Routes.FOLDERS), ) PreferenceCategory( label = stringResource(id = R.string.gestures_label), description = stringResource(R.string.gestures_description), iconResource = R.drawable.ic_gestures, - route = Routes.GESTURES, + onNavigate = { onNavigate(Routes.GESTURES) }, + isSelected = currentRoute.contains(Routes.GESTURES), ) if (LawnchairApp.isRecentsEnabled || BuildConfig.DEBUG) { @@ -133,7 +142,8 @@ fun PreferencesDashboard( label = stringResource(id = R.string.quickstep_label), description = stringResource(id = R.string.quickstep_description), iconResource = R.drawable.ic_quickstep, - route = Routes.QUICKSTEP, + onNavigate = { onNavigate(Routes.QUICKSTEP) }, + isSelected = currentRoute.contains(Routes.QUICKSTEP), ) } @@ -141,7 +151,8 @@ fun PreferencesDashboard( label = stringResource(R.string.about_label), description = "${context.getString(R.string.derived_app_name)} ${BuildConfig.MAJOR_VERSION}", iconResource = R.drawable.ic_about, - route = Routes.ABOUT, + onNavigate = { onNavigate(Routes.ABOUT) }, + isSelected = currentRoute.contains(Routes.ABOUT), ) } } @@ -152,9 +163,9 @@ fun PreferencesOverflowMenu( ) { val navController = LocalNavController.current val enableDebug by preferenceManager().enableDebugMenu.observeAsState() - val experimentalFeaturesRoute = subRoute(name = Routes.EXPERIMENTAL_FEATURES) + val experimentalFeaturesRoute = Routes.EXPERIMENTAL_FEATURES if (enableDebug) { - val resolvedRoute = subRoute(name = Routes.DEBUG_MENU) + val resolvedRoute = Routes.DEBUG_MENU ClickableIcon( imageVector = Icons.Rounded.Build, onClick = { navController.navigate(resolvedRoute) }, @@ -185,7 +196,7 @@ fun PreferencesOverflowMenu( }) PreferenceDivider(modifier = Modifier.padding(vertical = 8.dp)) DropdownMenuItem(onClick = { - navController.navigate("/${Routes.CREATE_BACKUP}/") + navController.navigate(Routes.CREATE_BACKUP) hideMenu() }, text = { Text(text = stringResource(id = R.string.create_backup)) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt index 4830301f38..125be27ed6 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt @@ -10,7 +10,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.LawnchairApp import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.observeAsState @@ -22,15 +21,10 @@ import app.lawnchair.ui.preferences.components.controls.WarningPreference import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.isOnePlusStock import com.android.launcher3.R import com.android.launcher3.Utilities -fun NavGraphBuilder.quickstepGraph(route: String) { - preferenceGraph(route, { QuickstepPreferences() }) -} - @Composable fun QuickstepPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt index 6e124a56ca..27f44a994b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt @@ -3,7 +3,6 @@ package app.lawnchair.ui.preferences.destinations import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.not import app.lawnchair.preferences.preferenceManager @@ -16,17 +15,12 @@ import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.util.checkAndRequestFilesPermission import app.lawnchair.util.contactPermissionGranted import app.lawnchair.util.filesAndStorageGranted import app.lawnchair.util.requestContactPermissionGranted import com.android.launcher3.R -fun NavGraphBuilder.searchGraph(route: String) { - preferenceGraph(route, { SearchPreferences() }) -} - @Composable fun SearchPreferences() { val prefs = preferenceManager() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchProviderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchProviderPreferences.kt index dab1431c49..521e5ead04 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchProviderPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchProviderPreferences.kt @@ -17,7 +17,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.qsb.providers.QsbSearchProvider @@ -30,14 +29,9 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceDivider import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.ui.util.LocalBottomSheetHandler import com.android.launcher3.R -fun NavGraphBuilder.searchProviderGraph(route: String) { - preferenceGraph(route, { SearchProviderPreferences() }) -} - @Composable fun SearchProviderPreferences( modifier: Modifier = Modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt index 2aea1a5763..a4d55b5514 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt @@ -11,10 +11,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.core.graphics.drawable.toBitmap -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument import app.lawnchair.data.iconoverride.IconOverrideRepository import app.lawnchair.icons.IconPickerItem import app.lawnchair.ui.preferences.LocalNavController @@ -24,31 +20,12 @@ import app.lawnchair.ui.preferences.components.AppItem import app.lawnchair.ui.preferences.components.controls.ClickablePreference import app.lawnchair.ui.preferences.components.layout.PreferenceLayoutLazyColumn import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.ui.util.OnResult import app.lawnchair.util.requireSystemService import com.android.launcher3.R import com.android.launcher3.util.ComponentKey import kotlinx.coroutines.launch -fun NavGraphBuilder.selectIconGraph(route: String) { - preferenceGraph(route, { }) { subRoute -> - composable( - route = subRoute("{packageName}/{nameAndUser}"), - arguments = listOf( - navArgument("packageName") { type = NavType.StringType }, - navArgument("nameAndUser") { type = NavType.StringType }, - ), - ) { backStackEntry -> - val args = backStackEntry.arguments!! - val packageName = args.getString("packageName") - val nameAndUser = args.getString("nameAndUser") - val key = ComponentKey.fromString("$packageName/$nameAndUser")!! - SelectIconPreference(key) - } - } -} - @Composable fun SelectIconPreference(componentKey: ComponentKey) { val context = LocalContext.current @@ -103,9 +80,9 @@ fun SelectIconPreference(componentKey: ComponentKey) { icon = remember(iconPack) { iconPack.icon.toBitmap() }, onClick = { if (iconPack.packageName.isEmpty()) { - navController.navigate("/${Routes.ICON_PICKER}/") + navController.navigate(Routes.ICON_PICKER) } else { - navController.navigate("/${Routes.ICON_PICKER}/${iconPack.packageName}/") + navController.navigate("${Routes.ICON_PICKER}/${iconPack.packageName}") } }, ) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt index d2ba29de5b..7f8b622480 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView -import androidx.navigation.NavGraphBuilder import app.lawnchair.preferences.PreferenceAdapter import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences2.preferenceManager2 @@ -44,20 +43,11 @@ import app.lawnchair.ui.preferences.components.layout.DividerColumn import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceGroup import app.lawnchair.ui.preferences.components.layout.PreferenceLayout -import app.lawnchair.ui.preferences.preferenceGraph import app.lawnchair.ui.theme.isSelectedThemeDark import com.android.launcher3.R import com.kieronquinn.app.smartspacer.sdk.SmartspacerConstants import kotlinx.collections.immutable.toPersistentList -fun NavGraphBuilder.smartspaceGraph(route: String) { - preferenceGraph(route, { SmartspacePreferences(fromWidget = false) }) -} - -fun NavGraphBuilder.smartspaceWidgetGraph(route: String) { - preferenceGraph(route, { SmartspacePreferences(fromWidget = true) }) -} - @Composable fun SmartspacePreferences( fromWidget: Boolean,