Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -18,4 +18,4 @@ package com.android.settingslib.spa.gallery import com.android.settingslib.spa.framework.DebugActivity class GalleryDebugActivity : DebugActivity(SpaEnvironment.EntryRepository) class GalleryDebugActivity : DebugActivity(SpaEnvironment.EntryRepository, MainActivity::class.java) packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt +4 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,10 @@ object ArgumentPageProvider : SettingsPageProvider { private fun buildInjectEntry(arguments: Bundle?): SettingsEntryBuilder? { if (!ArgumentPageModel.isValidArgument(arguments)) return null return SettingsEntryBuilder.createInject(SettingsPage.create(name, parameter, arguments)) return SettingsEntryBuilder.createInject( entryName = ArgumentPageModel.getInjectEntryName(arguments), owner = SettingsPage.create(name, parameter, arguments) ) // Set attributes .setIsAllowSearch(false) .setUiLayoutFn { Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt +7 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.compose.runtime.Composable import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavType import androidx.navigation.navArgument import com.android.settingslib.spa.framework.BrowseActivity import com.android.settingslib.spa.framework.common.PageModel import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.stateOf Loading Loading @@ -63,6 +64,10 @@ class ArgumentPageModel : PageModel() { return (stringParam != null && listOf("foo", "bar").contains(stringParam)) } fun getInjectEntryName(arguments: Bundle?): String { return "${name}_${parameter.getStringArg(STRING_PARAM_NAME, arguments)}" } @Composable fun create(arguments: Bundle?): ArgumentPageModel { val pageModel: ArgumentPageModel = viewModel(key = arguments.toString()) Loading @@ -75,12 +80,14 @@ class ArgumentPageModel : PageModel() { private var arguments: Bundle? = null private var stringParam: String? = null private var intParam: Int? = null private var highlightName: String? = null override fun initialize(arguments: Bundle?) { logMsg("init with args " + arguments.toString()) this.arguments = arguments stringParam = parameter.getStringArg(STRING_PARAM_NAME, arguments) intParam = parameter.getIntArg(INT_PARAM_NAME, arguments) highlightName = arguments?.getString(BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME) } @Composable Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +14 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,9 @@ import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.android.settingslib.spa.R import com.android.settingslib.spa.framework.common.ROOT_PAGE_NAME import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.theme.SettingsTheme Loading @@ -48,22 +50,28 @@ open class BrowseActivity( @Composable private fun MainContent() { val destination = intent?.getStringExtra(KEY_DESTINATION) val destination = intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPageName() val navController = rememberNavController() CompositionLocalProvider(navController.localNavController()) { NavHost(navController, sppRepository.getDefaultStartPageName()) { NavHost(navController, ROOT_PAGE_NAME) { composable(ROOT_PAGE_NAME) {} for (page in sppRepository.getAllProviders()) { composable( route = page.name + page.parameter.navRoute(), arguments = page.parameter, route = page.name + page.parameter.navRoute() + "?$HIGHLIGHT_ENTRY_PARAM_NAME={$HIGHLIGHT_ENTRY_PARAM_NAME}", arguments = page.parameter + listOf( // add optional parameters navArgument(HIGHLIGHT_ENTRY_PARAM_NAME) { defaultValue = "null" } ), ) { navBackStackEntry -> page.Page(navBackStackEntry.arguments) } } } if (!destination.isNullOrEmpty()) { if (destination.isNotEmpty()) { LaunchedEffect(Unit) { navController.navigate(destination) { popUpTo(navController.graph.findStartDestination().id) { Loading @@ -77,5 +85,6 @@ open class BrowseActivity( companion object { const val KEY_DESTINATION = "spa:SpaActivity:destination" const val HIGHLIGHT_ENTRY_PARAM_NAME = "highlightEntry" } } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt +43 −3 Original line number Diff line number Diff line Loading @@ -16,20 +16,25 @@ package com.android.settingslib.spa.framework import android.content.Intent import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.android.settingslib.spa.R import com.android.settingslib.spa.framework.BrowseActivity.Companion.KEY_DESTINATION import com.android.settingslib.spa.framework.common.SettingsEntry import com.android.settingslib.spa.framework.common.SettingsEntryRepository import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.toState Loading @@ -48,7 +53,8 @@ private const val PARAM_NAME_PAGE_ID = "pid" private const val PARAM_NAME_ENTRY_ID = "eid" open class DebugActivity( private val entryRepository: SettingsEntryRepository private val entryRepository: SettingsEntryRepository, private val browseActivityClass: Class<*>, ) : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { setTheme(R.style.Theme_SpaLib_DayNight) Loading Loading @@ -87,7 +93,7 @@ open class DebugActivity( @Composable fun RootPage() { HomeScaffold(title = "Entry Debug") { HomeScaffold(title = "Settings Debug") { Preference(object : PreferenceModel { override val title = "List All Pages" override val onClick = navigator(route = ROUTE_All_PAGES) Loading Loading @@ -128,6 +134,10 @@ open class DebugActivity( RegularScaffold(title = "Page ${pageWithEntry.page.displayName}") { Text(text = pageWithEntry.page.formatArguments()) Text(text = "Entry size: ${pageWithEntry.entries.size}") Preference(model = object : PreferenceModel { override val title = "open page" override val onClick = openPage(pageWithEntry.page) }) EntryList(pageWithEntry.entries) } } Loading @@ -137,6 +147,10 @@ open class DebugActivity( val id = arguments!!.getInt(PARAM_NAME_ENTRY_ID) val entry = entryRepository.getEntry(id)!! RegularScaffold(title = "Entry ${entry.displayName}") { Preference(model = object : PreferenceModel { override val title = "open entry" override val onClick = openEntry(entry) }) Text(text = entry.formatAll()) } } Loading @@ -152,4 +166,30 @@ open class DebugActivity( }) } } @Composable private fun openPage(page: SettingsPage): () -> Unit { val route = page.buildRoute() val context = LocalContext.current val intent = Intent(context, browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { Log.d("DEBUG ACTIVITY", "Open page: $route") context.startActivity(intent) } } @Composable private fun openEntry(entry: SettingsEntry): () -> Unit { val route = entry.buildRoute() val context = LocalContext.current val intent = Intent(context, browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { Log.d("DEBUG ACTIVITY", "Open entry: $route") context.startActivity(intent) } } } Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -18,4 +18,4 @@ package com.android.settingslib.spa.gallery import com.android.settingslib.spa.framework.DebugActivity class GalleryDebugActivity : DebugActivity(SpaEnvironment.EntryRepository) class GalleryDebugActivity : DebugActivity(SpaEnvironment.EntryRepository, MainActivity::class.java)
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt +4 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,10 @@ object ArgumentPageProvider : SettingsPageProvider { private fun buildInjectEntry(arguments: Bundle?): SettingsEntryBuilder? { if (!ArgumentPageModel.isValidArgument(arguments)) return null return SettingsEntryBuilder.createInject(SettingsPage.create(name, parameter, arguments)) return SettingsEntryBuilder.createInject( entryName = ArgumentPageModel.getInjectEntryName(arguments), owner = SettingsPage.create(name, parameter, arguments) ) // Set attributes .setIsAllowSearch(false) .setUiLayoutFn { Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt +7 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.compose.runtime.Composable import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavType import androidx.navigation.navArgument import com.android.settingslib.spa.framework.BrowseActivity import com.android.settingslib.spa.framework.common.PageModel import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.stateOf Loading Loading @@ -63,6 +64,10 @@ class ArgumentPageModel : PageModel() { return (stringParam != null && listOf("foo", "bar").contains(stringParam)) } fun getInjectEntryName(arguments: Bundle?): String { return "${name}_${parameter.getStringArg(STRING_PARAM_NAME, arguments)}" } @Composable fun create(arguments: Bundle?): ArgumentPageModel { val pageModel: ArgumentPageModel = viewModel(key = arguments.toString()) Loading @@ -75,12 +80,14 @@ class ArgumentPageModel : PageModel() { private var arguments: Bundle? = null private var stringParam: String? = null private var intParam: Int? = null private var highlightName: String? = null override fun initialize(arguments: Bundle?) { logMsg("init with args " + arguments.toString()) this.arguments = arguments stringParam = parameter.getStringArg(STRING_PARAM_NAME, arguments) intParam = parameter.getIntArg(INT_PARAM_NAME, arguments) highlightName = arguments?.getString(BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME) } @Composable Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +14 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,9 @@ import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.android.settingslib.spa.R import com.android.settingslib.spa.framework.common.ROOT_PAGE_NAME import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.theme.SettingsTheme Loading @@ -48,22 +50,28 @@ open class BrowseActivity( @Composable private fun MainContent() { val destination = intent?.getStringExtra(KEY_DESTINATION) val destination = intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPageName() val navController = rememberNavController() CompositionLocalProvider(navController.localNavController()) { NavHost(navController, sppRepository.getDefaultStartPageName()) { NavHost(navController, ROOT_PAGE_NAME) { composable(ROOT_PAGE_NAME) {} for (page in sppRepository.getAllProviders()) { composable( route = page.name + page.parameter.navRoute(), arguments = page.parameter, route = page.name + page.parameter.navRoute() + "?$HIGHLIGHT_ENTRY_PARAM_NAME={$HIGHLIGHT_ENTRY_PARAM_NAME}", arguments = page.parameter + listOf( // add optional parameters navArgument(HIGHLIGHT_ENTRY_PARAM_NAME) { defaultValue = "null" } ), ) { navBackStackEntry -> page.Page(navBackStackEntry.arguments) } } } if (!destination.isNullOrEmpty()) { if (destination.isNotEmpty()) { LaunchedEffect(Unit) { navController.navigate(destination) { popUpTo(navController.graph.findStartDestination().id) { Loading @@ -77,5 +85,6 @@ open class BrowseActivity( companion object { const val KEY_DESTINATION = "spa:SpaActivity:destination" const val HIGHLIGHT_ENTRY_PARAM_NAME = "highlightEntry" } }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt +43 −3 Original line number Diff line number Diff line Loading @@ -16,20 +16,25 @@ package com.android.settingslib.spa.framework import android.content.Intent import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.android.settingslib.spa.R import com.android.settingslib.spa.framework.BrowseActivity.Companion.KEY_DESTINATION import com.android.settingslib.spa.framework.common.SettingsEntry import com.android.settingslib.spa.framework.common.SettingsEntryRepository import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.toState Loading @@ -48,7 +53,8 @@ private const val PARAM_NAME_PAGE_ID = "pid" private const val PARAM_NAME_ENTRY_ID = "eid" open class DebugActivity( private val entryRepository: SettingsEntryRepository private val entryRepository: SettingsEntryRepository, private val browseActivityClass: Class<*>, ) : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { setTheme(R.style.Theme_SpaLib_DayNight) Loading Loading @@ -87,7 +93,7 @@ open class DebugActivity( @Composable fun RootPage() { HomeScaffold(title = "Entry Debug") { HomeScaffold(title = "Settings Debug") { Preference(object : PreferenceModel { override val title = "List All Pages" override val onClick = navigator(route = ROUTE_All_PAGES) Loading Loading @@ -128,6 +134,10 @@ open class DebugActivity( RegularScaffold(title = "Page ${pageWithEntry.page.displayName}") { Text(text = pageWithEntry.page.formatArguments()) Text(text = "Entry size: ${pageWithEntry.entries.size}") Preference(model = object : PreferenceModel { override val title = "open page" override val onClick = openPage(pageWithEntry.page) }) EntryList(pageWithEntry.entries) } } Loading @@ -137,6 +147,10 @@ open class DebugActivity( val id = arguments!!.getInt(PARAM_NAME_ENTRY_ID) val entry = entryRepository.getEntry(id)!! RegularScaffold(title = "Entry ${entry.displayName}") { Preference(model = object : PreferenceModel { override val title = "open entry" override val onClick = openEntry(entry) }) Text(text = entry.formatAll()) } } Loading @@ -152,4 +166,30 @@ open class DebugActivity( }) } } @Composable private fun openPage(page: SettingsPage): () -> Unit { val route = page.buildRoute() val context = LocalContext.current val intent = Intent(context, browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { Log.d("DEBUG ACTIVITY", "Open page: $route") context.startActivity(intent) } } @Composable private fun openEntry(entry: SettingsEntry): () -> Unit { val route = entry.buildRoute() val context = LocalContext.current val intent = Intent(context, browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { Log.d("DEBUG ACTIVITY", "Open entry: $route") context.startActivity(intent) } } }