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

Commit 949babd7 authored by Kelly's avatar Kelly
Browse files

Add highlight for sliders and all preference widgets.

Test: Manually on device
Bug: 253536111
Change-Id: I4472d66f741490d00c2ff9bc3c9d41796de34b25
parent cd8f2047
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