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

Commit b2f3da5e authored by Olivier St-Onge's avatar Olivier St-Onge
Browse files

Support RTL for edit mode

Fixes: 406174013
Test: manually - with and without RTL
Flag: com.android.systemui.qs_ui_refactor_compose_fragment

Change-Id: Ie686570cc4f5ec274f2ec8427e14c5c7c0b5875e
parent 1caf584c
Loading
Loading
Loading
Loading
+25 −11
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.ColorProducer
import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
@@ -79,6 +80,7 @@ import androidx.compose.ui.semantics.stateDescription
import androidx.compose.ui.semantics.toggleableState
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.android.compose.modifiers.size
import com.android.compose.modifiers.thenIf
@@ -101,6 +103,7 @@ import com.android.systemui.qs.panels.ui.compose.infinitegrid.CommonTileDefaults
import com.android.systemui.qs.panels.ui.viewmodel.AccessibilityUiState
import com.android.systemui.qs.ui.compose.borderOnFocus
import com.android.systemui.res.R
import kotlin.math.abs

private const val TEST_TAG_TOGGLE = "qs_tile_toggle_target"

@@ -330,17 +333,19 @@ private fun TileLabel(
                    if (textSize > size.width) {
                        // Draw a blur over the end of the text
                        val edgeWidthPx = TileLabelBlurWidth.toPx()
                        drawRect(
                            topLeft = Offset(size.width - edgeWidthPx, 0f),
                            size = Size(edgeWidthPx, size.height),
                            brush =
                                Brush.horizontalGradient(
                        if (layoutDirection == LayoutDirection.Rtl) {
                            drawFadedEdge(
                                startX = 0f,
                                endX = edgeWidthPx,
                                colors = listOf(Color.Transparent, Color.Black),
                                    startX = size.width,
                                    endX = size.width - edgeWidthPx,
                                ),
                            blendMode = BlendMode.DstIn,
                            )
                        } else {
                            drawFadedEdge(
                                startX = size.width - edgeWidthPx,
                                endX = size.width,
                                colors = listOf(Color.Black, Color.Transparent),
                            )
                        }
                    }
                }
                .basicMarquee(
@@ -363,6 +368,15 @@ fun Modifier.largeTilePadding(isDualTarget: Boolean = false): Modifier {
    )
}

private fun DrawScope.drawFadedEdge(startX: Float, endX: Float, colors: List<Color>) {
    drawRect(
        topLeft = Offset(startX, 0f),
        size = Size(abs(endX - startX), size.height),
        brush = Brush.horizontalGradient(colors = colors, startX = startX, endX = endX),
        blendMode = BlendMode.DstIn,
    )
}

object CommonTileDefaults {
    val IconSize = 32.dp
    val LargeTileIconSize = 28.dp
+1 −1
Original line number Diff line number Diff line
@@ -971,7 +971,7 @@ fun EditTile(
                        }

                    layout(constraints.maxWidth, constraints.maxHeight) {
                        placeable.place(startPadding.roundToInt(), 0)
                        placeable.placeRelative(startPadding.roundToInt(), 0)
                    }
                }
                .largeTilePadding()
+2 −2
Original line number Diff line number Diff line
@@ -264,7 +264,7 @@ private fun MinimumInteractiveSizeComponent(
                        val radius = constraints.maxHeight / 2f
                        val rotationCenter = Offset(constraints.maxWidth - radius, radius)
                        val position = offsetForAngle(angle(), radius, rotationCenter) + offset()
                        placeable.place(
                        placeable.placeRelative(
                            position.x.roundToInt() - placeable.width / 2,
                            position.y.roundToInt() - placeable.height / 2,
                        )
@@ -285,7 +285,7 @@ private fun Modifier.resizable(selected: Boolean, state: ResizingState): Modifie
            state.anchoredDraggableState.requireOffset().roundToInt().takeIf { !isIdle }
                ?: constraints.maxWidth
        val placeable = measurable.measure(constraints.copy(minWidth = width, maxWidth = width))
        layout(constraints.maxWidth, placeable.height) { placeable.place(0, 0) }
        layout(constraints.maxWidth, placeable.height) { placeable.placeRelative(0, 0) }
    }
}