From b3026ba6be93bab717b18ef3d36a2f7df4605bf5 Mon Sep 17 00:00:00 2001 From: geeksville Date: Mon, 17 Feb 2020 15:56:04 -0800 Subject: [PATCH] text message gui for sneding kinda works --- TODO.md | 1 + .../main/java/com/geeksville/mesh/MainActivity.kt | 11 +++-------- .../main/java/com/geeksville/mesh/model/NodeDB.kt | 3 ++- .../com/geeksville/mesh/service/MeshService.kt | 2 +- .../main/java/com/geeksville/mesh/ui/Messages.kt | 15 ++++++++++----- .../main/java/com/geeksville/mesh/ui/UserIcon.kt | 2 +- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/TODO.md b/TODO.md index bbd23134..b95419e7 100644 --- a/TODO.md +++ b/TODO.md @@ -8,6 +8,7 @@ MVP features required for first public alpha * let user set name and shortname * take video +* when we connect to radio, distances to nodes in the chat log should automatically redraw * show pointer arrow on the outside of the user icons, always pointing towoards them * stop scan when we start the service * set the radio by using the service diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index 71d98094..36cc6515 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -320,14 +320,9 @@ class MainActivity : AppCompatActivity(), Logging, MeshProtos.Data.Type.CLEAR_TEXT_VALUE -> { // FIXME - use the real time from the packet // FIXME - don't just slam in a new list each time, it probably causes extra drawing. Figure out how to be Compose smarter... - val modded = MessagesState.messages.value.toMutableList() - modded.add( - TextMessage( - sender, - payload.toString(utf8) - ) - ) - MessagesState.messages.value = modded + val msg = TextMessage(sender, payload.toString(utf8)) + + MessagesState.addMessage(msg) } else -> TODO() } diff --git a/app/src/main/java/com/geeksville/mesh/model/NodeDB.kt b/app/src/main/java/com/geeksville/mesh/model/NodeDB.kt index 8b79ce01..14965783 100644 --- a/app/src/main/java/com/geeksville/mesh/model/NodeDB.kt +++ b/app/src/main/java/com/geeksville/mesh/model/NodeDB.kt @@ -46,5 +46,6 @@ object NodeDB { /// A map from nodeid to to nodeinfo val nodes = mutableStateOf(testNodes.map { it.user!!.id to it }.toMap()) - val ourNodeInfo get() = nodes.value[myId.value!!] ?: error("our node not found") + /// Could be null if we haven't received our node DB yet + val ourNodeInfo get() = nodes.value[myId.value!!] } \ No newline at end of file diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index 805bd169..bb94f388 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -26,7 +26,7 @@ import com.google.protobuf.ByteString import java.nio.charset.Charset -class RadioNotConnectedException() : Exception("Can't find radio") +class RadioNotConnectedException() : Exception("Not connected to radio") /** diff --git a/app/src/main/java/com/geeksville/mesh/ui/Messages.kt b/app/src/main/java/com/geeksville/mesh/ui/Messages.kt index 5336a69d..7109a7e4 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Messages.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Messages.kt @@ -1,5 +1,6 @@ package com.geeksville.mesh.ui +import android.os.RemoteException import androidx.compose.Composable import androidx.compose.state import androidx.ui.core.Modifier @@ -118,11 +119,15 @@ fun MessagesContent() { var error: String? = null val service = UIState.meshService if (service != null) - service.sendData( - null, - str.toByteArray(utf8), - MeshProtos.Data.Type.CLEAR_TEXT_VALUE - ) + try { + service.sendData( + null, + str.toByteArray(utf8), + MeshProtos.Data.Type.CLEAR_TEXT_VALUE + ) + } catch (ex: RemoteException) { + error = "Error: ${ex.message}" + } else error = "Error: No Mesh service" diff --git a/app/src/main/java/com/geeksville/mesh/ui/UserIcon.kt b/app/src/main/java/com/geeksville/mesh/ui/UserIcon.kt index 0ef2dc15..64c1392a 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/UserIcon.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/UserIcon.kt @@ -28,7 +28,7 @@ fun UserIcon(user: NodeInfo? = null, modifier: Modifier = Modifier.None) { modifier = LayoutGravity.Center ) val ourNodeInfo = NodeDB.ourNodeInfo - val distance = ourNodeInfo.distanceStr(user) + val distance = ourNodeInfo?.distanceStr(user) if (distance != null) Text(distance, modifier = LayoutGravity.Center) }