diff options
4 files changed, 96 insertions, 22 deletions
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt index 9daa4f7c5ee9..db4990974e23 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt @@ -28,6 +28,7 @@ import com.android.settingslib.spa.gallery.page.ArgumentPageProvider import com.android.settingslib.spa.gallery.page.ChartPageProvider import com.android.settingslib.spa.gallery.page.FooterPageProvider import com.android.settingslib.spa.gallery.page.IllustrationPageProvider +import com.android.settingslib.spa.gallery.page.LoadingBarPageProvider import com.android.settingslib.spa.gallery.page.ProgressBarPageProvider import com.android.settingslib.spa.gallery.page.SettingsPagerPageProvider import com.android.settingslib.spa.gallery.page.SliderPageProvider @@ -72,6 +73,7 @@ class GallerySpaEnvironment(context: Context) : SpaEnvironment(context) { CategoryPageProvider, ActionButtonPageProvider, ProgressBarPageProvider, + LoadingBarPageProvider, ChartPageProvider, AlterDialogPageProvider, ), diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt index 6d53dae5ae41..5d26b3458487 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt @@ -33,6 +33,7 @@ import com.android.settingslib.spa.gallery.page.ArgumentPageProvider import com.android.settingslib.spa.gallery.page.ChartPageProvider import com.android.settingslib.spa.gallery.page.FooterPageProvider import com.android.settingslib.spa.gallery.page.IllustrationPageProvider +import com.android.settingslib.spa.gallery.page.LoadingBarPageProvider import com.android.settingslib.spa.gallery.page.ProgressBarPageProvider import com.android.settingslib.spa.gallery.page.SettingsPagerPageProvider import com.android.settingslib.spa.gallery.page.SliderPageProvider @@ -58,6 +59,7 @@ object HomePageProvider : SettingsPageProvider { CategoryPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ActionButtonPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ProgressBarPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), + LoadingBarPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ChartPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), AlterDialogPageProvider.buildInjectEntry().setLink(fromPage = owner).build(), ) diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/LoadingBarPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/LoadingBarPage.kt new file mode 100644 index 000000000000..c354930dc4a8 --- /dev/null +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/LoadingBarPage.kt @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.spa.gallery.page + +import android.os.Bundle +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.android.settingslib.spa.framework.common.SettingsEntryBuilder +import com.android.settingslib.spa.framework.common.SettingsPage +import com.android.settingslib.spa.framework.common.SettingsPageProvider +import com.android.settingslib.spa.framework.compose.navigator +import com.android.settingslib.spa.framework.theme.SettingsTheme +import com.android.settingslib.spa.widget.preference.Preference +import com.android.settingslib.spa.widget.preference.PreferenceModel +import com.android.settingslib.spa.widget.scaffold.RegularScaffold +import com.android.settingslib.spa.widget.ui.CircularLoadingBar +import com.android.settingslib.spa.widget.ui.LinearLoadingBar + +private const val TITLE = "Sample LoadingBar" + +object LoadingBarPageProvider : SettingsPageProvider { + override val name = "LoadingBar" + + fun buildInjectEntry(): SettingsEntryBuilder { + return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name)) + .setIsAllowSearch(true) + .setUiLayoutFn { + Preference(object : PreferenceModel { + override val title = TITLE + override val onClick = navigator(name) + }) + } + } + + override fun getTitle(arguments: Bundle?): String { + return TITLE + } + + @Composable + override fun Page(arguments: Bundle?) { + var loading by remember { mutableStateOf(true) } + RegularScaffold(title = getTitle(arguments)) { + Button( + onClick = { loading = !loading }, + modifier = Modifier.padding(start = 20.dp) + ) { + if (loading) { + Text(text = "Stop") + } else { + Text(text = "Resume") + } + } + } + + LinearLoadingBar(isLoading = loading, yOffset = 104.dp) + CircularLoadingBar(isLoading = loading) + } +} + +@Preview(showBackground = true) +@Composable +private fun LoadingBarPagePreview() { + SettingsTheme { + LoadingBarPageProvider.Page(null) + } +} diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ProgressBarPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ProgressBarPage.kt index 9136b0430c40..1f76557764a7 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ProgressBarPage.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ProgressBarPage.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.common.SettingsPageProvider @@ -39,9 +38,7 @@ import com.android.settingslib.spa.widget.preference.ProgressBarPreference import com.android.settingslib.spa.widget.preference.ProgressBarPreferenceModel import com.android.settingslib.spa.widget.preference.ProgressBarWithDataPreference import com.android.settingslib.spa.widget.scaffold.RegularScaffold -import com.android.settingslib.spa.widget.ui.CircularLoadingBar import com.android.settingslib.spa.widget.ui.CircularProgressBar -import com.android.settingslib.spa.widget.ui.LinearLoadingBar import kotlinx.coroutines.delay private const val TITLE = "Sample ProgressBar" @@ -66,18 +63,10 @@ object ProgressBarPageProvider : SettingsPageProvider { @Composable override fun Page(arguments: Bundle?) { - // Mocks a loading time of 2 seconds. - var loading by remember { mutableStateOf(true) } - LaunchedEffect(Unit) { - delay(2000) - loading = false - } - RegularScaffold(title = getTitle(arguments)) { // Auto update the progress and finally jump tp 0.4f. var progress by remember { mutableStateOf(0f) } LaunchedEffect(Unit) { - delay(2000) while (progress < 1f) { delay(100) progress += 0.01f @@ -86,19 +75,11 @@ object ProgressBarPageProvider : SettingsPageProvider { progress = 0.4f } - // Show as a placeholder for progress bar LargeProgressBar(progress) - // The remaining information only shows after loading complete. - if (!loading) { - SimpleProgressBar() - ProgressBarWithData() - CircularProgressBar(progress = progress, radius = 160f) - } + SimpleProgressBar() + ProgressBarWithData() + CircularProgressBar(progress = progress, radius = 160f) } - - // Add loading bar examples, running for 2 seconds. - LinearLoadingBar(isLoading = loading, yOffset = 64.dp) - CircularLoadingBar(isLoading = loading) } } |