kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
connection state now shown in gui
rodzic
984bc460d6
commit
63b9da4c12
|
@ -44,6 +44,7 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// per protobuf-gradle-plugin docs, this is recommended for android
|
||||
protobuf {
|
||||
protoc {
|
||||
|
|
|
@ -14,14 +14,12 @@ import android.view.MenuItem
|
|||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.Composable
|
||||
import androidx.compose.Model
|
||||
import androidx.compose.mutableStateOf
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.ui.core.Text
|
||||
import androidx.ui.core.dp
|
||||
import androidx.ui.core.setContent
|
||||
import androidx.ui.layout.Column
|
||||
import androidx.ui.layout.Spacing
|
||||
import androidx.ui.material.Button
|
||||
import androidx.ui.material.MaterialTheme
|
||||
import androidx.ui.tooling.preview.Preview
|
||||
|
@ -39,13 +37,18 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
const val DID_REQUEST_PERM = 11
|
||||
}
|
||||
|
||||
@Model
|
||||
class MeshServiceState(
|
||||
var connected: Boolean = false,
|
||||
var onlineIds: Array<String> = arrayOf()
|
||||
)
|
||||
/// A map from nodeid to to nodeinfo
|
||||
private val nodes = mutableStateOf(mapOf<String, NodeInfo>())
|
||||
|
||||
data class TextMessage(val date: Date, val from: String, val text: String)
|
||||
|
||||
private val messages = mutableStateOf(listOf<TextMessage>())
|
||||
|
||||
/// Are we connected to our radio device
|
||||
private var isConnected = mutableStateOf(false)
|
||||
|
||||
private val utf8 = Charset.forName("UTF-8")
|
||||
|
||||
val meshServiceState = MeshServiceState()
|
||||
|
||||
private val bluetoothAdapter: BluetoothAdapter? by lazy(LazyThreadSafetyMode.NONE) {
|
||||
val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
|
||||
|
@ -96,7 +99,7 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
@Preview
|
||||
@Composable
|
||||
fun previewView() {
|
||||
composeView(meshServiceState)
|
||||
composeView()
|
||||
}
|
||||
|
||||
private fun sendTestPackets() {
|
||||
|
@ -120,14 +123,20 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun composeView(meshServiceState: MeshServiceState) {
|
||||
fun composeView() {
|
||||
MaterialTheme {
|
||||
Column(modifier = Spacing(8.dp)) {
|
||||
Text(text = "Meshtastic", modifier = Spacing(8.dp))
|
||||
// modifier = Spacing(8.dp)
|
||||
Column() {
|
||||
Text(text = "Meshtastic")
|
||||
|
||||
Text("Radio connected: ${meshServiceState.connected}")
|
||||
meshServiceState.onlineIds.forEach {
|
||||
Text("User: $it")
|
||||
Text("Radio connected: ${isConnected.value}")
|
||||
|
||||
nodes.value.values.forEach {
|
||||
Text("Node: $it")
|
||||
}
|
||||
|
||||
messages.value.forEach {
|
||||
Text("Text: $it")
|
||||
}
|
||||
|
||||
Button(text = "Start scan",
|
||||
|
@ -157,7 +166,7 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
|
||||
|
||||
setContent {
|
||||
composeView(meshServiceState)
|
||||
composeView()
|
||||
}
|
||||
|
||||
// Ensures Bluetooth is available on the device and it is enabled. If not,
|
||||
|
@ -183,17 +192,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
super.onDestroy()
|
||||
}
|
||||
|
||||
/// A map from nodeid to to nodeinfo
|
||||
private val nodes = mutableMapOf<String, NodeInfo>()
|
||||
|
||||
data class TextMessage(val date: Date, val from: String, val text: String)
|
||||
|
||||
private val messages = mutableListOf<TextMessage>()
|
||||
|
||||
/// Are we connected to our radio device
|
||||
private var isConnected = false
|
||||
|
||||
private val utf8 = Charset.forName("UTF-8")
|
||||
|
||||
private val meshServiceReceiver = object : BroadcastReceiver() {
|
||||
|
||||
|
@ -207,25 +205,30 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
|
||||
// We only care about nodes that have user info
|
||||
info.user?.id?.let {
|
||||
nodes[it] = info
|
||||
val newnodes = nodes.value.toMutableMap()
|
||||
newnodes[it] = info
|
||||
nodes.value = newnodes
|
||||
}
|
||||
}
|
||||
|
||||
MeshService.ACTION_RECEIVED_DATA -> {
|
||||
warn("TODO rxopaqe")
|
||||
val sender = intent.getStringExtra(EXTRA_SENDER)!!
|
||||
val payload = intent.getByteArrayExtra(EXTRA_PAYLOAD)!!
|
||||
val typ = intent.getIntExtra(EXTRA_TYP, -1)!!
|
||||
val typ = intent.getIntExtra(EXTRA_TYP, -1)
|
||||
|
||||
when (typ) {
|
||||
MeshProtos.Data.Type.CLEAR_TEXT_VALUE -> {
|
||||
// FIXME - use the real time from the packet
|
||||
messages.add(TextMessage(Date(), sender, payload.toString(utf8)))
|
||||
val modded = messages.value.toMutableList()
|
||||
modded.add(TextMessage(Date(), sender, payload.toString(utf8)))
|
||||
messages.value = modded
|
||||
}
|
||||
else -> TODO()
|
||||
}
|
||||
}
|
||||
RadioInterfaceService.CONNECTCHANGED_ACTION -> {
|
||||
isConnected = intent.getBooleanExtra(EXTRA_CONNECTED, false)
|
||||
isConnected.value = intent.getBooleanExtra(EXTRA_CONNECTED, false)
|
||||
debug("connchange $isConnected")
|
||||
}
|
||||
else -> TODO()
|
||||
|
@ -245,16 +248,12 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
// FIXME - do actions for when we connect to the service
|
||||
debug("did connect")
|
||||
|
||||
// FIXME: this still can't work this early because the send to +6508675310
|
||||
// requires a DB lookup which isn't yet populated (until the sim test packets
|
||||
// from the radio arrive)
|
||||
// sendTestPackets() // send some traffic ASAP
|
||||
isConnected.value = m.isConnected
|
||||
|
||||
// FIXME this doesn't work because the model has already been copied into compose land?
|
||||
// runOnUiThread { // FIXME - this can be removed?
|
||||
meshServiceState.connected = m.isConnected
|
||||
meshServiceState.onlineIds = m.online
|
||||
// }
|
||||
// make some placeholder nodeinfos
|
||||
val pairs = m.online.toList().map { it to NodeInfo(0, MeshUser(it, "unknown", "unk")) }
|
||||
.toTypedArray()
|
||||
nodes.value = mapOf(*pairs)
|
||||
}
|
||||
|
||||
override fun onServiceDisconnected(name: ComponentName) {
|
||||
|
|
|
@ -283,7 +283,7 @@ class MeshService : Service(), Logging {
|
|||
if (userId != null)
|
||||
nodeDBbyID[userId] = info
|
||||
|
||||
broadcastNodeChange(info)
|
||||
// FIXME broadcastNodeChange(info)
|
||||
}
|
||||
|
||||
/// Generate a new mesh packet builder with our node as the sender, and the specified node num
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.3.61'
|
||||
ext.compose_version = '0.1.0-dev03'
|
||||
ext.compose_version = '0.1.0-dev04'
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
|
@ -29,7 +29,7 @@ allprojects {
|
|||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue