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

Commit bb0e2c55 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[expressive design] Add more examples to gallery." into main

parents 21382d60 892f8e20
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.settingslib.spa.gallery.page.LoadingBarPageProvider
import com.android.settingslib.spa.gallery.page.ProgressBarPageProvider
import com.android.settingslib.spa.gallery.scaffold.NonScrollablePagerPageProvider
import com.android.settingslib.spa.gallery.page.SliderPageProvider
import com.android.settingslib.spa.gallery.preference.CheckBoxPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.IntroPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.ListPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.MainSwitchPreferencePageProvider
@@ -46,6 +47,7 @@ import com.android.settingslib.spa.gallery.preference.PreferenceMainPageProvider
import com.android.settingslib.spa.gallery.preference.PreferencePageProvider
import com.android.settingslib.spa.gallery.preference.SwitchPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.TopIntroPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.TwoTargetButtonPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.TwoTargetSwitchPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.ZeroStatePreferencePageProvider
import com.android.settingslib.spa.gallery.scaffold.PagerMainPageProvider
@@ -105,6 +107,8 @@ class GallerySpaEnvironment(context: Context) : SpaEnvironment(context) {
                CopyablePageProvider,
                IntroPreferencePageProvider,
                TopIntroPreferencePageProvider,
                CheckBoxPreferencePageProvider,
                TwoTargetButtonPreferencePageProvider,
            ),
            rootPages = listOf(
                HomePageProvider.createSettingsPage(),
+71 −28
Original line number Diff line number Diff line
@@ -19,50 +19,93 @@ package com.android.settingslib.spa.gallery.dialog
import android.os.Bundle
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
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.dialog.AlertDialogButton
import com.android.settingslib.spa.widget.dialog.SettingsAlertDialogWithIcon
import com.android.settingslib.spa.widget.dialog.rememberAlertDialogPresenter
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.Category

private const val TITLE = "Category: Dialog"

object DialogMainPageProvider : SettingsPageProvider {
    override val name = "DialogMain"
    private val owner = createSettingsPage()

    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> = listOf(
        SettingsEntryBuilder.create("AlertDialog", owner).setUiLayoutFn {
            val alertDialogPresenter = rememberAlertDialogPresenter(
    @Composable
    override fun Page(arguments: Bundle?) {
        RegularScaffold(TITLE) {
            Category {
                AlertDialog()
                AlertDialogWithIcon()
                NavDialog()
            }
        }
    }

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

    override fun getTitle(arguments: Bundle?) = TITLE
}

@Composable
private fun AlertDialog() {
    val alertDialogPresenter =
        rememberAlertDialogPresenter(
            confirmButton = AlertDialogButton("Ok"),
            dismissButton = AlertDialogButton("Cancel"),
            title = "Title",
            text = { Text("Text") },
        )
            Preference(object : PreferenceModel {
    Preference(
        object : PreferenceModel {
            override val title = "Show AlertDialog"
            override val onClick = alertDialogPresenter::open
            })
        }.build(),
        SettingsEntryBuilder.create("NavDialog", owner).setUiLayoutFn {
            Preference(object : PreferenceModel {
                override val title = "Navigate to Dialog"
                override val onClick = navigator(route = NavDialogProvider.name)
            })
        }.build(),
        }
    )
}

@Composable
    fun Entry() {
        Preference(object : PreferenceModel {
            override val title = TITLE
            override val onClick = navigator(name)
        })
private fun AlertDialogWithIcon() {
    var openDialog by rememberSaveable { mutableStateOf(false) }
    val close = { openDialog = false }
    val open = { openDialog = true }
    if (openDialog) {
        SettingsAlertDialogWithIcon(
            title = "Title",
            onDismissRequest = close,
            confirmButton = AlertDialogButton("OK", onClick = close),
            dismissButton = AlertDialogButton("Dismiss", onClick = close),
        ) {}
    }
    Preference(
        object : PreferenceModel {
            override val title = "Show AlertDialogWithIcon"
            override val onClick = open
        }
    )
}

    override fun getTitle(arguments: Bundle?) = TITLE
@Composable
private fun NavDialog() {
    Preference(
        object : PreferenceModel {
            override val title = "Navigate to Dialog"
            override val onClick = navigator(route = NavDialogProvider.name)
        }
    )
}
+99 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib.spa.gallery.preference

import android.os.Bundle
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AirplanemodeActive
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.widget.preference.CheckboxPreference
import com.android.settingslib.spa.widget.preference.CheckboxPreferenceModel
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.Category
import com.android.settingslib.spa.widget.ui.SettingsIcon

private const val TITLE = "Sample CheckBoxPreference"

object CheckBoxPreferencePageProvider : SettingsPageProvider {
    override val name = "CheckBoxPreference"

    @Composable
    override fun Page(arguments: Bundle?) {
        RegularScaffold(TITLE) {
            Category {
                var checked1 by rememberSaveable { mutableStateOf(true) }
                CheckboxPreference(
                    object : CheckboxPreferenceModel {
                        override val title = "Use Dark theme"
                        override val checked = { checked1 }
                        override val onCheckedChange = { newChecked: Boolean ->
                            checked1 = newChecked
                        }
                    }
                )
                var checked2 by rememberSaveable { mutableStateOf(false) }
                CheckboxPreference(
                    object : CheckboxPreferenceModel {
                        override val title = "Use Dark theme"
                        override val summary = { "Summary" }
                        override val checked = { checked2 }
                        override val onCheckedChange = { newChecked: Boolean ->
                            checked2 = newChecked
                        }
                    }
                )
                var checked3 by rememberSaveable { mutableStateOf(true) }
                CheckboxPreference(
                    object : CheckboxPreferenceModel {
                        override val title = "Use Dark theme"
                        override val summary = { "Summary" }
                        override val checked = { checked3 }
                        override val onCheckedChange = { newChecked: Boolean ->
                            checked3 = newChecked
                        }
                        override val icon =
                            @Composable {
                                SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive)
                            }
                    }
                )
            }
        }
    }

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

    override fun getTitle(arguments: Bundle?): String {
        return TITLE
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -36,11 +36,13 @@ object PreferenceMainPageProvider : SettingsPageProvider {
            Category {
                PreferencePageProvider.Entry()
                ListPreferencePageProvider.Entry()
                CheckBoxPreferencePageProvider.Entry()
            }
            Category {
                SwitchPreferencePageProvider.Entry()
                MainSwitchPreferencePageProvider.Entry()
                TwoTargetSwitchPreferencePageProvider.Entry()
                TwoTargetButtonPreferencePageProvider.Entry()
            }
            Category {
                ZeroStatePreferencePageProvider.Entry()
+80 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib.spa.gallery.preference

import android.os.Bundle
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.Info
import androidx.compose.runtime.Composable
import com.android.settingslib.spa.framework.common.SettingsPageProvider
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.preference.TwoTargetButtonPreference
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.Category

private const val TITLE = "Sample TwoTargetButtonPreference"

object TwoTargetButtonPreferencePageProvider : SettingsPageProvider {
    override val name = "TwoTargetButtonPreference"

    @Composable
    override fun Page(arguments: Bundle?) {
        RegularScaffold(TITLE) {
            Category {
                SampleTwoTargetButtonPreference()
                SampleTwoTargetButtonPreferenceWithSummary()
            }
        }
    }

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

@Composable
private fun SampleTwoTargetButtonPreference() {
    TwoTargetButtonPreference(
        title = "TwoTargetButton",
        summary = { "" },
        buttonIcon = Icons.Outlined.Info,
        buttonIconDescription = "info",
        onClick = {},
        onButtonClick = {},
    )
}

@Composable
private fun SampleTwoTargetButtonPreferenceWithSummary() {
    TwoTargetButtonPreference(
        title = "TwoTargetButton",
        summary = { "summary" },
        buttonIcon = Icons.Outlined.Add,
        buttonIconDescription = "info",
        onClick = {},
        onButtonClick = {},
    )
}