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

Commit d2231d10 authored by Ioana Alexandru's avatar Ioana Alexandru Committed by Android (Google) Code Review
Browse files

Merge "[Compose Notifs] Support different aspect ratio large icons" into main

parents c014c1d3 a8fb1892
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -21,10 +21,13 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
@@ -45,12 +48,30 @@ internal fun AppIcon(drawable: Drawable, modifier: Modifier = Modifier) {
}

@Composable
internal fun LargeIcon(drawable: Drawable, modifier: Modifier = Modifier) {
internal fun LargeIcon(
    drawable: Drawable,
    modifier: Modifier = Modifier,
    maxAspectRatio: Float = 1f,
) {
    val desiredAspectRatio =
        remember(drawable, maxAspectRatio) {
            val drawableAspectRatio =
                if (drawable.intrinsicWidth > 0 && drawable.intrinsicHeight > 0) {
                    drawable.intrinsicWidth.toFloat() / drawable.intrinsicHeight.toFloat()
                } else {
                    1f
                }
            drawableAspectRatio.coerceIn(1f, maxAspectRatio)
        }

    Image(
        painter = rememberDrawablePainter(drawable),
        contentDescription = null,
        // TODO: b/431222735 - Add support for different aspect ratio large icons.
        modifier = modifier.size(48.dp).clip(RoundedCornerShape(5.dp)),
        modifier =
            modifier
                .height(48.dp)
                .width((desiredAspectRatio * 48).dp)
                .clip(RoundedCornerShape(5.dp)),
        contentScale = ContentScale.Crop,
    )
}
+7 −1
Original line number Diff line number Diff line
@@ -110,7 +110,13 @@ private fun HeaderWithLargeIcon(
            firstLine()
            secondLine()
        }
        viewModel.largeIcon?.let { LargeIcon(it, Modifier.padding(start = 16.dp, end = 8.dp)) }
        viewModel.largeIcon?.let {
            LargeIcon(
                it,
                Modifier.padding(start = 16.dp, end = 8.dp),
                viewModel.maxLargeIconAspectRatio,
            )
        }
        Expander(expanded = viewModel.isExpanded, modifier = Modifier.padding(top = 4.dp))
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -41,4 +41,9 @@ public interface NotificationViewModel {
    public val maxLinesWhenExpanded: Int
    /** The maximum height of the notification. */
    public val maxHeightDp: Int
    /**
     * The maximum aspect ratio that the large icon supports. The height of the large icon is fixed,
     * so this determines its maximum width relative to that.
     */
    public val maxLargeIconAspectRatio: Float
}