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

Commit 0eb46041 authored by Kelly Zhang's avatar Kelly Zhang Committed by Android (Google) Code Review
Browse files

Merge "Add highlight for sliders and all preference widgets."

parents e0bf1b30 949babd7
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -17,15 +17,11 @@
package com.android.settingslib.spa.framework.common

import android.os.Bundle
import android.widget.Toast
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.ProvidedValue
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.LocalContext
import com.android.settingslib.spa.framework.compose.LocalNavController

const val INJECT_ENTRY_NAME = "INJECT"
@@ -126,17 +122,6 @@ data class SettingsEntry(

    @Composable
    fun UiLayout(runtimeArguments: Bundle? = null) {
        val context = LocalContext.current
        val controller = LocalNavController.current
        val highlight = rememberSaveable {
            mutableStateOf(controller.highlightEntryId == id)
        }
        if (highlight.value) {
            highlight.value = false
            // TODO: Add highlight entry logic
            Toast.makeText(context, "entry $id highlighted", Toast.LENGTH_SHORT).show()
        }

        CompositionLocalProvider(provideLocalEntryData()) {
            uiLayoutImpl(fullArgument(runtimeArguments))
        }
+37 −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.framework.util

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.android.settingslib.spa.framework.common.LocalEntryDataProvider

@Composable
internal fun EntryHighlight(UiLayoutFn: @Composable () -> Unit) {
    val entryData = LocalEntryDataProvider.current
    val isHighlighted = rememberSaveable { entryData.isHighlighted }
    val backgroundColor =
        if (isHighlighted) MaterialTheme.colorScheme.surfaceVariant else Color.Transparent
    Box(modifier = Modifier.background(color = backgroundColor)) {
        UiLayoutFn()
    }
}
+23 −20
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.EntryHighlight
import com.android.settingslib.spa.widget.preference.BaseLayout
import kotlin.math.roundToInt

@@ -108,14 +109,15 @@ fun SettingsSlider(model: SettingsSliderModel) {
internal fun SettingsSlider(
    title: String,
    initValue: Int,
    modifier: Modifier = Modifier,
    valueRange: IntRange = 0..100,
    onValueChange: ((value: Int) -> Unit)? = null,
    onValueChangeFinished: (() -> Unit)? = null,
    icon: ImageVector? = null,
    showSteps: Boolean = false,
    modifier: Modifier = Modifier,
) {
    var sliderPosition by rememberSaveable { mutableStateOf(initValue.toFloat()) }
    EntryHighlight {
        BaseLayout(
            title = title,
            subTitle = {
@@ -136,6 +138,7 @@ internal fun SettingsSlider(
            }) else null,
        )
    }
}

@Preview
@Composable
+20 −17
Original line number Diff line number Diff line
@@ -28,9 +28,11 @@ import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.framework.theme.SettingsShape
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.EntryHighlight

@Composable
fun MainSwitchPreference(model: SwitchPreferenceModel) {
    EntryHighlight {
        Surface(
            modifier = Modifier.padding(SettingsDimension.itemPaddingEnd),
            color = when (model.checked.value) {
@@ -50,6 +52,7 @@ fun MainSwitchPreference(model: SwitchPreferenceModel) {
            )
        }
    }
}

@Preview
@Composable
+11 −8
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.util.WrapOnClickWithLog
import com.android.settingslib.spa.framework.util.EntryHighlight
import com.android.settingslib.spa.widget.ui.createSettingsIcon

data class SimplePreferenceMacro(
@@ -115,6 +116,7 @@ fun Preference(
            )
        } else Modifier
    }
    EntryHighlight {
        BasePreference(
            title = model.title,
            summary = model.summary,
@@ -124,3 +126,4 @@ fun Preference(
            enabled = model.enabled,
        )
    }
}
Loading