Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 422d9d27 authored by Kelly's avatar Kelly
Browse files

Split loading bar samples and progress bar samples into two pages in SPA

gallery.

Test: manually test on device
Bug: 254364764
Change-Id: I78510871271345b596f7ba4d93f8c42adeadae6d
parent d2712967
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -71,6 +72,7 @@ class GallerySpaEnvironment(context: Context) : SpaEnvironment(context) {
                CategoryPageProvider,
                ActionButtonPageProvider,
                ProgressBarPageProvider,
                LoadingBarPageProvider,
                ChartPageProvider,
            ),
            rootPages = listOf(
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,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
@@ -57,6 +58,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(),
        )
    }
+89 −0
Original line number Diff line number Diff line
/*
 * 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)
    }
}
+3 −22
Original line number Diff line number Diff line
@@ -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,20 +75,12 @@ 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)
        }
    }

        // Add loading bar examples, running for 2 seconds.
        LinearLoadingBar(isLoading = loading, yOffset = 64.dp)
        CircularLoadingBar(isLoading = loading)
    }
}

@Composable