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

Commit b630daac authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Fix infinite draw loop

Both Chip and NavBarPill were sharing the same Drawable instance, but
rendering them in different sizes.

This caused setBounds() to be called twice with different values, forcing
the drawable callback to invoke invalidateSelf() at every frame.

Bug: 424295289
Fixes: 424295289
Test: perfetto trace
Test: atest AmbientCueViewModelTest
Test: atest AmbientCueInteractorTest
Test: atest FilterUtilsTest
Flag: EXEMPT bugfix
Change-Id: I97ad8b1a6849e2428f3547db25b69c6e73f38762
parent 7f48fbe0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) {
                )
                .padding(start = 12.dp, end = 16.dp, top = 4.dp, bottom = 4.dp),
    ) {
        val painter = rememberDrawablePainter(action.icon.drawable)
        val painter = rememberDrawablePainter(action.icon.large)
        Image(
            painter = painter,
            contentDescription = stringResource(id = R.string.ambient_cue_icon_content_description),
+3 −5
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonColors
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.LocalMinimumInteractiveComponentSize
import androidx.compose.material3.MaterialTheme
@@ -70,8 +69,8 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
@@ -79,7 +78,6 @@ import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEachIndexed
import androidx.compose.ui.util.lerp
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
@@ -276,7 +274,7 @@ fun NavBarPill(
                                            .padding(start = 6.dp, end = 6.dp),
                                ) {
                                    Image(
                                        painter = rememberDrawablePainter(action.icon.drawable),
                                        painter = rememberDrawablePainter(action.icon.small),
                                        contentDescription =
                                            stringResource(
                                                id = R.string.ambient_cue_icon_content_description
@@ -318,7 +316,7 @@ fun NavBarPill(
                            } else {
                                // Smaller app icons
                                Image(
                                    painter = rememberDrawablePainter(action.icon.drawable),
                                    painter = rememberDrawablePainter(action.icon.small),
                                    contentDescription = action.label,
                                    modifier =
                                        Modifier.then(
+3 −7
Original line number Diff line number Diff line
@@ -41,9 +41,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 +74,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
@@ -295,9 +293,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,
@@ -318,7 +314,7 @@ private fun CloseButton(onCloseClick: () -> Unit, modifier: Modifier = Modifier)
@Composable
private fun Icon(action: ActionViewModel, backgroundColor: Color, modifier: Modifier = Modifier) {
    Image(
        painter = rememberDrawablePainter(action.icon.drawable),
        painter = rememberDrawablePainter(action.icon.small),
        contentDescription = stringResource(id = R.string.ambient_cue_icon_content_description),
        modifier =
            modifier
+11 −5
Original line number Diff line number Diff line
@@ -87,11 +87,17 @@ class AmbientCueInteractorTest(flags: FlagsParameterization) : SysuiTestCase() {
                    ActionModel(
                        icon =
                            IconModel(
                                small =
                                    applicationContext.resources.getDrawable(
                                        R.drawable.ic_content_paste_spark,
                                        applicationContext.theme,
                                    ),
                                "test.icon",
                                large =
                                    applicationContext.resources.getDrawable(
                                        R.drawable.ic_content_paste_spark,
                                        applicationContext.theme,
                                    ),
                                iconId = "test.icon",
                            ),
                        label = "Sunday Morning",
                        attribution = null,
+3 −3
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ class FilterUtilsTest : SysuiTestCase() {
    fun setUp() {
        calendarAction1 =
            ActionViewModel(
                icon = IconViewModel(mock(), "calendar_icon", 0),
                icon = IconViewModel(mock(), mock(), "calendar_icon", 0),
                label = "Sunday Morning",
                attribution = null,
                onClick = {},
@@ -51,7 +51,7 @@ class FilterUtilsTest : SysuiTestCase() {
            )
        calendarAction2 =
            ActionViewModel(
                icon = IconViewModel(mock(), "calendar_icon", 0),
                icon = IconViewModel(mock(), mock(), "calendar_icon", 0),
                label = "Sunday Evening",
                attribution = null,
                onClick = {},
@@ -60,7 +60,7 @@ class FilterUtilsTest : SysuiTestCase() {
            )
        mapsAction =
            ActionViewModel(
                icon = IconViewModel(mock(), "map_icon", 0),
                icon = IconViewModel(mock(), mock(), "map_icon", 0),
                label = "Philz Coffee San Carlos",
                onClick = {},
                onLongClick = {},
Loading