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.remember
24 import androidx.compose.runtime.saveable.rememberSaveable
25 import androidx.compose.runtime.setValue
26 import androidx.compose.ui.tooling.preview.Preview
27 import com.android.settingslib.spa.framework.common.SettingsEntry
28 import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
29 import com.android.settingslib.spa.framework.common.SettingsPageProvider
30 import com.android.settingslib.spa.framework.common.createSettingsPage
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.MainSwitchPreference
34 import com.android.settingslib.spa.widget.preference.Preference
35 import com.android.settingslib.spa.widget.preference.PreferenceModel
36 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
37 
38 private const val TITLE = "Sample MainSwitchPreference"
39 
40 object MainSwitchPreferencePageProvider : SettingsPageProvider {
41     override val name = "MainSwitchPreference"
42     private val owner = createSettingsPage()
43 
44     override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
45         val entryList = mutableListOf<SettingsEntry>()
46         entryList.add(
47             SettingsEntryBuilder.create("MainSwitchPreference", owner)
48                 .setUiLayoutFn {
49                     SampleMainSwitchPreference()
50                 }.build()
51         )
52         entryList.add(
53             SettingsEntryBuilder.create("MainSwitchPreference not changeable", owner)
54                 .setUiLayoutFn {
55                     SampleNotChangeableMainSwitchPreference()
56                 }.build()
57         )
58 
59         return entryList
60     }
61 
62     @Composable
63     fun Entry() {
64         Preference(object : PreferenceModel {
65             override val title = TITLE
66             override val onClick = navigator(name)
67         })
68     }
69 
70     override fun getTitle(arguments: Bundle?): String {
71         return TITLE
72     }
73 }
74 
75 @Composable
SampleMainSwitchPreferencenull76 private fun SampleMainSwitchPreference() {
77     var checked by rememberSaveable { mutableStateOf(false) }
78     MainSwitchPreference(remember {
79         object : SwitchPreferenceModel {
80             override val title = "MainSwitchPreference"
81             override val checked = { checked }
82             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
83         }
84     })
85 }
86 
87 @Composable
SampleNotChangeableMainSwitchPreferencenull88 private fun SampleNotChangeableMainSwitchPreference() {
89     var checked by rememberSaveable { mutableStateOf(true) }
90     MainSwitchPreference(remember {
91         object : SwitchPreferenceModel {
92             override val title = "Not changeable"
93             override val changeable = { false }
94             override val checked = { checked }
95             override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
96         }
97     })
98 }
99 
100 @Preview(showBackground = true)
101 @Composable
MainSwitchPreferencePagePreviewnull102 private fun MainSwitchPreferencePagePreview() {
103     SettingsTheme {
104         MainSwitchPreferencePageProvider.Page(null)
105     }
106 }
107