car: the card column only moves the map's center, so Vela's speedometer keeps its size

This commit is contained in:
Seb3thehacker committed 2026-10-24 14:14:05 -07:00
1 parent f414a3c2c8
commit de01448f1b
2 files changed
+12 -3

No files matched your search

@@ -102,10 +102,18 @@ private fun AppSurface(
// changing size moves the visible area even though the surface itself hasn't changed. // changing size moves the visible area even though the surface itself hasn't changed.
val (width, height) = size val (width, height) = size
val measured = bounds?.takeIf { width > 0 && height > 0 }?.let { cover?.visibleWithin(it, width, height) } val measured = bounds?.takeIf { width > 0 && height > 0 }?.let { cover?.visibleWithin(it, width, height) }
LaunchedEffect(template, size, measured) { // The card column moves the map's centre but isn't taken out of the stable area: apps size
// their own overlays from it, and Vela's speedometer shrank to fit the strip right of the cards.
val measuredStable = bounds?.takeIf { width > 0 && height > 0 }?.let { cover?.visibleWithin(it, width, height, skip = CoverEdge.START) }
LaunchedEffect(template, size, measured, measuredStable) {
if (width > 0 && height > 0) { if (width > 0 && height > 0) {
val visible = visibleAreaFor(template, width, height, measured) val visible = visibleAreaFor(template, width, height, measured)
connection.reportAreas(visible = visible, stable = visible) val stable = if (template is androidx.car.app.navigation.model.NavigationTemplate) {
visibleAreaFor(template, width, height, measuredStable)
} else {
visible
}
connection.reportAreas(visible = visible, stable = stable)
} }
} }
@@ -129,12 +129,13 @@ internal class ChromeCover {
} }
/** What is left of a [width] x [height] surface at [surface] (window pixels), in surface pixels. */ /** What is left of a [width] x [height] surface at [surface] (window pixels), in surface pixels. */
fun visibleWithin(surface: ComposeRect, width: Int, height: Int): Rect { fun visibleWithin(surface: ComposeRect, width: Int, height: Int, skip: CoverEdge? = null): Rect {
var left = 0f var left = 0f
var top = 0f var top = 0f
var right = width.toFloat() var right = width.toFloat()
var bottom = height.toFloat() var bottom = height.toFloat()
pieces.values.forEach { (edge, b) -> pieces.values.forEach { (edge, b) ->
if (edge == skip) return@forEach
when (edge) { when (edge) {
CoverEdge.TOP -> top = maxOf(top, b.bottom - surface.top) CoverEdge.TOP -> top = maxOf(top, b.bottom - surface.top)
CoverEdge.BOTTOM -> bottom = minOf(bottom, b.top - surface.top) CoverEdge.BOTTOM -> bottom = minOf(bottom, b.top - surface.top)