1 /* <lambda>null2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settingslib.spa.gallery.preference 18 19 import android.os.Bundle 20 import androidx.compose.material.icons.Icons 21 import androidx.compose.material.icons.outlined.AirplanemodeActive 22 import androidx.compose.runtime.Composable 23 import androidx.compose.runtime.getValue 24 import androidx.compose.runtime.mutableStateOf 25 import androidx.compose.runtime.produceState 26 import androidx.compose.runtime.remember 27 import androidx.compose.runtime.saveable.rememberSaveable 28 import androidx.compose.runtime.setValue 29 import androidx.compose.ui.tooling.preview.Preview 30 import com.android.settingslib.spa.framework.common.SettingsPageProvider 31 import com.android.settingslib.spa.framework.compose.navigator 32 import com.android.settingslib.spa.framework.theme.SettingsTheme 33 import com.android.settingslib.spa.widget.preference.Preference 34 import com.android.settingslib.spa.widget.preference.PreferenceModel 35 import com.android.settingslib.spa.widget.preference.SwitchPreference 36 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel 37 import com.android.settingslib.spa.widget.scaffold.RegularScaffold 38 import com.android.settingslib.spa.widget.ui.Category 39 import com.android.settingslib.spa.widget.ui.SettingsIcon 40 import kotlinx.coroutines.delay 41 42 private const val TITLE = "Sample SwitchPreference" 43 44 object SwitchPreferencePageProvider : SettingsPageProvider { 45 override val name = "SwitchPreference" 46 47 @Composable 48 override fun Page(arguments: Bundle?) { 49 RegularScaffold(TITLE) { 50 Category { 51 SampleSwitchPreference() 52 SampleSwitchPreferenceWithSummary() 53 SampleSwitchPreferenceWithAsyncSummary() 54 SampleNotChangeableSwitchPreference() 55 SampleSwitchPreferenceWithIcon() 56 } 57 } 58 } 59 60 @Composable 61 fun Entry() { 62 Preference(object : PreferenceModel { 63 override val title = TITLE 64 override val onClick = navigator(name) 65 }) 66 } 67 } 68 69 @Composable SampleSwitchPreferencenull70private fun SampleSwitchPreference() { 71 var checked by rememberSaveable { mutableStateOf(false) } 72 SwitchPreference(remember { 73 object : SwitchPreferenceModel { 74 override val title = "SwitchPreference" 75 override val checked = { checked } 76 override val onCheckedChange = { newChecked: Boolean -> checked = newChecked } 77 } 78 }) 79 } 80 81 @Composable SampleSwitchPreferenceWithSummarynull82private fun SampleSwitchPreferenceWithSummary() { 83 var checked by rememberSaveable { mutableStateOf(true) } 84 SwitchPreference(remember { 85 object : SwitchPreferenceModel { 86 override val title = "SwitchPreference" 87 override val summary = { "With summary" } 88 override val checked = { checked } 89 override val onCheckedChange = { newChecked: Boolean -> checked = newChecked } 90 } 91 }) 92 } 93 94 @Composable SampleSwitchPreferenceWithAsyncSummarynull95private fun SampleSwitchPreferenceWithAsyncSummary() { 96 var checked by rememberSaveable { mutableStateOf(true) } 97 val summary = produceState(initialValue = " ") { 98 delay(1000L) 99 value = "Async summary" 100 } 101 SwitchPreference(remember { 102 object : SwitchPreferenceModel { 103 override val title = "SwitchPreference" 104 override val summary = { summary.value } 105 override val checked = { checked } 106 override val onCheckedChange = { newChecked: Boolean -> checked = newChecked } 107 } 108 }) 109 } 110 111 @Composable SampleNotChangeableSwitchPreferencenull112private fun SampleNotChangeableSwitchPreference() { 113 var checked by rememberSaveable { mutableStateOf(true) } 114 SwitchPreference(remember { 115 object : SwitchPreferenceModel { 116 override val title = "SwitchPreference" 117 override val summary = { "Not changeable" } 118 override val changeable = { false } 119 override val checked = { checked } 120 override val onCheckedChange = { newChecked: Boolean -> checked = newChecked } 121 } 122 }) 123 } 124 125 @Composable SampleSwitchPreferenceWithIconnull126private fun SampleSwitchPreferenceWithIcon() { 127 var checked by rememberSaveable { mutableStateOf(true) } 128 SwitchPreference(remember { 129 object : SwitchPreferenceModel { 130 override val title = "SwitchPreference" 131 override val checked = { checked } 132 override val onCheckedChange = { newChecked: Boolean -> checked = newChecked } 133 override val icon = @Composable { 134 SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive) 135 } 136 } 137 }) 138 } 139 140 @Preview(showBackground = true) 141 @Composable SwitchPreferencePagePreviewnull142private fun SwitchPreferencePagePreview() { 143 SettingsTheme { 144 SwitchPreferencePageProvider.Page(null) 145 } 146 } 147