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.runtime.Composable
21 import androidx.compose.runtime.getValue
22 import androidx.compose.runtime.mutableStateOf
23 import androidx.compose.runtime.produceState
24 import androidx.compose.runtime.remember
25 import androidx.compose.runtime.saveable.rememberSaveable
26 import androidx.compose.runtime.setValue
27 import androidx.compose.ui.tooling.preview.Preview
28 import com.android.settingslib.spa.framework.common.SettingsPageProvider
29 import com.android.settingslib.spa.framework.compose.navigator
30 import com.android.settingslib.spa.framework.theme.SettingsTheme
31 import com.android.settingslib.spa.widget.preference.Preference
32 import com.android.settingslib.spa.widget.preference.PreferenceModel
33 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
34 import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
35 import com.android.settingslib.spa.widget.scaffold.RegularScaffold
36 import com.android.settingslib.spa.widget.ui.Category
37 import kotlinx.coroutines.delay
38 
39 private const val TITLE = "Sample TwoTargetSwitchPreference"
40 
41 object TwoTargetSwitchPreferencePageProvider : SettingsPageProvider {
42     override val name = "TwoTargetSwitchPreference"
43 
44     @Composable
45     override fun Page(arguments: Bundle?) {
46         RegularScaffold(TITLE) {
47             Category {
48                 SampleTwoTargetSwitchPreference()
49                 SampleTwoTargetSwitchPreferenceWithSummary()
50                 SampleTwoTargetSwitchPreferenceWithAsyncSummary()
51                 SampleNotChangeableTwoTargetSwitchPreference()
52             }
53         }
54     }
55 
56     @Composable
57     fun Entry() {
58         Preference(object : PreferenceModel {
59             override val title = TITLE
60             override val onClick = navigator(name)
61         })
62     }
63 }
64 
65 @Composable
SampleTwoTargetSwitchPreferencenull66 private fun SampleTwoTargetSwitchPreference() {
67     var checked by rememberSaveable { mutableStateOf(false) }
68     TwoTargetSwitchPreference(remember {
69         object : SwitchPreferenceModel {
70             override val title = "TwoTargetSwitchPreference"
71             override val checked = { checked }
72             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
73         }
74     }) {}
75 }
76 
77 @Composable
SampleTwoTargetSwitchPreferenceWithSummarynull78 private fun SampleTwoTargetSwitchPreferenceWithSummary() {
79     var checked by rememberSaveable { mutableStateOf(true) }
80     TwoTargetSwitchPreference(remember {
81         object : SwitchPreferenceModel {
82             override val title = "TwoTargetSwitchPreference"
83             override val summary = { "With summary" }
84             override val checked = { checked }
85             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
86         }
87     }) {}
88 }
89 
90 @Composable
SampleTwoTargetSwitchPreferenceWithAsyncSummarynull91 private fun SampleTwoTargetSwitchPreferenceWithAsyncSummary() {
92     var checked by rememberSaveable { mutableStateOf(true) }
93     val summary = produceState(initialValue = " ") {
94         delay(1000L)
95         value = "Async summary"
96     }
97     TwoTargetSwitchPreference(remember {
98         object : SwitchPreferenceModel {
99             override val title = "TwoTargetSwitchPreference"
100             override val summary = { summary.value }
101             override val checked = { checked }
102             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
103         }
104     }) {}
105 }
106 
107 @Composable
SampleNotChangeableTwoTargetSwitchPreferencenull108 private fun SampleNotChangeableTwoTargetSwitchPreference() {
109     var checked by rememberSaveable { mutableStateOf(true) }
110     TwoTargetSwitchPreference(remember {
111         object : SwitchPreferenceModel {
112             override val title = "TwoTargetSwitchPreference"
113             override val summary = { "Not changeable" }
114             override val changeable = { false }
115             override val checked = { checked }
116             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
117         }
118     }) {}
119 }
120 
121 @Preview(showBackground = true)
122 @Composable
TwoTargetSwitchPreferencePagePreviewnull123 private fun TwoTargetSwitchPreferencePagePreview() {
124     SettingsTheme {
125         TwoTargetSwitchPreferencePageProvider.Page(null)
126     }
127 }
128