1 /* 2 * Copyright (C) 2022 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.page 18 19 import android.os.Bundle 20 import androidx.compose.foundation.layout.Spacer 21 import androidx.compose.foundation.layout.height 22 import androidx.compose.foundation.layout.padding 23 import androidx.compose.material3.Button 24 import androidx.compose.material3.Text 25 import androidx.compose.runtime.Composable 26 import androidx.compose.runtime.getValue 27 import androidx.compose.runtime.mutableStateOf 28 import androidx.compose.runtime.remember 29 import androidx.compose.runtime.setValue 30 import androidx.compose.ui.Modifier 31 import androidx.compose.ui.tooling.preview.Preview 32 import androidx.compose.ui.unit.dp 33 import com.android.settingslib.spa.framework.common.SettingsPageProvider 34 import com.android.settingslib.spa.framework.compose.navigator 35 import com.android.settingslib.spa.framework.theme.SettingsDimension 36 import com.android.settingslib.spa.framework.theme.SettingsTheme 37 import com.android.settingslib.spa.widget.preference.Preference 38 import com.android.settingslib.spa.widget.preference.PreferenceModel 39 import com.android.settingslib.spa.widget.scaffold.RegularScaffold 40 import com.android.settingslib.spa.widget.ui.CircularLoadingBar 41 import com.android.settingslib.spa.widget.ui.LinearLoadingBar 42 43 private const val TITLE = "Sample LoadingBar" 44 45 object LoadingBarPageProvider : SettingsPageProvider { 46 override val name = "LoadingBar" 47 48 @Composable Entrynull49 fun Entry() { 50 Preference(object : PreferenceModel { 51 override val title = TITLE 52 override val onClick = navigator(name) 53 }) 54 } 55 getTitlenull56 override fun getTitle(arguments: Bundle?): String { 57 return TITLE 58 } 59 60 @Composable Pagenull61 override fun Page(arguments: Bundle?) { 62 var loading by remember { mutableStateOf(true) } 63 RegularScaffold(title = getTitle(arguments)) { 64 Button( 65 onClick = { loading = !loading }, 66 modifier = Modifier.padding(start = 20.dp) 67 ) { 68 if (loading) { 69 Text(text = "Stop") 70 } else { 71 Text(text = "Resume") 72 } 73 } 74 Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) 75 LinearLoadingBar(isLoading = loading) 76 Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) 77 CircularLoadingBar(isLoading = loading) 78 } 79 } 80 } 81 82 @Preview(showBackground = true) 83 @Composable LoadingBarPagePreviewnull84private fun LoadingBarPagePreview() { 85 SettingsTheme { 86 LoadingBarPageProvider.Page(null) 87 } 88 } 89