Implement default build Page function in SPP.

Implement getTitle function in gallery pages.
Use default build Page function in gallery if possible.

Bug: 244122804
Test: manual - build gallery
Change-Id: I67e35ec473209c27043f1a2c3d05bd4fd532cb46
This commit is contained in:
Zekan Qian
2022-10-28 15:03:22 +08:00
parent 0159fafb75
commit 9d93ab7ada
16 changed files with 84 additions and 100 deletions

View File

@@ -18,7 +18,6 @@ package com.android.settingslib.spa.gallery.home
import android.os.Bundle
import androidx.compose.runtime.Composable
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
@@ -60,9 +59,13 @@ object HomePageProvider : SettingsPageProvider {
)
}
override fun getTitle(arguments: Bundle?): String {
return SpaEnvironmentFactory.instance.appContext.getString(R.string.app_name)
}
@Composable
override fun Page(arguments: Bundle?) {
HomeScaffold(title = stringResource(R.string.app_name)) {
HomeScaffold(title = getTitle(arguments)) {
for (entry in buildEntry(arguments)) {
if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0))

View File

@@ -99,9 +99,13 @@ object ArgumentPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return ArgumentPageModel.genPageTitle()
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) {
RegularScaffold(title = getTitle(arguments)) {
for (entry in buildEntry(arguments)) {
if (entry.toPage != null) {
entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments))

View File

@@ -81,6 +81,10 @@ class ArgumentPageModel : PageModel() {
return EntrySearchData(title = PAGE_TITLE, keyword = ARGUMENT_PAGE_KEYWORDS)
}
fun genPageTitle(): String {
return PAGE_TITLE
}
@Composable
fun create(arguments: Bundle?): ArgumentPageModel {
val pageModel: ArgumentPageModel = viewModel(key = arguments.toString())
@@ -89,7 +93,6 @@ class ArgumentPageModel : PageModel() {
}
}
private val title = PAGE_TITLE
private var arguments: Bundle? = null
private var stringParam: String? = null
private var intParam: Int? = null
@@ -103,11 +106,6 @@ class ArgumentPageModel : PageModel() {
intParam = parameter.getIntArg(INT_PARAM_NAME, arguments)
}
@Composable
fun genPageTitle(): String {
return title
}
@Composable
fun genStringParamPreferenceModel(): PreferenceModel {
return object : PreferenceModel {
@@ -131,7 +129,7 @@ class ArgumentPageModel : PageModel() {
"$INT_PARAM_NAME=" + intParam!!
)
return object : PreferenceModel {
override val title = genPageTitle()
override val title = PAGE_TITLE
override val summary = stateOf(summaryArray.joinToString(", "))
override val onClick = navigator(
SettingsPageProviderEnum.ARGUMENT.displayName + parameter.navLink(arguments)

View File

@@ -67,9 +67,13 @@ object FooterPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
RegularScaffold(title = getTitle(arguments)) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}

View File

@@ -31,7 +31,6 @@ import com.android.settingslib.spa.widget.IllustrationModel
import com.android.settingslib.spa.widget.ResourceType
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
private const val TITLE = "Sample Illustration"
@@ -82,13 +81,8 @@ object IllustrationPageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -60,6 +60,10 @@ object ProgressBarPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
@Composable
override fun Page(arguments: Bundle?) {
// Mocks a loading time of 2 seconds.
@@ -69,7 +73,7 @@ object ProgressBarPageProvider : SettingsPageProvider {
loading = false
}
RegularScaffold(title = TITLE) {
RegularScaffold(title = getTitle(arguments)) {
// Auto update the progress and finally jump tp 0.4f.
var progress by remember { mutableStateOf(0f) }
LaunchedEffect(Unit) {

View File

@@ -49,9 +49,13 @@ object SettingsPagerPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
@Composable
override fun Page(arguments: Bundle?) {
SettingsScaffold(title = TITLE) { paddingValues ->
SettingsScaffold(title = getTitle(arguments)) { paddingValues ->
Box(Modifier.padding(paddingValues)) {
SettingsPager(listOf("Personal", "Work")) {
PlaceholderTitle("Page $it")

View File

@@ -37,7 +37,6 @@ import com.android.settingslib.spa.widget.preference.SliderPreference
import com.android.settingslib.spa.widget.preference.SliderPreferenceModel
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
private const val TITLE = "Sample Slider"
@@ -119,13 +118,8 @@ object SliderPageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -33,7 +33,6 @@ import com.android.settingslib.spa.widget.preference.MainSwitchPreference
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
private const val TITLE = "Sample MainSwitchPreference"
@@ -72,13 +71,8 @@ object MainSwitchPreferencePageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -17,7 +17,6 @@
package com.android.settingslib.spa.gallery.preference
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.SettingsPageProvider
@@ -25,7 +24,6 @@ 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
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
private const val TITLE = "Category: Preference"
@@ -54,12 +52,7 @@ object PreferenceMainPageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -49,7 +49,6 @@ import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Compan
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SimplePreferenceMacro
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.SettingsIcon
private const val TAG = "PreferencePage"
@@ -204,13 +203,8 @@ object PreferencePageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = PAGE_TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return PAGE_TITLE
}
}

View File

@@ -34,7 +34,6 @@ import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SwitchPreference
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import kotlinx.coroutines.delay
private const val TITLE = "Sample SwitchPreference"
@@ -88,13 +87,8 @@ object SwitchPreferencePageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -34,7 +34,6 @@ import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import kotlinx.coroutines.delay
private const val TITLE = "Sample TwoTargetSwitchPreference"
@@ -88,13 +87,8 @@ object TwoTargetSwitchPreferencePageProvider : SettingsPageProvider {
}
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
}

View File

@@ -48,41 +48,40 @@ object CategoryPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
@Composable
override fun Page(arguments: Bundle?) {
CategoryPage()
}
}
@Composable
private fun CategoryPage() {
RegularScaffold(title = TITLE) {
CategoryTitle("Category A")
Preference(remember {
object : PreferenceModel {
override val title = "Preference 1"
override val summary = stateOf("Summary 1")
}
})
Preference(remember {
object : PreferenceModel {
override val title = "Preference 2"
override val summary = stateOf("Summary 2")
}
})
Category("Category B") {
RegularScaffold(title = getTitle(arguments)) {
CategoryTitle("Category A")
Preference(remember {
object : PreferenceModel {
override val title = "Preference 3"
override val summary = stateOf("Summary 3")
override val title = "Preference 1"
override val summary = stateOf("Summary 1")
}
})
Preference(remember {
object : PreferenceModel {
override val title = "Preference 4"
override val summary = stateOf("Summary 4")
override val title = "Preference 2"
override val summary = stateOf("Summary 2")
}
})
Category("Category B") {
Preference(remember {
object : PreferenceModel {
override val title = "Preference 3"
override val summary = stateOf("Summary 3")
}
})
Preference(remember {
object : PreferenceModel {
override val title = "Preference 4"
override val summary = stateOf("Summary 4")
}
})
}
}
}
}

View File

@@ -49,9 +49,13 @@ object SpinnerPageProvider : SettingsPageProvider {
}
}
override fun getTitle(arguments: Bundle?): String {
return TITLE
}
@Composable
override fun Page(arguments: Bundle?) {
RegularScaffold(title = TITLE) {
RegularScaffold(title = getTitle(arguments)) {
val selectedIndex = rememberSaveable { mutableStateOf(0) }
Spinner(
options = (1..3).map { "Option $it" },

View File

@@ -19,6 +19,7 @@ package com.android.settingslib.spa.framework.common
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.navigation.NamedNavArgument
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
/**
* An SettingsPageProvider which is used to create Settings page instances.
@@ -36,13 +37,19 @@ interface SettingsPageProvider {
val parameter: List<NamedNavArgument>
get() = emptyList()
/** The [Composable] used to render this page. */
@Composable
fun Page(arguments: Bundle?)
fun getTitle(arguments: Bundle?): String = displayName ?: name
fun buildEntry(arguments: Bundle?): List<SettingsEntry> = emptyList()
fun getTitle(arguments: Bundle?): String = displayName ?: name
/** The [Composable] used to render this page. */
@Composable
fun Page(arguments: Bundle?) {
RegularScaffold(title = getTitle(arguments)) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
}
}
}
fun SettingsPageProvider.createSettingsPage(arguments: Bundle? = null): SettingsPage {