Meshtastic-Android/app/src/main/java/com/geeksville/mesh/model/MessagesState.kt

74 lines
2 KiB
Kotlin
Raw Normal View History

2020-02-17 13:34:52 -08:00
package com.geeksville.mesh.model
import android.os.RemoteException
import androidx.lifecycle.MutableLiveData
import com.geeksville.android.BuildUtils.isEmulator
2020-02-17 13:34:52 -08:00
import com.geeksville.android.Logging
import com.geeksville.mesh.MeshProtos
import com.geeksville.mesh.utf8
2020-02-17 13:34:52 -08:00
import java.util.*
/**
* the model object for a text message
*
* if errorMessage is set then we had a problem sending this message
2020-02-17 13:34:52 -08:00
*/
data class TextMessage(
val from: String,
val text: String,
val date: Date = Date(),
val errorMessage: String? = null
)
2020-02-17 13:34:52 -08:00
class MessagesState(private val ui: UIViewModel) : Logging {
private val testTexts = listOf(
2020-02-17 13:34:52 -08:00
TextMessage(
2020-02-17 13:46:13 -08:00
"+16508765310",
2020-02-17 13:34:52 -08:00
"I found the cache"
),
TextMessage(
2020-02-17 13:46:13 -08:00
"+16508765311",
2020-02-17 13:34:52 -08:00
"Help! I've fallen and I can't get up."
)
)
// If the following (unused otherwise) line is commented out, the IDE preview window works.
// if left in the preview always renders as empty.
val messages =
object : MutableLiveData<List<TextMessage>>(if (isEmulator) testTexts else listOf()) {
}
2020-02-17 13:34:52 -08:00
/// add a message our GUI list of past msgs
2020-02-17 13:34:52 -08:00
fun addMessage(m: TextMessage) {
messages.value = messages.value!! + m
2020-02-17 13:34:52 -08:00
}
/// Send a message and added it to our GUI log
fun sendMessage(str: String, dest: String? = null) {
var error: String? = null
val service = ui.meshService
if (service != null)
try {
service.sendData(
dest,
str.toByteArray(utf8),
MeshProtos.Data.Type.CLEAR_TEXT_VALUE
)
} catch (ex: RemoteException) {
error = "Error: ${ex.message}"
}
else
error = "Error: No Mesh service"
addMessage(
TextMessage(
ui.nodeDB.myId.value!!,
str,
errorMessage = error
)
)
}
2020-02-17 13:34:52 -08:00
}