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
SampleSwitchPreferencenull70 private 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
SampleSwitchPreferenceWithSummarynull82 private 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
SampleSwitchPreferenceWithAsyncSummarynull95 private 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
SampleNotChangeableSwitchPreferencenull112 private 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
SampleSwitchPreferenceWithIconnull126 private 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
SwitchPreferencePagePreviewnull142 private fun SwitchPreferencePagePreview() {
143     SettingsTheme {
144         SwitchPreferencePageProvider.Page(null)
145     }
146 }
147