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

Commit ecb81351 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge changes I69e7ef22,I6ca5a886 into main

* changes:
  Enforce dark mode in QS
  Create a border for focus.
parents 18be59f9 200f777c
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
@@ -84,6 +85,7 @@ import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonVi
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.qs.ui.composable.QuickSettingsTheme
import com.android.systemui.qs.ui.compose.borderOnFocus
import com.android.systemui.res.R
import kotlinx.coroutines.launch

@@ -264,7 +266,11 @@ private fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier =
        color = colorAttr(model.backgroundColor),
        shape = CircleShape,
        onClick = model.onClick,
        modifier = modifier,
        modifier =
            modifier.borderOnFocus(
                color = MaterialTheme.colorScheme.secondary,
                CornerSize(percent = 50),
            ),
    ) {
        val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified
        Icon(model.icon, tint = tint, modifier = Modifier.size(20.dp))
@@ -291,7 +297,11 @@ private fun NumberButton(
        shape = CircleShape,
        onClick = onClick,
        interactionSource = interactionSource,
        modifier = modifier,
        modifier =
            modifier.borderOnFocus(
                color = MaterialTheme.colorScheme.secondary,
                CornerSize(percent = 50),
            ),
    ) {
        Box(Modifier.size(40.dp)) {
            Box(
@@ -342,7 +352,10 @@ private fun TextButton(
        color = colorAttr(R.attr.underSurface),
        contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
        borderStroke = BorderStroke(1.dp, colorAttr(R.attr.shadeInactive)),
        modifier = modifier.padding(horizontal = 4.dp),
        modifier =
            modifier
                .padding(horizontal = 4.dp)
                .borderOnFocus(color = MaterialTheme.colorScheme.secondary, CornerSize(50)),
        onClick = onClick,
    ) {
        Row(
+14 −8
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -31,7 +32,6 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
@@ -61,6 +61,7 @@ import com.android.systemui.haptics.slider.SeekableSliderTrackerConfig
import com.android.systemui.haptics.slider.SliderHapticFeedbackConfig
import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.qs.ui.compose.borderOnFocus
import com.android.systemui.res.R
import com.android.systemui.utils.PolicyRestriction

@@ -102,10 +103,11 @@ private fun BrightnessSlider(
            null
        }

    val overriddenByAppState by if (Flags.showToastWhenAppControlBrightness()) {
        viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle()
    val overriddenByAppState =
        if (Flags.showToastWhenAppControlBrightness()) {
            viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle().value
        } else {
        mutableStateOf(false)
            false
        }

    PlatformSlider(
@@ -160,7 +162,7 @@ private fun BrightnessSlider(
                if (interaction is DragInteraction.Start && overriddenByAppState) {
                    viewModel.showToast(
                        context,
                        R.string.quick_settings_brightness_unable_adjust_msg
                        R.string.quick_settings_brightness_unable_adjust_msg,
                    )
                }
            }
@@ -213,7 +215,11 @@ fun BrightnessSliderContainer(
                coroutineScope.launch { viewModel.onDrag(Drag.Stopped(GammaBrightness(it))) }
            },
            modifier =
                Modifier.then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier)
                Modifier.borderOnFocus(
                        color = MaterialTheme.colorScheme.secondary,
                        cornerSize = CornerSize(32.dp),
                    )
                    .then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier)
                    .sliderBackground(containerColor)
                    .fillMaxWidth(),
            formatter = viewModel::formatValue,
+17 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.keyboard.shortcut.ui.composable

import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.IndicationNodeFactory
import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
@@ -126,8 +127,7 @@ fun SelectableShortcutSurface(
                    .selectable(
                        selected = selected,
                        interactionSource = interactionSource,
                        indication =
                            ShortcutHelperIndication(interactionSource, interactionsConfig),
                        indication = ShortcutHelperIndication(interactionsConfig),
                        enabled = enabled,
                        onClick = onClick,
                    )
@@ -181,8 +181,7 @@ fun ClickableShortcutSurface(
                    )
                    .clickable(
                        interactionSource = interactionSource,
                        indication =
                            ShortcutHelperIndication(interactionSource, interactionsConfig),
                        indication = ShortcutHelperIndication(interactionsConfig),
                        enabled = enabled,
                        onClick = onClick,
                    ),
@@ -507,10 +506,8 @@ private class ShortcutHelperInteractionsNode(
    }
}

data class ShortcutHelperIndication(
    private val interactionSource: InteractionSource,
    private val interactionsConfig: InteractionsConfig,
) : IndicationNodeFactory {
data class ShortcutHelperIndication(private val interactionsConfig: InteractionsConfig) :
    IndicationNodeFactory {
    override fun create(interactionSource: InteractionSource): DelegatableNode {
        return ShortcutHelperInteractionsNode(interactionSource, interactionsConfig)
    }
@@ -529,3 +526,15 @@ data class InteractionsConfig(
    val hoverPadding: Dp = 0.dp,
    val pressedPadding: Dp = hoverPadding,
)

@Composable
fun ProvideShortcutHelperIndication(
    interactionsConfig: InteractionsConfig,
    content: @Composable () -> Unit,
) {
    CompositionLocalProvider(
        LocalIndication provides ShortcutHelperIndication(interactionsConfig)
    ) {
        content()
    }
}
+61 −43
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
@@ -78,6 +79,7 @@ import androidx.compose.ui.semantics.CustomAccessibilityAction
import androidx.compose.ui.semantics.customActions
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.round
import androidx.compose.ui.util.fastRoundToInt
import androidx.compose.ui.viewinterop.AndroidView
@@ -102,6 +104,8 @@ import com.android.systemui.Dumpable
import com.android.systemui.brightness.ui.compose.BrightnessSliderContainer
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyboard.shortcut.ui.composable.InteractionsConfig
import com.android.systemui.keyboard.shortcut.ui.composable.ProvideShortcutHelperIndication
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.setSnapshotBinding
import com.android.systemui.media.controls.ui.view.MediaHost
@@ -240,7 +244,8 @@ constructor(

    @Composable
    private fun Content() {
        PlatformTheme {
        PlatformTheme(isDarkTheme = true) {
            ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) {
                AnimatedVisibility(
                    visible = viewModel.isQsVisible,
                    modifier =
@@ -266,7 +271,8 @@ constructor(
                    AnimatedContent(
                        targetState = isEditing,
                        transitionSpec = {
                        fadeIn(animationSpecEditMode) togetherWith fadeOut(animationSpecEditMode)
                            fadeIn(animationSpecEditMode) togetherWith
                                fadeOut(animationSpecEditMode)
                        },
                        label = "EditModeAnimatedContent",
                    ) { editing ->
@@ -290,6 +296,7 @@ constructor(
                }
            }
        }
    }

    /**
     * STL that contains both QQS (tiles) and QS (brightness, tiles, footer actions), but no Edit
@@ -1090,3 +1097,14 @@ private object ResIdTags {
    const val qsScroll = "expanded_qs_scroll_view"
    const val qsFooterActions = "qs_footer_actions"
}

@Composable
private fun interactionsConfig() =
    InteractionsConfig(
        hoverOverlayColor = MaterialTheme.colorScheme.onSurface,
        hoverOverlayAlpha = 0.11f,
        pressedOverlayColor = MaterialTheme.colorScheme.onSurface,
        pressedOverlayAlpha = 0.15f,
        // we are OK using this as our content is clipped and all corner radius are larger than this
        surfaceCornerRadius = 28.dp,
    )
+28 −3
Original line number Diff line number Diff line
@@ -18,10 +18,13 @@ package com.android.systemui.qs.panels.ui.compose

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material3.Icon
@@ -32,7 +35,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
@@ -41,6 +43,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.android.compose.animation.scene.SceneScope
import com.android.compose.modifiers.padding
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.qs.panels.dagger.PaginatedBaseLayoutType
@@ -48,6 +51,7 @@ import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions.
import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions.InterPageSpacing
import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel
import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel
import com.android.systemui.qs.ui.compose.borderOnFocus
import com.android.systemui.res.R
import javax.inject.Inject

@@ -89,9 +93,24 @@ constructor(
        }

        Column {
            val contentPaddingValue =
                if (pages.size > 1) {
                    InterPageSpacing
                } else {
                    0.dp
                }
            val contentPadding = PaddingValues(horizontal = contentPaddingValue)

            /* Use negative padding equal with value equal to content padding. That way, each page
             * layout extends to the sides, but the content is as if there was no padding. That
             * way, the clipping bounds of the HorizontalPager extend beyond the tiles in each page.
             */
            HorizontalPager(
                state = pagerState,
                modifier = Modifier.sysuiResTag("qs_pager"),
                modifier =
                    Modifier.sysuiResTag("qs_pager")
                        .padding(horizontal = { -contentPaddingValue.roundToPx() }),
                contentPadding = contentPadding,
                pageSpacing = if (pages.size > 1) InterPageSpacing else 0.dp,
                beyondViewportPageCount = 1,
                verticalAlignment = Alignment.Top,
@@ -114,7 +133,13 @@ constructor(
                CompositionLocalProvider(value = LocalContentColor provides Color.White) {
                    IconButton(
                        onClick = editModeStart,
                        modifier = Modifier.align(Alignment.CenterEnd),
                        shape = RoundedCornerShape(CornerSize(28.dp)),
                        modifier =
                            Modifier.align(Alignment.CenterEnd)
                                .borderOnFocus(
                                    color = MaterialTheme.colorScheme.secondary,
                                    cornerSize = CornerSize(FooterHeight / 2),
                                ),
                    ) {
                        Icon(
                            imageVector = Icons.Default.Edit,
Loading