Merge "Split loading bar samples and progress bar samples into two pages in SPA gallery."
This commit is contained in:
@@ -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,
|
||||
),
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user