Merge "Add function to create SettingsPage from Spp."
This commit is contained in:
@@ -16,11 +16,9 @@
|
||||
|
||||
package com.android.settingslib.spa.gallery
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.navigation.NamedNavArgument
|
||||
import com.android.settingslib.spa.framework.common.SettingsPage
|
||||
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
|
||||
import com.android.settingslib.spa.framework.common.SpaEnvironment
|
||||
import com.android.settingslib.spa.framework.common.createSettingsPage
|
||||
import com.android.settingslib.spa.gallery.button.ActionButtonPageProvider
|
||||
import com.android.settingslib.spa.gallery.home.HomePageProvider
|
||||
import com.android.settingslib.spa.gallery.page.ArgumentPageProvider
|
||||
@@ -49,19 +47,6 @@ enum class SettingsPageProviderEnum(val displayName: String) {
|
||||
// Add your SPPs
|
||||
}
|
||||
|
||||
fun createSettingsPage(
|
||||
SppName: SettingsPageProviderEnum,
|
||||
parameter: List<NamedNavArgument> = emptyList(),
|
||||
arguments: Bundle? = null
|
||||
): SettingsPage {
|
||||
return SettingsPage.create(
|
||||
name = SppName.name,
|
||||
displayName = SppName.displayName,
|
||||
parameter = parameter,
|
||||
arguments = arguments,
|
||||
)
|
||||
}
|
||||
|
||||
object GallerySpaEnvironment : SpaEnvironment() {
|
||||
override val pageProviderRepository = lazy {
|
||||
SettingsPageProviderRepository(
|
||||
@@ -82,7 +67,7 @@ object GallerySpaEnvironment : SpaEnvironment() {
|
||||
ActionButtonPageProvider,
|
||||
),
|
||||
rootPages = listOf(
|
||||
createSettingsPage(SettingsPageProviderEnum.HOME)
|
||||
HomePageProvider.createSettingsPage(),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -22,11 +22,11 @@ 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.common.createSettingsPage
|
||||
import com.android.settingslib.spa.framework.theme.SettingsTheme
|
||||
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
|
||||
@@ -40,9 +40,10 @@ import com.android.settingslib.spa.widget.scaffold.HomeScaffold
|
||||
|
||||
object HomePageProvider : SettingsPageProvider {
|
||||
override val name = SettingsPageProviderEnum.HOME.name
|
||||
override val displayName = SettingsPageProviderEnum.HOME.displayName
|
||||
private val owner = createSettingsPage()
|
||||
|
||||
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
|
||||
val owner = createSettingsPage(SettingsPageProviderEnum.HOME)
|
||||
return listOf(
|
||||
PreferenceMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
ArgumentPageProvider.buildInjectEntry("foo")!!.setLink(fromPage = owner).build(),
|
||||
|
||||
@@ -23,9 +23,9 @@ 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.common.createSettingsPage
|
||||
import com.android.settingslib.spa.framework.theme.SettingsTheme
|
||||
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
|
||||
import com.android.settingslib.spa.gallery.createSettingsPage
|
||||
import com.android.settingslib.spa.widget.preference.Preference
|
||||
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
|
||||
|
||||
@@ -43,13 +43,13 @@ object ArgumentPageProvider : SettingsPageProvider {
|
||||
}
|
||||
|
||||
override val name = SettingsPageProviderEnum.ARGUMENT.name
|
||||
|
||||
override val displayName = SettingsPageProviderEnum.ARGUMENT.displayName
|
||||
override val parameter = ArgumentPageModel.parameter
|
||||
|
||||
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
|
||||
if (!ArgumentPageModel.isValidArgument(arguments)) return emptyList()
|
||||
|
||||
val owner = createSettingsPage(SettingsPageProviderEnum.ARGUMENT, parameter, arguments)
|
||||
val owner = createSettingsPage(arguments)
|
||||
val entryList = mutableListOf<SettingsEntry>()
|
||||
entryList.add(
|
||||
createEntry(owner, EntryEnum.STRING_PARAM)
|
||||
@@ -86,7 +86,7 @@ object ArgumentPageProvider : SettingsPageProvider {
|
||||
if (!ArgumentPageModel.isValidArgument(arguments)) return null
|
||||
|
||||
return SettingsEntryBuilder.createInject(
|
||||
owner = createSettingsPage(SettingsPageProviderEnum.ARGUMENT, parameter, arguments),
|
||||
owner = createSettingsPage(arguments),
|
||||
displayName = "${name}_$stringParam",
|
||||
)
|
||||
// Set attributes
|
||||
|
||||
@@ -20,8 +20,8 @@ import android.os.Bundle
|
||||
import androidx.compose.runtime.Composable
|
||||
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.common.createSettingsPage
|
||||
import com.android.settingslib.spa.framework.compose.navigator
|
||||
import com.android.settingslib.spa.widget.preference.Preference
|
||||
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
||||
@@ -31,22 +31,20 @@ private const val TITLE = "Category: Preference"
|
||||
|
||||
object PreferenceMainPageProvider : SettingsPageProvider {
|
||||
override val name = "PreferenceMain"
|
||||
private val owner = createSettingsPage()
|
||||
|
||||
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
|
||||
return listOf(
|
||||
PreferencePageProvider.buildInjectEntry()
|
||||
.setLink(fromPage = SettingsPage.create(name)).build(),
|
||||
SwitchPreferencePageProvider.buildInjectEntry()
|
||||
.setLink(fromPage = SettingsPage.create(name)).build(),
|
||||
MainSwitchPreferencePageProvider.buildInjectEntry()
|
||||
.setLink(fromPage = SettingsPage.create(name)).build(),
|
||||
PreferencePageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
SwitchPreferencePageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
MainSwitchPreferencePageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
TwoTargetSwitchPreferencePageProvider.buildInjectEntry()
|
||||
.setLink(fromPage = SettingsPage.create(name)).build(),
|
||||
.setLink(fromPage = owner).build(),
|
||||
)
|
||||
}
|
||||
|
||||
fun buildInjectEntry(): SettingsEntryBuilder {
|
||||
return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
|
||||
return SettingsEntryBuilder.createInject(owner = owner)
|
||||
.setIsAllowSearch(true)
|
||||
.setUiLayoutFn {
|
||||
Preference(object : PreferenceModel {
|
||||
|
||||
@@ -30,11 +30,11 @@ import com.android.settingslib.spa.framework.common.EntrySearchData
|
||||
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.common.createSettingsPage
|
||||
import com.android.settingslib.spa.framework.compose.toState
|
||||
import com.android.settingslib.spa.framework.theme.SettingsTheme
|
||||
import com.android.settingslib.spa.gallery.R
|
||||
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
|
||||
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.AUTO_UPDATE_PREFERENCE_TITLE
|
||||
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.DISABLE_PREFERENCE_SUMMARY
|
||||
@@ -66,7 +66,8 @@ object PreferencePageProvider : SettingsPageProvider {
|
||||
}
|
||||
|
||||
override val name = SettingsPageProviderEnum.PREFERENCE.name
|
||||
private val owner = createSettingsPage(SettingsPageProviderEnum.PREFERENCE)
|
||||
override val displayName = SettingsPageProviderEnum.PREFERENCE.displayName
|
||||
private val owner = createSettingsPage()
|
||||
|
||||
private fun createEntry(entry: EntryEnum): SettingsEntryBuilder {
|
||||
return SettingsEntryBuilder.create(owner, entry.name, entry.displayName)
|
||||
|
||||
@@ -55,7 +55,7 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
|
||||
val entry = entryQueue.pop()
|
||||
val page = entry.toPage
|
||||
if (page == null || pageWithEntryMap.containsKey(page.id)) continue
|
||||
val spp = sppRepository.getProviderOrNull(page.name) ?: continue
|
||||
val spp = sppRepository.getProviderOrNull(page.sppName) ?: continue
|
||||
val newEntries = spp.buildEntry(page.arguments)
|
||||
pageWithEntryMap[page.id] = SettingsPageWithEntry(page, newEntries)
|
||||
for (newEntry in newEntries) {
|
||||
|
||||
@@ -26,16 +26,16 @@ import com.android.settingslib.spa.framework.util.normalize
|
||||
* Defines data to identify a Settings page.
|
||||
*/
|
||||
data class SettingsPage(
|
||||
// The unique id of this page, which is computed by name + normalized(arguments)
|
||||
// The unique id of this page, which is computed by sppName + normalized(arguments)
|
||||
val id: String,
|
||||
|
||||
// The name of the page, which is used to compute the unique id, and need to be stable.
|
||||
val name: String,
|
||||
// The name of the page provider, who creates this page. It is used to compute the unique id.
|
||||
val sppName: String,
|
||||
|
||||
// The display name of the page, for better readability.
|
||||
val displayName: String,
|
||||
|
||||
// Defined parameters of this page.
|
||||
// The parameters defined in its page provider.
|
||||
val parameter: List<NamedNavArgument> = emptyList(),
|
||||
|
||||
// The arguments of this page.
|
||||
@@ -50,7 +50,7 @@ data class SettingsPage(
|
||||
): SettingsPage {
|
||||
return SettingsPage(
|
||||
id = id(name, parameter, arguments),
|
||||
name = name,
|
||||
sppName = name,
|
||||
displayName = displayName ?: name,
|
||||
parameter = parameter,
|
||||
arguments = arguments
|
||||
@@ -70,7 +70,7 @@ data class SettingsPage(
|
||||
|
||||
// Returns if this Settings Page is created by the given Spp.
|
||||
fun isCreateBy(SppName: String): Boolean {
|
||||
return name == SppName
|
||||
return sppName == SppName
|
||||
}
|
||||
|
||||
fun formatArguments(): String {
|
||||
@@ -84,7 +84,7 @@ data class SettingsPage(
|
||||
}
|
||||
|
||||
fun buildRoute(): String {
|
||||
return name + parameter.navLink(arguments)
|
||||
return sppName + parameter.navLink(arguments)
|
||||
}
|
||||
|
||||
fun hasRuntimeParam(): Boolean {
|
||||
|
||||
@@ -21,13 +21,17 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.navigation.NamedNavArgument
|
||||
|
||||
/**
|
||||
* An SettingsPageProvider represent a Settings page.
|
||||
* An SettingsPageProvider which is used to create Settings page instances.
|
||||
*/
|
||||
interface SettingsPageProvider {
|
||||
|
||||
/** The page name without arguments. */
|
||||
/** The page provider name, needs to be *unique* and *stable*. */
|
||||
val name: String
|
||||
|
||||
/** The display name of this page provider, for better readability. */
|
||||
val displayName: String?
|
||||
get() = null
|
||||
|
||||
/** The page parameters, default is no parameters. */
|
||||
val parameter: List<NamedNavArgument>
|
||||
get() = emptyList()
|
||||
@@ -38,3 +42,12 @@ interface SettingsPageProvider {
|
||||
|
||||
fun buildEntry(arguments: Bundle?): List<SettingsEntry> = emptyList()
|
||||
}
|
||||
|
||||
fun SettingsPageProvider.createSettingsPage(arguments: Bundle? = null): SettingsPage {
|
||||
return SettingsPage.create(
|
||||
name = name,
|
||||
displayName = displayName,
|
||||
parameter = parameter,
|
||||
arguments = arguments
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user