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

Commit 8b7d69ec authored by Darrell Shi's avatar Darrell Shi
Browse files

Fix selected widget outline

This change fixes the following issues
- the outline is not visible when a widget is selcted in edit mode
- widgets have more vertical padding in edit mode due to calculation of
  content padding not taking the height of system bars into account
- the CTA tiles have an outline padding making them smaller than other
  content

Bug: 327253807
Fix: 327253807
Test: verified that outline is visible when a widget is selected
Flag: ACONFIG com.android.systemui.communal_hub STAGING
Change-Id: I4a41d83d49ab911a3bb0ae2d76fac195125593c6
parent 5e3340b2
Loading
Loading
Loading
Loading
+14 −18
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ import androidx.compose.ui.layout.boundsInWindow
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
@@ -105,6 +104,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.compose.ui.window.Popup
import androidx.core.view.setPadding
import androidx.window.layout.WindowMetricsCalculator
import com.android.compose.modifiers.thenIf
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
@@ -580,7 +580,7 @@ private fun CtaTileInViewModeContent(
) {
    val colors = LocalAndroidColorScheme.current
    Card(
        modifier = modifier.padding(CardOutlineWidth),
        modifier = modifier,
        colors =
            CardDefaults.cardColors(
                containerColor = colors.primary,
@@ -651,7 +651,7 @@ private fun CtaTileInEditModeContent(
    }
    val colors = LocalAndroidColorScheme.current
    Card(
        modifier = modifier.padding(CardOutlineWidth),
        modifier = modifier,
        colors = CardDefaults.cardColors(containerColor = Color.Transparent),
        border = BorderStroke(1.dp, colors.primary),
        shape = RoundedCornerShape(200.dp),
@@ -691,21 +691,17 @@ private fun WidgetContent(
    Box(
        modifier = modifier,
    ) {
        val paddingInPx =
            if (selected) with(LocalDensity.current) { CardOutlineWidth.toPx().toInt() } else 0
        AndroidView(
            modifier = Modifier.fillMaxSize().allowGestures(allowed = !viewModel.isEditMode),
            factory = { context ->
                model.appWidgetHost
                    .createViewForCommunal(context, model.appWidgetId, model.providerInfo)
                    .apply { updateAppWidgetSize(Bundle.EMPTY, listOf(size)) }
            },
            update = { view ->
                    .apply {
                        updateAppWidgetSize(Bundle.EMPTY, listOf(size))
                        // Remove the extra padding applied to AppWidgetHostView to allow widgets to
                // occupy the entire box. The added padding is now adjusted to leave only
                // sufficient space for displaying the outline around the box when the widget
                // is selected.
                view.setPadding(paddingInPx)
                        // occupy the entire box.
                        setPadding(0)
                    }
            },
            // For reusing composition in lazy lists.
            onReset = {},
@@ -841,14 +837,14 @@ private fun gridContentPadding(isEditMode: Boolean, toolbarSize: IntSize?): Padd
    if (!isEditMode || toolbarSize == null) {
        return PaddingValues(start = 48.dp, end = 48.dp, top = Dimensions.GridTopSpacing)
    }
    val configuration = LocalConfiguration.current
    val context = LocalContext.current
    val density = LocalDensity.current
    val screenHeight = configuration.screenHeightDp.dp
    val windowMetrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context)
    val screenHeight = with(density) { windowMetrics.bounds.height().toDp() }
    val toolbarHeight = with(density) { Dimensions.ToolbarPaddingTop + toolbarSize.height.toDp() }
    val verticalPadding =
        ((screenHeight - toolbarHeight - Dimensions.GridHeight) / 2).coerceAtLeast(
            Dimensions.Spacing
        )
        ((screenHeight - toolbarHeight - Dimensions.GridHeight + Dimensions.GridTopSpacing) / 2)
            .coerceAtLeast(Dimensions.Spacing)
    return PaddingValues(
        start = Dimensions.ToolbarPaddingHorizontal,
        end = Dimensions.ToolbarPaddingHorizontal,
+5 −5
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.toOffset
import androidx.compose.ui.unit.toSize
import androidx.compose.ui.zIndex
import com.android.systemui.communal.ui.compose.extensions.firstItemAtOffset
import com.android.systemui.communal.ui.compose.extensions.plus
import com.android.systemui.communal.ui.viewmodel.BaseCommunalViewModel
@@ -247,7 +246,7 @@ fun LazyGridItemScope.DraggableItem(
    content: @Composable (isDragging: Boolean) -> Unit
) {
    if (!enabled) {
        return Box(modifier = modifier) { content(false) }
        return content(false)
    }

    val dragging = index == dragDropState.draggingItemIndex
@@ -258,7 +257,7 @@ fun LazyGridItemScope.DraggableItem(
        )
    val draggingModifier =
        if (dragging) {
            Modifier.zIndex(1f).graphicsLayer {
            Modifier.graphicsLayer {
                translationX = dragDropState.draggingItemOffset.x
                translationY = dragDropState.draggingItemOffset.y
                alpha = itemAlpha
@@ -268,13 +267,14 @@ fun LazyGridItemScope.DraggableItem(
        }

    Box(modifier) {
        Box(draggingModifier) { content(dragging) }
        AnimatedVisibility(
            modifier = Modifier.matchParentSize(),
            visible = (dragging || selected) && !dragDropState.isDraggingToRemove,
            enter = fadeIn(),
            exit = fadeOut()
        ) {
            HighlightedItem()
            HighlightedItem(Modifier.matchParentSize())
        }
        Box(modifier = draggingModifier, propagateMinConstraints = true) { content(dragging) }
    }
}