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

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

Use drawablePainter in Icon()

This causes a bug regarding resizing the user switcher icon in the footer actions, so it is using the previous version of Icon as a workaround

Test: manually
Flag: com.android.systemui.qs_ui_refactor_compose_fragment
Fixes: 402754050
Bug: 394738023
Change-Id: Idbd80970e27f9ce0164690bf84a5070118bc2433
parent 80a9d9d9
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -19,30 +19,25 @@ package com.android.systemui.common.ui.compose
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.painterResource
import androidx.core.graphics.drawable.toBitmap
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
import com.android.systemui.common.shared.model.Icon

/**
 * Icon composable that draws [icon] using [tint].
 *
 * Note: You can use [Color.Unspecified] to disable the tint and keep the original icon colors.
 * Note: Some drawables aren't compatible with [rememberDrawablePainter], used here for
 * [Icon.Loaded] icons, and won't be resized from their intrinsic size (b/394738023).
 */
@Composable
fun Icon(icon: Icon, modifier: Modifier = Modifier, tint: Color = LocalContentColor.current) {
    val contentDescription = icon.contentDescription?.load()
    when (icon) {
        is Icon.Loaded -> {
            Icon(
                remember(icon.drawable) { icon.drawable.toBitmap().asImageBitmap() },
                contentDescription,
                modifier,
                tint,
            )
            Icon(rememberDrawablePainter(icon.drawable), contentDescription, modifier, tint)
        }
        is Icon.Resource -> Icon(painterResource(icon.res), contentDescription, modifier, tint)
    }
+16 −1
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.layout
import androidx.compose.ui.platform.LocalContext
@@ -68,6 +69,7 @@ import androidx.compose.ui.unit.constrainWidth
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.em
import androidx.compose.ui.unit.sp
import androidx.core.graphics.drawable.toBitmap
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -81,6 +83,7 @@ import com.android.systemui.Flags.notificationShadeBlur
import com.android.systemui.animation.Expandable
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.common.ui.compose.load
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.flags.QsInCompose
@@ -350,7 +353,19 @@ fun IconButton(
            ),
        useModifierBasedImplementation = useModifierBasedExpandable,
    ) {
        Icon(model.icon, tint = colors.icon, modifier = Modifier.size(20.dp))
        FooterIcon(model.icon, Modifier.size(20.dp), colors.icon)
    }
}

// TODO(b/394738023): Use com.android.systemui.common.ui.compose.Icon instead
@Composable
private fun FooterIcon(icon: Icon, modifier: Modifier = Modifier, tint: Color) {
    val contentDescription = icon.contentDescription?.load()
    when (icon) {
        is Icon.Loaded -> {
            Icon(icon.drawable.toBitmap().asImageBitmap(), contentDescription, modifier, tint)
        }
        is Icon.Resource -> Icon(painterResource(icon.res), contentDescription, modifier, tint)
    }
}