1 /* 2 * Copyright (C) 2024 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.foundation.layout.Box 21 import androidx.compose.foundation.layout.fillMaxSize 22 import androidx.compose.material.icons.Icons 23 import androidx.compose.material.icons.filled.History 24 import androidx.compose.runtime.Composable 25 import androidx.compose.ui.Alignment 26 import androidx.compose.ui.Modifier 27 import androidx.compose.ui.tooling.preview.Preview 28 import com.android.settingslib.spa.framework.common.SettingsEntry 29 import com.android.settingslib.spa.framework.common.SettingsEntryBuilder 30 import com.android.settingslib.spa.framework.common.SettingsPageProvider 31 import com.android.settingslib.spa.framework.common.createSettingsPage 32 import com.android.settingslib.spa.framework.compose.navigator 33 import com.android.settingslib.spa.framework.theme.SettingsTheme 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.ZeroStatePreference 37 38 private const val TITLE = "Sample ZeroStatePreference" 39 40 object ZeroStatePreferencePageProvider : SettingsPageProvider { 41 override val name = "ZeroStatePreference" 42 private val owner = createSettingsPage() 43 buildEntrynull44 override fun buildEntry(arguments: Bundle?): List<SettingsEntry> { 45 val entryList = mutableListOf<SettingsEntry>() 46 entryList.add( 47 SettingsEntryBuilder.create("ZeroStatePreference", owner) 48 .setUiLayoutFn { 49 SampleZeroStatePreference() 50 }.build() 51 ) 52 53 return entryList 54 } 55 56 @Composable Entrynull57 fun Entry() { 58 Preference(object : PreferenceModel { 59 override val title = TITLE 60 override val onClick = navigator(name) 61 }) 62 } 63 getTitlenull64 override fun getTitle(arguments: Bundle?): String { 65 return TITLE 66 } 67 } 68 69 @Composable SampleZeroStatePreferencenull70private fun SampleZeroStatePreference() { 71 Box( 72 modifier = Modifier.fillMaxSize(), 73 contentAlignment = Alignment.Center 74 ) { 75 ZeroStatePreference( 76 Icons.Filled.History, 77 "No recent search history", 78 "Description" 79 ) 80 } 81 } 82 83 84 @Preview(showBackground = true) 85 @Composable SwitchPreferencePagePreviewnull86private fun SwitchPreferencePagePreview() { 87 SettingsTheme { 88 ZeroStatePreferencePageProvider.Page(null) 89 } 90 } 91