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

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

Block drag gestures from available tiles

Also adjust the undo and layout icons

Flag: com.android.systemui.qs_edit_mode_tabs
Bug: 416236871
Test: manually - drag tiles in edit mode

Change-Id: I13a09846612069a977eb523b4f8ddfbd2c8183e2
parent 0bb87e65
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.systemui.qs.panels.ui.compose.icons
package com.android.systemui.common.ui.icons

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathFillType
@@ -25,7 +25,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp

public val Edit: ImageVector
val Edit: ImageVector
    get() {
        if (_Edit != null) {
            return _Edit!!
+88 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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.systemui.common.ui.icons

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp

val TileMedium: ImageVector
    get() {
        if (_TileMedium != null) {
            return _TileMedium!!
        }
        _TileMedium =
            ImageVector.Builder(
                    name = "TileMedium",
                    defaultWidth = 24.dp,
                    defaultHeight = 24.dp,
                    viewportWidth = 960f,
                    viewportHeight = 960f,
                )
                .apply {
                    path(fill = SolidColor(Color.Black)) {
                        moveTo(120f, 720f)
                        lineTo(120f, 560f)
                        quadTo(120f, 543f, 131.5f, 531.5f)
                        quadTo(143f, 520f, 160f, 520f)
                        lineTo(400f, 520f)
                        quadTo(417f, 520f, 428.5f, 531.5f)
                        quadTo(440f, 543f, 440f, 560f)
                        lineTo(440f, 720f)
                        quadTo(440f, 737f, 428.5f, 748.5f)
                        quadTo(417f, 760f, 400f, 760f)
                        lineTo(160f, 760f)
                        quadTo(143f, 760f, 131.5f, 748.5f)
                        quadTo(120f, 737f, 120f, 720f)
                        close()
                        moveTo(520f, 720f)
                        lineTo(520f, 560f)
                        quadTo(520f, 543f, 531.5f, 531.5f)
                        quadTo(543f, 520f, 560f, 520f)
                        lineTo(800f, 520f)
                        quadTo(817f, 520f, 828.5f, 531.5f)
                        quadTo(840f, 543f, 840f, 560f)
                        lineTo(840f, 720f)
                        quadTo(840f, 737f, 828.5f, 748.5f)
                        quadTo(817f, 760f, 800f, 760f)
                        lineTo(560f, 760f)
                        quadTo(543f, 760f, 531.5f, 748.5f)
                        quadTo(520f, 737f, 520f, 720f)
                        close()
                        moveTo(120f, 400f)
                        lineTo(120f, 240f)
                        quadTo(120f, 223f, 131.5f, 211.5f)
                        quadTo(143f, 200f, 160f, 200f)
                        lineTo(800f, 200f)
                        quadTo(817f, 200f, 828.5f, 211.5f)
                        quadTo(840f, 223f, 840f, 240f)
                        lineTo(840f, 400f)
                        quadTo(840f, 417f, 828.5f, 428.5f)
                        quadTo(817f, 440f, 800f, 440f)
                        lineTo(160f, 440f)
                        quadTo(143f, 440f, 131.5f, 428.5f)
                        quadTo(120f, 417f, 120f, 400f)
                        close()
                    }
                }
                .build()
        return _TileMedium!!
    }

private var _TileMedium: ImageVector? = null
+81 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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.systemui.common.ui.icons

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp

val Undo: ImageVector
    get() {
        if (_Undo != null) {
            return _Undo!!
        }
        _Undo =
            ImageVector.Builder(
                    name = "Undo",
                    defaultWidth = 24.dp,
                    defaultHeight = 24.dp,
                    viewportWidth = 960f,
                    viewportHeight = 960f,
                    autoMirror = true,
                )
                .apply {
                    path(fill = SolidColor(Color.Black)) {
                        moveTo(320f, 760f)
                        quadTo(303f, 760f, 291.5f, 748.5f)
                        quadTo(280f, 737f, 280f, 720f)
                        quadTo(280f, 703f, 291.5f, 691.5f)
                        quadTo(303f, 680f, 320f, 680f)
                        lineTo(564f, 680f)
                        quadTo(627f, 680f, 673.5f, 640f)
                        quadTo(720f, 600f, 720f, 540f)
                        quadTo(720f, 480f, 673.5f, 440f)
                        quadTo(627f, 400f, 564f, 400f)
                        lineTo(312f, 400f)
                        lineTo(388f, 476f)
                        quadTo(399f, 487f, 399f, 504f)
                        quadTo(399f, 521f, 388f, 532f)
                        quadTo(377f, 543f, 360f, 543f)
                        quadTo(343f, 543f, 332f, 532f)
                        lineTo(188f, 388f)
                        quadTo(182f, 382f, 179.5f, 375f)
                        quadTo(177f, 368f, 177f, 360f)
                        quadTo(177f, 352f, 179.5f, 345f)
                        quadTo(182f, 338f, 188f, 332f)
                        lineTo(332f, 188f)
                        quadTo(343f, 177f, 360f, 177f)
                        quadTo(377f, 177f, 388f, 188f)
                        quadTo(399f, 199f, 399f, 216f)
                        quadTo(399f, 233f, 388f, 244f)
                        lineTo(312f, 320f)
                        lineTo(564f, 320f)
                        quadTo(661f, 320f, 730.5f, 383f)
                        quadTo(800f, 446f, 800f, 540f)
                        quadTo(800f, 634f, 730.5f, 697f)
                        quadTo(661f, 760f, 564f, 760f)
                        lineTo(320f, 760f)
                        close()
                    }
                }
                .build()
        return _Undo!!
    }

private var _Undo: ImageVector? = null
+17 −4
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ import com.android.compose.theme.LocalAndroidColorScheme
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.ui.compose.load
import com.android.systemui.common.ui.icons.Undo
import com.android.systemui.qs.flags.QsEditModeTabs
import com.android.systemui.qs.panels.shared.model.SizedTileImpl
import com.android.systemui.qs.panels.ui.compose.DragAndDropState
@@ -305,7 +306,7 @@ fun DefaultEditTileGrid(
                            ),
                    ) {
                        Icon(
                            Icons.AutoMirrored.Default.Undo,
                            Undo,
                            contentDescription =
                                stringResource(id = com.android.internal.R.string.undo),
                        )
@@ -349,6 +350,7 @@ fun DefaultEditTileGrid(
                        listState = listState,
                        selectionState = selectionState,
                        onEditAction = onEditAction,
                        canLayoutTile = editModeTabViewModel.selectedTab.isTilesLayoutAllowed,
                        showAvailableTiles = editModeTabViewModel.selectedTab.isTilesEditingAllowed,
                    )
                }
@@ -381,6 +383,7 @@ fun DefaultEditTileGrid(
                        listState = listState,
                        selectionState = selectionState,
                        onEditAction = onEditAction,
                        canLayoutTile = true,
                        showAvailableTiles =
                            !(listState.dragInProgress || selectionState.placementEnabled) ||
                                listState.dragType == DragType.Move,
@@ -477,7 +480,10 @@ private fun EditModeScrollableColumnWithTabs(
            content()
        }

        EditModeTabs(editModeTabViewModel) { selectionState.unSelect() }
        // Disable tab selection while a drag is in progress
        EditModeTabs(editModeTabViewModel, enabled = !listState.dragInProgress) {
            selectionState.unSelect()
        }

        Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.systemBars))
    }
@@ -694,6 +700,7 @@ private fun AnimatedAvailableTilesGrid(
    listState: EditTileListState,
    selectionState: MutableSelectionState,
    showAvailableTiles: Boolean,
    canLayoutTile: Boolean,
    onEditAction: (EditAction) -> Unit,
    modifier: Modifier = Modifier,
) {
@@ -720,6 +727,7 @@ private fun AnimatedAvailableTilesGrid(
                    allTiles,
                    selectionState,
                    listState.columns,
                    canLayoutTile = canLayoutTile,
                    { onEditAction(EditAction.AddTile(it)) }, // Add to the end
                    listState,
                )
@@ -751,6 +759,7 @@ private fun AvailableTileGrid(
    tiles: List<EditTileViewModel>,
    selectionState: MutableSelectionState,
    columns: Int,
    canLayoutTile: Boolean,
    onAddTile: (TileSpec) -> Unit,
    dragAndDropState: DragAndDropState,
) {
@@ -811,6 +820,7 @@ private fun AvailableTileGrid(
                                        cell = viewModel,
                                        dragAndDropState = dragAndDropState,
                                        selectionState = selectionState,
                                        canLayoutTile = canLayoutTile,
                                        onAddTile = onAddTile,
                                        modifier = Modifier.weight(1f).fillMaxHeight(),
                                    )
@@ -1118,6 +1128,7 @@ private fun AvailableTileGridCell(
    cell: EditTileViewModel,
    dragAndDropState: DragAndDropState,
    selectionState: MutableSelectionState,
    canLayoutTile: Boolean,
    onAddTile: (TileSpec) -> Unit,
    modifier: Modifier = Modifier,
) {
@@ -1129,8 +1140,10 @@ private fun AvailableTileGridCell(
    val colors = EditModeTileDefaults.editTileColors()
    val onClick: () -> Unit = {
        onAddTile(cell.tileSpec)
        if (canLayoutTile) {
            selectionState.select(cell.tileSpec)
        }
    }
    val clickLabel =
        stringResource(id = R.string.accessibility_qs_edit_named_tile_add_action, cell.label.text)

@@ -1157,7 +1170,7 @@ private fun AvailableTileGridCell(
    ) {
        Box(Modifier.fillMaxWidth().height(TileHeight)) {
            val draggableModifier =
                if (cell.isCurrent) {
                if (cell.isCurrent || !canLayoutTile) {
                    Modifier
                } else {
                    Modifier.dragAndDropTileSource(
+3 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.qs.panels.ui.viewmodel.EditModeTabViewModel
@Composable
fun EditModeTabs(
    viewModel: EditModeTabViewModel,
    enabled: Boolean,
    modifier: Modifier = Modifier,
    onTabChanged: () -> Unit = {},
) {
@@ -58,7 +59,7 @@ fun EditModeTabs(
    val selectedButtonColor = LocalAndroidColorScheme.current.surfaceEffect2
    HorizontalFloatingToolbar(
        modifier = modifier.height(60.dp),
        expanded = true,
        expanded = false,
        contentPadding = PaddingValues(horizontal = 7.dp, vertical = 8.dp),
        colors =
            FloatingToolbarDefaults.standardFloatingToolbarColors(
@@ -73,7 +74,7 @@ fun EditModeTabs(
                verticalAlignment = Alignment.CenterVertically,
                modifier =
                    Modifier.fillMaxHeight()
                        .clickable {
                        .clickable(enabled = enabled) {
                            if (!isSelected.currentState) {
                                onTabChanged()
                            }
Loading