From cc5543f4c95f16cc76b1214783d0b50249799d6a Mon Sep 17 00:00:00 2001 From: andrekir Date: Sun, 28 Jul 2024 08:34:37 -0300 Subject: [PATCH] refactor: add try-catch block to handle ChannelSet parsing errors --- .../com/geeksville/mesh/ui/ChannelFragment.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt index 31356dfad..079b8d6b6 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt @@ -179,12 +179,15 @@ fun ChannelScreen( val channelUrl = channelSet.getChannelUrl() val modemPresetName = Channel(loraConfig = channelSet.loraConfig).name - val userScannedQrCode = remember { mutableStateOf(false) } - val scannedQR = remember { mutableStateOf("") } + var scannedChannelSet by remember { mutableStateOf(null) } val barcodeLauncher = rememberLauncherForActivityResult(ScanContract()) { result -> if (result.contents != null) { - scannedQR.value = result.contents - userScannedQrCode.value = true + try { + scannedChannelSet = Uri.parse(result.contents).toChannelSet() + } catch (ex: Throwable) { + errormsg("Channel url error: ${ex.message}") + showSnackbar("${context.getString(R.string.channel_invalid)}: ${ex.message}") + } } } @@ -295,14 +298,16 @@ fun ChannelScreen( .show() } - if (userScannedQrCode.value) + if (scannedChannelSet != null) { + val incoming = scannedChannelSet ?: return /* Prompt the user to modify channels after scanning a QR code. */ ScannedQrCodeDialog( channels = channels, - incoming = Uri.parse(scannedQR.value).toChannelSet(), - onDismiss = { userScannedQrCode.value = false }, + incoming = incoming, + onDismiss = { scannedChannelSet = null }, onConfirm = { newChannelSet -> installSettings(newChannelSet) } ) + } var showEditChannelDialog: Int? by remember { mutableStateOf(null) }