Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ object SpaEnvironment { ), rootPages = listOf( SettingsPage.create(HomePageProvider.name) ) + ArgumentPageProvider.buildRootPages() ) ) } Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt +19 −42 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.gallery.R import com.android.settingslib.spa.gallery.page.ArgumentPageModel import com.android.settingslib.spa.gallery.page.ArgumentPageProvider import com.android.settingslib.spa.gallery.page.FooterPageProvider import com.android.settingslib.spa.gallery.page.IllustrationPageProvider Loading @@ -39,52 +40,28 @@ object HomePageProvider : SettingsPageProvider { override fun buildEntry(arguments: Bundle?): List<SettingsEntry> { val owner = SettingsPage.create(name) val entryList = mutableListOf<SettingsEntry>() entryList.add( PreferenceMainPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() return listOf( PreferenceMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ArgumentPageProvider.buildInjectEntry("foo")!!.setLink(fromPage = owner).build(), SliderPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), SpinnerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), SettingsPagerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), FooterPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), IllustrationPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ) entryList.add( SliderPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( SpinnerPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( SettingsPagerPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( FooterPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( IllustrationPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) return entryList } @Composable override fun Page(arguments: Bundle?) { HomePage() HomeScaffold(title = stringResource(R.string.app_name)) { for (entry in buildEntry(arguments)) { if (entry.name.startsWith(ArgumentPageModel.name)) { entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0)) } else { entry.UiLayout() } } } @Composable private fun HomePage() { HomeScaffold(title = stringResource(R.string.app_name)) { PreferenceMainPageProvider.EntryItem() ArgumentPageProvider.EntryItem(stringParam = "foo", intParam = 0) SliderPageProvider.EntryItem() SpinnerPageProvider.EntryItem() SettingsPagerPageProvider.EntryItem() FooterPageProvider.EntryItem() IllustrationPageProvider.EntryItem() } } Loading @@ -92,6 +69,6 @@ private fun HomePage() { @Composable private fun HomeScreenPreview() { SettingsTheme { HomePage() HomePageProvider.Page(null) } } packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt +13 −23 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ object ArgumentPageProvider : SettingsPageProvider { .setIsAllowSearch(true) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genStringParamPreferenceModel()) Preference(ArgumentPageModel.create(it).genStringParamPreferenceModel()) }.build() ) Loading @@ -53,53 +53,43 @@ object ArgumentPageProvider : SettingsPageProvider { .setIsAllowSearch(true) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genIntParamPreferenceModel()) Preference(ArgumentPageModel.create(it).genIntParamPreferenceModel()) }.build() ) val entryFoo = buildInjectEntry(ArgumentPageModel.buildNextArgument("foo", arguments)) val entryBar = buildInjectEntry(ArgumentPageModel.buildNextArgument("bar", arguments)) if (entryFoo != null) entryList.add(entryFoo.setLink(fromPage = owner).build()) if (entryBar != null) entryList.add(entryBar.setLink(fromPage = owner).build()) entryList.add(buildInjectEntry("foo")!!.setLink(fromPage = owner).build()) entryList.add(buildInjectEntry("bar")!!.setLink(fromPage = owner).build()) return entryList } private fun buildInjectEntry(arguments: Bundle?): SettingsEntryBuilder? { fun buildInjectEntry(stringParam: String): SettingsEntryBuilder? { val arguments = ArgumentPageModel.buildArgument(stringParam) if (!ArgumentPageModel.isValidArgument(arguments)) return null return SettingsEntryBuilder.createInject( entryName = ArgumentPageModel.getInjectEntryName(arguments), entryName = "${name}_$stringParam", owner = SettingsPage.create(name, parameter, arguments) ) // Set attributes .setIsAllowSearch(false) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genInjectPreferenceModel()) Preference(ArgumentPageModel.create(it).genInjectPreferenceModel()) } } fun buildRootPages(): List<SettingsPage> { return listOf( SettingsPage.create(name, parameter, ArgumentPageModel.buildArgument("foo")), SettingsPage.create(name, parameter, ArgumentPageModel.buildArgument("bar")), ) } @Composable override fun Page(arguments: Bundle?) { RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) { for (entry in buildEntry(arguments)) { entry.uiLayout() if (entry.name.startsWith(name)) { entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments)) } else { entry.UiLayout() } } } @Composable fun EntryItem(stringParam: String, intParam: Int) { buildInjectEntry(ArgumentPageModel.buildArgument(stringParam, intParam)) ?.build()?.uiLayout?.let { it() } } } Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt +5 −11 Original line number Diff line number Diff line Loading @@ -44,19 +44,17 @@ class ArgumentPageModel : PageModel() { navArgument(INT_PARAM_NAME) { type = NavType.IntType }, ) fun buildArgument(stringParam: String, intParam: Int? = null): Bundle { fun buildArgument(stringParam: String? = null, intParam: Int? = null): Bundle { val args = Bundle() args.putString(STRING_PARAM_NAME, stringParam) if (stringParam != null) args.putString(STRING_PARAM_NAME, stringParam) if (intParam != null) args.putInt(INT_PARAM_NAME, intParam) return args } fun buildNextArgument(newStringParam: String, arguments: Bundle? = null): Bundle { fun buildNextArgument(arguments: Bundle? = null): Bundle { val intParam = parameter.getIntArg(INT_PARAM_NAME, arguments) return if (intParam == null) buildArgument(newStringParam) else buildArgument(newStringParam, intParam + 1) val nextIntParam = if (intParam != null) intParam + 1 else null return buildArgument(intParam = nextIntParam) } fun isValidArgument(arguments: Bundle?): Boolean { Loading @@ -64,10 +62,6 @@ 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 packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPage.kt +6 −16 Original line number Diff line number Diff line Loading @@ -69,29 +69,19 @@ object FooterPageProvider : SettingsPageProvider { @Composable override fun Page(arguments: Bundle?) { FooterPage() } @Composable fun EntryItem() { buildInjectEntry().build().uiLayout.let { it() } } } @Composable private fun FooterPage() { RegularScaffold(title = TITLE) { for (entry in FooterPageProvider.buildEntry(arguments = null)) { entry.uiLayout() for (entry in buildEntry(arguments)) { entry.UiLayout() } Footer(footerText = "Footer text always at the end of page.") } } } @Preview(showBackground = true) @Composable private fun FooterPagePreview() { SettingsTheme { FooterPage() FooterPageProvider.Page(null) } } Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ object SpaEnvironment { ), rootPages = listOf( SettingsPage.create(HomePageProvider.name) ) + ArgumentPageProvider.buildRootPages() ) ) } Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt +19 −42 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.gallery.R import com.android.settingslib.spa.gallery.page.ArgumentPageModel import com.android.settingslib.spa.gallery.page.ArgumentPageProvider import com.android.settingslib.spa.gallery.page.FooterPageProvider import com.android.settingslib.spa.gallery.page.IllustrationPageProvider Loading @@ -39,52 +40,28 @@ object HomePageProvider : SettingsPageProvider { override fun buildEntry(arguments: Bundle?): List<SettingsEntry> { val owner = SettingsPage.create(name) val entryList = mutableListOf<SettingsEntry>() entryList.add( PreferenceMainPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() return listOf( PreferenceMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ArgumentPageProvider.buildInjectEntry("foo")!!.setLink(fromPage = owner).build(), SliderPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), SpinnerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), SettingsPagerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), FooterPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), IllustrationPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ) entryList.add( SliderPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( SpinnerPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( SettingsPagerPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( FooterPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) entryList.add( IllustrationPageProvider.buildInjectEntry() .setLink(fromPage = owner).build() ) return entryList } @Composable override fun Page(arguments: Bundle?) { HomePage() HomeScaffold(title = stringResource(R.string.app_name)) { for (entry in buildEntry(arguments)) { if (entry.name.startsWith(ArgumentPageModel.name)) { entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0)) } else { entry.UiLayout() } } } @Composable private fun HomePage() { HomeScaffold(title = stringResource(R.string.app_name)) { PreferenceMainPageProvider.EntryItem() ArgumentPageProvider.EntryItem(stringParam = "foo", intParam = 0) SliderPageProvider.EntryItem() SpinnerPageProvider.EntryItem() SettingsPagerPageProvider.EntryItem() FooterPageProvider.EntryItem() IllustrationPageProvider.EntryItem() } } Loading @@ -92,6 +69,6 @@ private fun HomePage() { @Composable private fun HomeScreenPreview() { SettingsTheme { HomePage() HomePageProvider.Page(null) } }
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt +13 −23 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ object ArgumentPageProvider : SettingsPageProvider { .setIsAllowSearch(true) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genStringParamPreferenceModel()) Preference(ArgumentPageModel.create(it).genStringParamPreferenceModel()) }.build() ) Loading @@ -53,53 +53,43 @@ object ArgumentPageProvider : SettingsPageProvider { .setIsAllowSearch(true) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genIntParamPreferenceModel()) Preference(ArgumentPageModel.create(it).genIntParamPreferenceModel()) }.build() ) val entryFoo = buildInjectEntry(ArgumentPageModel.buildNextArgument("foo", arguments)) val entryBar = buildInjectEntry(ArgumentPageModel.buildNextArgument("bar", arguments)) if (entryFoo != null) entryList.add(entryFoo.setLink(fromPage = owner).build()) if (entryBar != null) entryList.add(entryBar.setLink(fromPage = owner).build()) entryList.add(buildInjectEntry("foo")!!.setLink(fromPage = owner).build()) entryList.add(buildInjectEntry("bar")!!.setLink(fromPage = owner).build()) return entryList } private fun buildInjectEntry(arguments: Bundle?): SettingsEntryBuilder? { fun buildInjectEntry(stringParam: String): SettingsEntryBuilder? { val arguments = ArgumentPageModel.buildArgument(stringParam) if (!ArgumentPageModel.isValidArgument(arguments)) return null return SettingsEntryBuilder.createInject( entryName = ArgumentPageModel.getInjectEntryName(arguments), entryName = "${name}_$stringParam", owner = SettingsPage.create(name, parameter, arguments) ) // Set attributes .setIsAllowSearch(false) .setUiLayoutFn { // Set ui rendering Preference(ArgumentPageModel.create(arguments).genInjectPreferenceModel()) Preference(ArgumentPageModel.create(it).genInjectPreferenceModel()) } } fun buildRootPages(): List<SettingsPage> { return listOf( SettingsPage.create(name, parameter, ArgumentPageModel.buildArgument("foo")), SettingsPage.create(name, parameter, ArgumentPageModel.buildArgument("bar")), ) } @Composable override fun Page(arguments: Bundle?) { RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) { for (entry in buildEntry(arguments)) { entry.uiLayout() if (entry.name.startsWith(name)) { entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments)) } else { entry.UiLayout() } } } @Composable fun EntryItem(stringParam: String, intParam: Int) { buildInjectEntry(ArgumentPageModel.buildArgument(stringParam, intParam)) ?.build()?.uiLayout?.let { it() } } } Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt +5 −11 Original line number Diff line number Diff line Loading @@ -44,19 +44,17 @@ class ArgumentPageModel : PageModel() { navArgument(INT_PARAM_NAME) { type = NavType.IntType }, ) fun buildArgument(stringParam: String, intParam: Int? = null): Bundle { fun buildArgument(stringParam: String? = null, intParam: Int? = null): Bundle { val args = Bundle() args.putString(STRING_PARAM_NAME, stringParam) if (stringParam != null) args.putString(STRING_PARAM_NAME, stringParam) if (intParam != null) args.putInt(INT_PARAM_NAME, intParam) return args } fun buildNextArgument(newStringParam: String, arguments: Bundle? = null): Bundle { fun buildNextArgument(arguments: Bundle? = null): Bundle { val intParam = parameter.getIntArg(INT_PARAM_NAME, arguments) return if (intParam == null) buildArgument(newStringParam) else buildArgument(newStringParam, intParam + 1) val nextIntParam = if (intParam != null) intParam + 1 else null return buildArgument(intParam = nextIntParam) } fun isValidArgument(arguments: Bundle?): Boolean { Loading @@ -64,10 +62,6 @@ 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
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPage.kt +6 −16 Original line number Diff line number Diff line Loading @@ -69,29 +69,19 @@ object FooterPageProvider : SettingsPageProvider { @Composable override fun Page(arguments: Bundle?) { FooterPage() } @Composable fun EntryItem() { buildInjectEntry().build().uiLayout.let { it() } } } @Composable private fun FooterPage() { RegularScaffold(title = TITLE) { for (entry in FooterPageProvider.buildEntry(arguments = null)) { entry.uiLayout() for (entry in buildEntry(arguments)) { entry.UiLayout() } Footer(footerText = "Footer text always at the end of page.") } } } @Preview(showBackground = true) @Composable private fun FooterPagePreview() { SettingsTheme { FooterPage() FooterPageProvider.Page(null) } }