Merge "Split loading bar samples and progress bar samples into two pages in SPA gallery."

This commit is contained in:
Kelly Zhang
2022-11-28 06:46:57 +00:00
committed by Android (Google) Code Review
4 changed files with 96 additions and 22 deletions

View File

@@ -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,
),

View File

@@ -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(),
)

View File

@@ -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)
}
}

View File

@@ -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)
}
}