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 SampleTwoTargetSwitchPreferencenull66private 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 SampleTwoTargetSwitchPreferenceWithSummarynull78private 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 SampleTwoTargetSwitchPreferenceWithAsyncSummarynull91private 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 SampleNotChangeableTwoTargetSwitchPreferencenull108private 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 TwoTargetSwitchPreferencePagePreviewnull123private fun TwoTargetSwitchPreferencePagePreview() { 124 SettingsTheme { 125 TwoTargetSwitchPreferencePageProvider.Page(null) 126 } 127 } 128