Loading packages/SystemUI/pods/com/android/systemui/notifications/ui/composable/component/Icon.kt +24 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, ) } packages/SystemUI/pods/com/android/systemui/notifications/ui/composable/content/NotificationContent.kt +7 −1 Original line number Diff line number Diff line Loading @@ -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)) } } Loading packages/SystemUI/pods/com/android/systemui/notifications/ui/viewmodel/NotificationViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -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 } Loading
packages/SystemUI/pods/com/android/systemui/notifications/ui/composable/component/Icon.kt +24 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, ) }
packages/SystemUI/pods/com/android/systemui/notifications/ui/composable/content/NotificationContent.kt +7 −1 Original line number Diff line number Diff line Loading @@ -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)) } } Loading
packages/SystemUI/pods/com/android/systemui/notifications/ui/viewmodel/NotificationViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -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 }