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

Commit 541077af authored by Tianfan Zhang's avatar Tianfan Zhang
Browse files

Create an outer Box around ShortPill to cover the whole recent app

button.

Bug: 428807918
Test: atest ShortPillScreenshotTest
Flag: EXEMPT bugfix
Change-Id: I90259284250bca91556417d1d7dc162f47c55fc8
parent f72fe345
Loading
Loading
Loading
Loading
+60 −35
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -41,9 +42,8 @@ import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.IconButtonColors
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.LocalMinimumInteractiveComponentSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -75,7 +75,6 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEach
import com.android.compose.PlatformIconButton
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
import com.android.systemui.ambientcue.ui.compose.modifier.animatedActionBorder
import com.android.systemui.ambientcue.ui.utils.FilterUtils
@@ -98,6 +97,9 @@ fun ShortPill(
    val scrimColor = MaterialTheme.colorScheme.primary
    val minSize = 48.dp
    val closeButtonSize = 28.dp
    // (shortPillBoxWidth, shortPillBoxLength) is the smallest size to fully cover recent app area.
    val shortPillBoxWidth = 48.dp
    val shortPillBoxLength = 68.dp
    val transitionTween: TweenSpec<Float> = tween(250, delayMillis = 200)

    val visibleState = remember { MutableTransitionState(false) }
@@ -198,7 +200,6 @@ fun ShortPill(
                .background(backgroundColor)
                .animatedActionBorder(strokeWidth = 1.dp, cornerRadius = 16.dp, visible = visible)
                .widthIn(0.dp, minSize * 2)
                .then(if (expanded) Modifier else Modifier.clickable { onClick() })
                .padding(4.dp)

        val filteredActions = FilterUtils.filterActions(actions)
@@ -212,16 +213,31 @@ fun ShortPill(
            ) {
                Spacer(modifier = Modifier.size(closeButtonSize))

                Row(
                    horizontalArrangement =
                        Arrangement.spacedBy(-4.dp, Alignment.CenterHorizontally),
                    verticalAlignment = Alignment.CenterVertically,
                Box(
                    contentAlignment = Alignment.Center,
                    modifier =
                        pillModifier.defaultMinSize(minWidth = minSize).onGloballyPositioned {
                            coordinates ->
                        Modifier.widthIn(shortPillBoxLength, minSize * 2)
                            .height(shortPillBoxWidth)
                            .then(
                                if (expanded) Modifier
                                else
                                    Modifier.clickable(
                                        indication = null,
                                        interactionSource = null,
                                    ) {
                                        onClick()
                                    }
                            )
                            .onGloballyPositioned { coordinates ->
                                pillContentSize = coordinates.size
                                pillContentPosition = coordinates.positionInParent()
                            },
                ) {
                    Row(
                        horizontalArrangement =
                            Arrangement.spacedBy(-4.dp, Alignment.CenterHorizontally),
                        verticalAlignment = Alignment.CenterVertically,
                        modifier = pillModifier.defaultMinSize(minWidth = minSize),
                    ) {
                        filteredActions.take(3).fastForEach { action ->
                            Icon(action, backgroundColor)
@@ -237,6 +253,7 @@ fun ShortPill(
                            }
                        }
                    }
                }

                CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize))
            }
@@ -248,16 +265,26 @@ fun ShortPill(
            ) {
                Spacer(modifier = Modifier.size(closeButtonSize))

                Column(
                    verticalArrangement = Arrangement.spacedBy(-4.dp, Alignment.CenterVertically),
                Box(
                    contentAlignment = Alignment.Center,
                    modifier =
                        pillModifier.defaultMinSize(minHeight = minSize).onGloballyPositioned {
                            coordinates ->
                        Modifier.widthIn(shortPillBoxWidth, minSize * 2)
                            .height(shortPillBoxLength)
                            .then(if (expanded) Modifier else Modifier.clickable { onClick() })
                            .onGloballyPositioned { coordinates ->
                                pillContentSize = coordinates.size
                                pillContentPosition = coordinates.positionInParent()
                            },
                ) {
                    filteredActions.take(3).fastForEach { action -> Icon(action, backgroundColor) }
                    Column(
                        verticalArrangement =
                            Arrangement.spacedBy(-4.dp, Alignment.CenterVertically),
                        modifier = pillModifier.defaultMinSize(minHeight = minSize),
                    ) {
                        filteredActions.take(3).fastForEach { action ->
                            Icon(action, backgroundColor)
                        }
                    }
                }

                CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize))
@@ -295,9 +322,7 @@ private fun CloseButton(onCloseClick: () -> Unit, modifier: Modifier = Modifier)
        FilledIconButton(
            onClick = onCloseClick,
            modifier =
                modifier
                    .clip(CircleShape)
                    .background(MaterialTheme.colorScheme.surfaceContainer),
                modifier.clip(CircleShape).background(MaterialTheme.colorScheme.surfaceContainer),
            colors =
                IconButtonDefaults.filledIconButtonColors(
                    containerColor = Color.Transparent,