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

Commit 6ebcca09 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Create TwoTargetSwitchPreference for SpaLib"

parents d1e42724 52d6effa
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.settingslib.spa.gallery.page.SliderPageProvider
import com.android.settingslib.spa.gallery.preference.PreferenceMainPageProvider
import com.android.settingslib.spa.gallery.preference.PreferencePageProvider
import com.android.settingslib.spa.gallery.preference.SwitchPreferencePageProvider
import com.android.settingslib.spa.gallery.preference.TwoTargetSwitchPreferencePageProvider
import com.android.settingslib.spa.gallery.ui.SpinnerPageProvider

val galleryPageProviders = SettingsPageProviderRepository(
@@ -33,6 +34,7 @@ val galleryPageProviders = SettingsPageProviderRepository(
        PreferenceMainPageProvider,
        PreferencePageProvider,
        SwitchPreferencePageProvider,
        TwoTargetSwitchPreferencePageProvider,
        ArgumentPageProvider,
        SliderPageProvider,
        SpinnerPageProvider,
+1 −0
Original line number Diff line number Diff line
@@ -48,5 +48,6 @@ private fun PreferenceMain() {
    RegularScaffold(title = TITLE) {
        PreferencePageProvider.EntryItem()
        SwitchPreferencePageProvider.EntryItem()
        TwoTargetSwitchPreferencePageProvider.EntryItem()
    }
}
+128 −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.preference

import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
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.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import kotlinx.coroutines.delay

private const val TITLE = "Sample TwoTargetSwitchPreference"

object TwoTargetSwitchPreferencePageProvider : SettingsPageProvider {
    override val name = "TwoTargetSwitchPreference"

    @Composable
    override fun Page(arguments: Bundle?) {
        TwoTargetSwitchPreferencePage()
    }

    @Composable
    fun EntryItem() {
        Preference(object : PreferenceModel {
            override val title = TITLE
            override val onClick = navigator(name)
        })
    }
}

@Composable
private fun TwoTargetSwitchPreferencePage() {
    RegularScaffold(title = TITLE) {
        SampleTwoTargetSwitchPreference()
        SampleTwoTargetSwitchPreferenceWithSummary()
        SampleTwoTargetSwitchPreferenceWithAsyncSummary()
        SampleNotChangeableTwoTargetSwitchPreference()
    }
}

@Composable
private fun SampleTwoTargetSwitchPreference() {
    val checked = rememberSaveable { mutableStateOf(false) }
    TwoTargetSwitchPreference(remember {
        object : SwitchPreferenceModel {
            override val title = "TwoTargetSwitchPreference"
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
    }) {}
}

@Composable
private fun SampleTwoTargetSwitchPreferenceWithSummary() {
    val checked = rememberSaveable { mutableStateOf(true) }
    TwoTargetSwitchPreference(remember {
        object : SwitchPreferenceModel {
            override val title = "TwoTargetSwitchPreference"
            override val summary = stateOf("With summary")
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
    }) {}
}

@Composable
private fun SampleTwoTargetSwitchPreferenceWithAsyncSummary() {
    val checked = rememberSaveable { mutableStateOf(true) }
    val summary = produceState(initialValue = " ") {
        delay(1000L)
        value = "Async summary"
    }
    TwoTargetSwitchPreference(remember {
        object : SwitchPreferenceModel {
            override val title = "TwoTargetSwitchPreference"
            override val summary = summary
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
    }) {}
}

@Composable
private fun SampleNotChangeableTwoTargetSwitchPreference() {
    val checked = rememberSaveable { mutableStateOf(true) }
    TwoTargetSwitchPreference(remember {
        object : SwitchPreferenceModel {
            override val title = "TwoTargetSwitchPreference"
            override val summary = stateOf("Not changeable")
            override val changeable = stateOf(false)
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
    }) {}
}

@Preview(showBackground = true)
@Composable
private fun TwoTargetSwitchPreferencePagePreview() {
    SettingsTheme {
        TwoTargetSwitchPreferencePage()
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ object SettingsDimension {
        bottom = itemPaddingVertical,
    )
    val itemPaddingAround = 8.dp
    val itemDividerHeight = 32.dp

    /** The size when app icon is displayed in list. */
    val appIconItemSize = 32.dp
+1 −0
Original line number Diff line number Diff line
@@ -19,4 +19,5 @@ package com.android.settingslib.spa.framework.theme
object SettingsOpacity {
    const val Full = 1f
    const val Disabled = 0.38f
    const val Divider = 0.2f
}
Loading