From 89cc9e88442e98ca97f03ca03e17f16572ea1af3 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Tue, 26 Aug 2025 17:02:53 -0500 Subject: [PATCH] refactor: clean up deprecations using recommendations (#2859) Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com> --- .../mesh/repository/radio/StreamInterface.kt | 32 +++++++++++-------- .../main/java/com/geeksville/mesh/ui/Main.kt | 4 ++- .../ui/common/components/IndoorAirQuality.kt | 4 +-- .../mesh/ui/intro/NotificationsScreen.kt | 3 +- .../com/geeksville/mesh/ui/message/Message.kt | 3 +- .../ui/node/components/NodeStatusIcons.kt | 7 ++-- .../radio/components/AudioConfigItemList.kt | 3 +- .../components/PacketResponseStateDialog.kt | 5 ++- 8 files changed, 37 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/repository/radio/StreamInterface.kt b/app/src/main/java/com/geeksville/mesh/repository/radio/StreamInterface.kt index bbd169372..ae0d5ed86 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/radio/StreamInterface.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/radio/StreamInterface.kt @@ -20,7 +20,8 @@ package com.geeksville.mesh.repository.radio import com.geeksville.mesh.android.Logging /** - * An interface that assumes we are talking to a meshtastic device over some sort of stream connection (serial or TCP probably) + * An interface that assumes we are talking to a meshtastic device over some sort of stream connection (serial or TCP + * probably) */ abstract class StreamInterface(protected val service: RadioInterfaceService) : Logging, @@ -46,12 +47,16 @@ abstract class StreamInterface(protected val service: RadioInterfaceService) : onDeviceDisconnect(true) } - /** Tell MeshService our device has gone away, but wait for it to come back + /** + * Tell MeshService our device has gone away, but wait for it to come back * - * @param waitForStopped if true we should wait for the manager to finish - must be false if called from inside the manager callbacks - * */ + * @param waitForStopped if true we should wait for the manager to finish - must be false if called from inside the + * manager callbacks + */ protected open fun onDeviceDisconnect(waitForStopped: Boolean) { - service.onDisconnect(isPermanent = true) // if USB device disconnects it is definitely permanently gone, not sleeping) + service.onDisconnect( + isPermanent = true, + ) // if USB device disconnects it is definitely permanently gone, not sleeping) } protected open fun connect() { @@ -84,15 +89,13 @@ abstract class StreamInterface(protected val service: RadioInterfaceService) : /** Print device serial debug output somewhere */ private fun debugOut(b: Byte) { - when (val c = b.toChar()) { - '\r' -> { - } // ignore + when (val c = b.toInt().toChar()) { + '\r' -> {} // ignore '\n' -> { debug("DeviceLog: $debugLineBuf") debugLineBuf.clear() } - else -> - debugLineBuf.append(c) + else -> debugLineBuf.append(c) } } @@ -133,16 +136,19 @@ abstract class StreamInterface(protected val service: RadioInterfaceService) : // We've read our header, do one big read for the packet itself packetLen = (msb shl 8) or lsb if (packetLen > MAX_TO_FROM_RADIO_SIZE) { - lostSync() // If packet len is too long, the bytes must have been corrupted, start looking for START1 again + lostSync() // If packet len is too long, the bytes must have been corrupted, start looking for + // START1 again } else if (packetLen == 0) { - deliverPacket() // zero length packets are valid and should be delivered immediately (because there won't be a next byte of payload) + deliverPacket() // zero length packets are valid and should be delivered immediately (because there + // won't be a next byte of payload) } } else -> { // We are looking at the packet bytes now rxPacket[ptr - 4] = c - // Note: we have to check if ptr +1 is equal to packet length (for example, for a 1 byte packetlen, this code will be run with ptr of4 + // Note: we have to check if ptr +1 is equal to packet length (for example, for a 1 byte packetlen, this + // code will be run with ptr of4 if (ptr - 4 + 1 == packetLen) { deliverPacket() } diff --git a/app/src/main/java/com/geeksville/mesh/ui/Main.kt b/app/src/main/java/com/geeksville/mesh/ui/Main.kt index f46e00900..0257dfeb8 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Main.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Main.kt @@ -41,6 +41,7 @@ import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.Text +import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo @@ -268,7 +269,8 @@ fun MainScreen( item( icon = { TooltipBox( - positionProvider = TooltipDefaults.rememberTooltipPositionProvider(), + positionProvider = + TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text( diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/components/IndoorAirQuality.kt b/app/src/main/java/com/geeksville/mesh/ui/common/components/IndoorAirQuality.kt index c35be8dc9..1ce524abe 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/components/IndoorAirQuality.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/components/IndoorAirQuality.kt @@ -162,7 +162,7 @@ fun IndoorAirQuality(iaq: Int?, displayMode: IaqDisplayMode = IaqDisplayMode.Pil IaqDisplayMode.Gauge -> { CircularProgressIndicator( - progress = iaq / 500f, + progress = { iaq / 500f }, modifier = Modifier.size(60.dp).clickable { isLegendOpen = true }, strokeWidth = 8.dp, color = iaqEnum.color, @@ -176,7 +176,7 @@ fun IndoorAirQuality(iaq: Int?, displayMode: IaqDisplayMode = IaqDisplayMode.Pil modifier = Modifier.clickable { isLegendOpen = true }, ) { LinearProgressIndicator( - progress = iaq / 500f, + progress = { iaq / 500f }, modifier = Modifier.fillMaxWidth().height(20.dp), color = iaqEnum.color, ) diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt index 481990f8c..bd831e8e7 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt @@ -23,6 +23,7 @@ import android.provider.Settings import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.Message import androidx.compose.material.icons.filled.Notifications import androidx.compose.material.icons.outlined.BatteryAlert import androidx.compose.material.icons.outlined.Message @@ -61,7 +62,7 @@ internal fun NotificationsScreen(showNextButton: Boolean, onSkip: () -> Unit, on val features = remember { listOf( FeatureUIData( - icon = Icons.Outlined.Message, + icon = Icons.AutoMirrored.Outlined.Message, titleRes = R.string.incoming_messages, subtitleRes = R.string.notifications_for_channel_and_direct_messages, ), diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt index 622b68dac..4a33d2c02 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt @@ -48,6 +48,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.Reply import androidx.compose.material.icons.automirrored.filled.Send +import androidx.compose.material.icons.automirrored.filled.SpeakerNotes import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.material.icons.filled.ChatBubbleOutline import androidx.compose.material.icons.filled.Close @@ -672,7 +673,7 @@ private fun OverFlowMenu( if (showQuickChat) { Icons.Default.SpeakerNotesOff } else { - Icons.Default.SpeakerNotes + Icons.AutoMirrored.Filled.SpeakerNotes }, contentDescription = quickChatToggleTitle, ) diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeStatusIcons.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeStatusIcons.kt index 7f74f62cd..84d12b5a5 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeStatusIcons.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeStatusIcons.kt @@ -31,6 +31,7 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text +import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberTooltipState @@ -51,7 +52,7 @@ fun NodeStatusIcons(isThisNode: Boolean, isUnmessageable: Boolean, isFavorite: B Row(modifier = Modifier.padding(4.dp)) { if (isThisNode) { TooltipBox( - positionProvider = TooltipDefaults.rememberTooltipPositionProvider(), + positionProvider = TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text( @@ -88,7 +89,7 @@ fun NodeStatusIcons(isThisNode: Boolean, isUnmessageable: Boolean, isFavorite: B if (isUnmessageable) { TooltipBox( - positionProvider = TooltipDefaults.rememberTooltipPositionProvider(), + positionProvider = TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(stringResource(R.string.unmonitored_or_infrastructure)) } }, state = rememberTooltipState(), ) { @@ -103,7 +104,7 @@ fun NodeStatusIcons(isThisNode: Boolean, isUnmessageable: Boolean, isFavorite: B } if (isFavorite && !isThisNode) { TooltipBox( - positionProvider = TooltipDefaults.rememberTooltipPositionProvider(), + positionProvider = TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(stringResource(R.string.favorite)) } }, state = rememberTooltipState(), ) { diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/AudioConfigItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/AudioConfigItemList.kt index ba51c3cec..f0a5dd0f5 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/AudioConfigItemList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/AudioConfigItemList.kt @@ -20,7 +20,6 @@ package com.geeksville.mesh.ui.settings.radio.components import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -103,7 +102,7 @@ fun AudioConfigItemList(audioConfig: AudioConfig, enabled: Boolean, onSaveClicke onItemSelected = { audioInput = audioInput.copy { bitrate = it } }, ) } - item { Divider() } + item { HorizontalDivider() } item { EditTextPreference( diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/PacketResponseStateDialog.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/PacketResponseStateDialog.kt index 1776d6ba0..4578480a7 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/PacketResponseStateDialog.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/PacketResponseStateDialog.kt @@ -54,7 +54,10 @@ fun PacketResponseStateDialog(state: ResponseState, onDismiss: () -> Unit label = "progress", ) Text("%.0f%%".format(progress * 100)) - LinearProgressIndicator(progress = progress, modifier = Modifier.fillMaxWidth().padding(top = 8.dp)) + LinearProgressIndicator( + progress = { progress }, + modifier = Modifier.fillMaxWidth().padding(top = 8.dp), + ) if (state.total == state.completed) onComplete() } if (state is ResponseState.Success) {