summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt35
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt17
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt6
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt4
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/ui/CategoryPage.kt2
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt16
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt5
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt6
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt19
9 files changed, 83 insertions, 27 deletions
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
index c8a4650d3f01..c68e918eb449 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
@@ -18,14 +18,18 @@ package com.android.settingslib.spa.gallery.home
import android.os.Bundle
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
+import com.android.settingslib.spa.framework.util.getRuntimeArguments
+import com.android.settingslib.spa.framework.util.mergeArguments
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.button.ActionButtonPageProvider
+import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.gallery.page.ArgumentPageModel
import com.android.settingslib.spa.gallery.page.ArgumentPageProvider
import com.android.settingslib.spa.gallery.page.FooterPageProvider
@@ -41,27 +45,36 @@ object HomePageProvider : SettingsPageProvider {
override val name = SettingsPageProviderEnum.HOME.name
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
+ val owner = createSettingsPage(SettingsPageProviderEnum.HOME)
return listOf(
- PreferenceMainPageProvider.buildInjectEntry().build(),
- ArgumentPageProvider.buildInjectEntry("foo")!!.build(),
- SliderPageProvider.buildInjectEntry().build(),
- SpinnerPageProvider.buildInjectEntry().build(),
- SettingsPagerPageProvider.buildInjectEntry().build(),
- FooterPageProvider.buildInjectEntry().build(),
- IllustrationPageProvider.buildInjectEntry().build(),
- CategoryPageProvider.buildInjectEntry().build(),
- ActionButtonPageProvider.buildInjectEntry().build(),
+ 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(),
+ CategoryPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
+ ActionButtonPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
)
}
@Composable
override fun Page(arguments: Bundle?) {
+ val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
HomeScaffold(title = stringResource(R.string.app_name)) {
for (entry in buildEntry(arguments)) {
if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
- entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0))
+ entry.UiLayout(
+ mergeArguments(
+ listOf(
+ globalRuntimeArgs,
+ ArgumentPageModel.buildArgument(intParam = 0)
+ )
+ )
+ )
} else {
- entry.UiLayout()
+ entry.UiLayout(globalRuntimeArgs)
}
}
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
index cc0a79adaa88..9bf7ad8fb8f7 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
@@ -18,12 +18,15 @@ package com.android.settingslib.spa.gallery.page
import android.os.Bundle
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
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.framework.util.getRuntimeArguments
+import com.android.settingslib.spa.framework.util.mergeArguments
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.widget.preference.Preference
@@ -98,12 +101,20 @@ object ArgumentPageProvider : SettingsPageProvider {
@Composable
override fun Page(arguments: Bundle?) {
+ val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) {
for (entry in buildEntry(arguments)) {
- if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
- entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments))
+ if (entry.toPage != null) {
+ entry.UiLayout(
+ mergeArguments(
+ listOf(
+ globalRuntimeArgs,
+ ArgumentPageModel.buildNextArgument(arguments)
+ )
+ )
+ )
} else {
- entry.UiLayout()
+ entry.UiLayout(globalRuntimeArgs)
}
}
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
index e75d09b7d17c..ee2bde4c2edb 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
@@ -22,7 +22,6 @@ 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.EntrySearchData
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.compose.navigator
@@ -92,14 +91,12 @@ 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
@@ -133,7 +130,8 @@ class ArgumentPageModel : PageModel() {
override val title = genPageTitle()
override val summary = stateOf(summaryArray.joinToString(", "))
override val onClick = navigator(
- SettingsPageProviderEnum.ARGUMENT.displayName + parameter.navLink(arguments))
+ SettingsPageProviderEnum.ARGUMENT.displayName + parameter.navLink(arguments)
+ )
}
}
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
index 9fc736c911af..89dbcb1357b6 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
@@ -30,6 +30,7 @@ import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
+import com.android.settingslib.spa.framework.util.getRuntimeArguments
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.ASYNC_PREFERENCE_TITLE
@@ -177,9 +178,10 @@ object PreferencePageProvider : SettingsPageProvider {
@Composable
override fun Page(arguments: Bundle?) {
+ val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
RegularScaffold(title = PAGE_TITLE) {
for (entry in buildEntry(arguments)) {
- entry.UiLayout()
+ entry.UiLayout(globalRuntimeArgs)
}
}
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/ui/CategoryPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/ui/CategoryPage.kt
index 9a525bf5426d..a4713b993af0 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/ui/CategoryPage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/ui/CategoryPage.kt
@@ -35,7 +35,7 @@ import com.android.settingslib.spa.widget.ui.CategoryTitle
private const val TITLE = "Sample Category"
object CategoryPageProvider : SettingsPageProvider {
- override val name = "Spinner"
+ override val name = "Category"
fun buildInjectEntry(): SettingsEntryBuilder {
return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
index 2239066201bf..b28b8786fde0 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
@@ -17,8 +17,13 @@
package com.android.settingslib.spa.framework.common
import android.os.Bundle
+import android.widget.Toast
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.platform.LocalContext
+import com.android.settingslib.spa.framework.BrowseActivity.Companion.HIGHLIGHT_ENTRY_PARAM_NAME
const val INJECT_ENTRY_NAME = "INJECT"
const val ROOT_ENTRY_NAME = "ROOT"
@@ -104,6 +109,7 @@ data class SettingsEntry(
private fun fullArgument(runtimeArguments: Bundle? = null): Bundle {
val arguments = Bundle()
if (owner.arguments != null) arguments.putAll(owner.arguments)
+ // Put runtime args later, which can override page args.
if (runtimeArguments != null) arguments.putAll(runtimeArguments)
return arguments
}
@@ -114,6 +120,16 @@ data class SettingsEntry(
@Composable
fun UiLayout(runtimeArguments: Bundle? = null) {
+ val context = LocalContext.current
+ val entryId = remember { id() }
+ val highlight = rememberSaveable {
+ mutableStateOf(runtimeArguments?.getString(HIGHLIGHT_ENTRY_PARAM_NAME) == entryId)
+ }
+ if (highlight.value) {
+ highlight.value = false
+ // TODO: Add highlight entry logic
+ Toast.makeText(context, "entry $entryId highlighted", Toast.LENGTH_SHORT).show()
+ }
uiLayoutImpl(fullArgument(runtimeArguments))
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
index 77f064d35eb7..9b3fb94d8ddf 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
@@ -57,10 +57,7 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
val pageId = page?.id()
if (pageId == null || pageWithEntryMap.containsKey(pageId)) continue
val spp = sppRepository.getProviderOrNull(page.name) ?: continue
- val newEntries = spp.buildEntry(page.arguments).map {
- // Set from-page if it is missing.
- if (it.fromPage == null) it.copy(fromPage = page) else it
- }
+ val newEntries = spp.buildEntry(page.arguments)
pageWithEntryMap[pageId] = SettingsPageWithEntry(page, newEntries)
for (newEntry in newEntries) {
val newEntryId = newEntry.id()
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
index 124743a23274..8ff162b46711 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
@@ -69,12 +69,12 @@ data class SettingsPage(
return "$displayName ${formatArguments()}"
}
- fun buildRoute(highlightEntryName: String? = null): String {
+ fun buildRoute(highlightEntryId: String? = null): String {
val highlightParam =
- if (highlightEntryName == null)
+ if (highlightEntryId == null)
""
else
- "?${BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME}=$highlightEntryName"
+ "?${BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME}=$highlightEntryId"
return name + parameter.navLink(arguments) + highlightParam
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt
index d7d7750e37b9..452f76abb984 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt
@@ -19,6 +19,7 @@ package com.android.settingslib.spa.framework.util
import android.os.Bundle
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavType
+import com.android.settingslib.spa.framework.BrowseActivity
fun List<NamedNavArgument>.navRoute(): String {
return this.joinToString("") { argument -> "/{${argument.name}}" }
@@ -70,3 +71,21 @@ fun List<NamedNavArgument>.containsIntArg(name: String): Boolean {
}
return false
}
+
+fun getRuntimeArguments(arguments: Bundle? = null): Bundle {
+ val res = Bundle()
+ val highlightEntry = arguments?.getString(BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME)
+ if (highlightEntry != null) {
+ res.putString(BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME, highlightEntry)
+ }
+ // Append more general runtime arguments here
+ return res
+}
+
+fun mergeArguments(argsList: List<Bundle?>): Bundle {
+ val res = Bundle()
+ for (args in argsList) {
+ if (args != null) res.putAll(args)
+ }
+ return res
+}