Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34823ffa authored by Kelly's avatar Kelly
Browse files

Add build entries for SPA gallery pages.

Test: manually test on device.
Bug: 245455162
Change-Id: I7948dfb74f4021aed78f99d7a63655114128f7f5
parent 4f5b1bb1
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ 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.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.gallery.R
@@ -35,6 +37,37 @@ import com.android.settingslib.spa.widget.scaffold.HomeScaffold
object HomePageProvider : SettingsPageProvider {
    override val name = "Home"

    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
        val owner = SettingsPage.create(name)
        val entryList = mutableListOf<SettingsEntry>()
        entryList.add(
            PreferenceMainPageProvider.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()
+37 −10
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@ 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.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
@@ -34,6 +37,36 @@ private const val TITLE = "Sample Footer"
object FooterPageProvider : SettingsPageProvider {
    override val name = "Footer"

    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
        val owner = SettingsPage.create(name)
        val entryList = mutableListOf<SettingsEntry>()
        entryList.add(
            SettingsEntryBuilder.create( "Some Preference", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    Preference(remember {
                        object : PreferenceModel {
                            override val title = "Some Preference"
                            override val summary = stateOf("Some summary")
                        }
                    })
                }.build()
        )

        return entryList
    }

    fun buildInjectEntry(): SettingsEntryBuilder {
        return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
            .setIsAllowSearch(true)
            .setUiLayoutFn {
                Preference(object : PreferenceModel {
                    override val title = TITLE
                    override val onClick = navigator(name)
                })
            }
    }

    @Composable
    override fun Page(arguments: Bundle?) {
        FooterPage()
@@ -41,22 +74,16 @@ object FooterPageProvider : SettingsPageProvider {

    @Composable
    fun EntryItem() {
        Preference(object : PreferenceModel {
            override val title = TITLE
            override val onClick = navigator(name)
        })
        buildInjectEntry().build().uiLayout.let { it() }
    }
}

@Composable
private fun FooterPage() {
    RegularScaffold(title = TITLE) {
        Preference(remember {
            object : PreferenceModel {
                override val title = "Some Preference"
                override val summary = stateOf("Some summary")
        for (entry in FooterPageProvider.buildEntry(arguments = null)) {
            entry.uiLayout()
        }
        })
        Footer(footerText = "Footer text always at the end of page.")
    }
}
+55 −26
Original line number Diff line number Diff line
@@ -17,12 +17,11 @@
package com.android.settingslib.spa.gallery.page

import android.os.Bundle
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
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.compose.navigator
import com.android.settingslib.spa.framework.theme.SettingsTheme
@@ -32,27 +31,19 @@ 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"

object IllustrationPageProvider : SettingsPageProvider {
    override val name = "Illustration"

    @Composable
    override fun Page(arguments: Bundle?) {
        IllustrationPage()
    }

    @Composable
    fun EntryItem() {
        Preference(object : PreferenceModel {
            override val title = "Sample Illustration"
            override val onClick = navigator(name)
        })
    }
}

@Composable
private fun IllustrationPage() {
    Column(Modifier.verticalScroll(rememberScrollState())) {
    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
        val owner = SettingsPage.create(name)
        val entryList = mutableListOf<SettingsEntry>()
        entryList.add(
            SettingsEntryBuilder.create( "Lottie Illustration", owner)
                .setUiLayoutFn {
                    Preference(object : PreferenceModel {
                        override val title = "Lottie Illustration"
                    })
@@ -61,7 +52,11 @@ private fun IllustrationPage() {
                        override val resId = R.raw.accessibility_shortcut_type_triple_tap
                        override val resourceType = ResourceType.LOTTIE
                    })

                }.build()
        )
        entryList.add(
            SettingsEntryBuilder.create( "Image Illustration", owner)
                .setUiLayoutFn {
                    Preference(object : PreferenceModel {
                        override val title = "Image Illustration"
                    })
@@ -70,6 +65,40 @@ private fun IllustrationPage() {
                        override val resId = R.drawable.accessibility_captioning_banner
                        override val resourceType = ResourceType.IMAGE
                    })
                }.build()
        )

        return entryList
    }

     fun buildInjectEntry(): SettingsEntryBuilder {
        return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
            .setIsAllowSearch(true)
            .setUiLayoutFn {
                Preference(object : PreferenceModel {
                    override val title = TITLE
                    override val onClick = navigator(name)
                })
            }
    }

    @Composable
    override fun Page(arguments: Bundle?) {
        IllustrationPage()
    }

    @Composable
    fun EntryItem() {
        buildInjectEntry().build().uiLayout.let { it() }
    }
}

@Composable
private fun IllustrationPage() {
    RegularScaffold(title = TITLE) {
        for (entry in IllustrationPageProvider.buildEntry(arguments = null)) {
            entry.uiLayout()
        }
    }
}

+14 −4
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.settingslib.spa.gallery.page
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
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.compose.navigator
import com.android.settingslib.spa.framework.theme.SettingsTheme
@@ -33,6 +35,17 @@ private const val TITLE = "Sample SettingsPager"
object SettingsPagerPageProvider : SettingsPageProvider {
    override val name = "SettingsPager"

    fun buildInjectEntry(): SettingsEntryBuilder {
        return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
            .setIsAllowSearch(true)
            .setUiLayoutFn {
                Preference(object : PreferenceModel {
                    override val title = TITLE
                    override val onClick = navigator(name)
                })
            }
    }

    @Composable
    override fun Page(arguments: Bundle?) {
        SettingsPagerPage()
@@ -40,10 +53,7 @@ object SettingsPagerPageProvider : SettingsPageProvider {

    @Composable
    fun EntryItem() {
        Preference(object : PreferenceModel {
            override val title = TITLE
            override val onClick = navigator(name)
        })
        buildInjectEntry().build().uiLayout.let { it() }
    }
}

+82 −40
Original line number Diff line number Diff line
@@ -27,6 +27,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
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.compose.navigator
import com.android.settingslib.spa.framework.theme.SettingsTheme
@@ -41,28 +44,23 @@ private const val TITLE = "Sample Slider"
object SliderPageProvider : SettingsPageProvider {
    override val name = "Slider"

    @Composable
    override fun Page(arguments: Bundle?) {
        SliderPage()
    }

    @Composable
    fun EntryItem() {
        Preference(object : PreferenceModel {
            override val title = TITLE
            override val onClick = navigator(name)
        })
    }
}

@Composable
private fun SliderPage() {
    RegularScaffold(title = TITLE) {
    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
        val owner = SettingsPage.create(name)
        val entryList = mutableListOf<SettingsEntry>()
        entryList.add(
            SettingsEntryBuilder.create("Simple Slider", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    SettingsSlider(object : SettingsSliderModel {
            override val title = "Slider"
                        override val title = "Simple Slider"
                        override val initValue = 40
                    })

                }.build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with icon", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    SettingsSlider(object : SettingsSliderModel {
                        override val title = "Slider with icon"
                        override val initValue = 30
@@ -71,7 +69,12 @@ private fun SliderPage() {
                        }
                        override val icon = Icons.Outlined.AccessAlarm
                    })

                }.build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with changeable icon", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    val initValue = 0
                    var icon by remember { mutableStateOf(Icons.Outlined.MusicOff) }
                    var sliderPosition by remember { mutableStateOf(initValue) }
@@ -87,13 +90,52 @@ private fun SliderPage() {
                        }
                        override val icon = icon
                    })

                }.build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with steps", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    SettingsSlider(object : SettingsSliderModel {
                        override val title = "Slider with steps"
                        override val initValue = 2
                        override val valueRange = 1..5
                        override val showSteps = true
                    })
                }.build()
        )

        return entryList
    }

    fun buildInjectEntry(): SettingsEntryBuilder {
        return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
            .setIsAllowSearch(true)
            .setUiLayoutFn {
                Preference(object : PreferenceModel {
                    override val title = TITLE
                    override val onClick = navigator(name)
                })
            }
    }

    @Composable
    override fun Page(arguments: Bundle?) {
        SliderPage()
    }

    @Composable
    fun EntryItem() {
        buildInjectEntry().build().uiLayout.let { it() }
    }
}

@Composable
private fun SliderPage() {
    RegularScaffold(title = TITLE) {
        for (entry in SliderPageProvider.buildEntry(arguments = null)) {
            entry.uiLayout()
        }
    }
}

Loading