From 4d4070c8e1ed73a56ee2f054300a0f62e3fe2e62 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:06:08 +0000 Subject: [PATCH] perf(ui): render QR codes at display density instead of fixed 960px (#6793) Co-authored-by: Claude Fable 5 --- .../kotlin/org/meshtastic/core/ui/component/QrDialog.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt index dfcc23c033..74d93e811e 100644 --- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalClipboard +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch @@ -63,13 +64,14 @@ import org.meshtastic.core.ui.util.createClipEntry import org.meshtastic.core.ui.util.rememberQrCodePainter private const val QR_DISPLAY_SIZE = 320 -private const val QR_RENDER_SIZE = 960 @Composable fun QrDialog(title: String, uriString: String, onDismiss: () -> Unit) { val clipboardManager = LocalClipboard.current val coroutineScope = rememberCoroutineScope() - val qrPainter = rememberQrCodePainter(uriString, QR_RENDER_SIZE) + // Render at the actual on-screen pixel size so low-density devices don't over-allocate bitmap memory. + val qrRenderSizePx = with(LocalDensity.current) { QR_DISPLAY_SIZE.dp.roundToPx() } + val qrPainter = rememberQrCodePainter(uriString, qrRenderSizePx) val nfcSupported = LocalNfcScannerSupported.current val nfcWriter = LocalNfcWriterProvider.current