kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
				
				
				
			refactor: clean up deprecations using recommendations (#2859)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>pull/2861/head
							rodzic
							
								
									2ea2f6e5ab
								
							
						
					
					
						commit
						89cc9e8844
					
				| 
						 | 
				
			
			@ -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()
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
                        )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
            ),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
                    )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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(),
 | 
			
		||||
            ) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,10 @@ fun <T> PacketResponseStateDialog(state: ResponseState<T>, 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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue