add a min appVersion check, so devices can tell user when android app needs

update
This commit is contained in:
geeksville 2020-06-03 16:16:51 -07:00
parent ecae22d28d
commit 9254a90774
8 changed files with 27 additions and 14 deletions

View file

@ -548,7 +548,18 @@ class MainActivity : AppCompatActivity(), Logging,
model.radioConfig.value =
MeshProtos.RadioConfig.parseFrom(service.radioConfig)
model.myNodeInfo.value = service.myNodeInfo
val info = service.myNodeInfo
model.myNodeInfo.value = info
val isOld = info.minAppVersion > BuildConfig.VERSION_CODE
if (isOld)
MaterialAlertDialogBuilder(this)
.setTitle(getString(R.string.app_too_old))
.setMessage(getString(R.string.must_update))
.setPositiveButton("Okay") { _, _ ->
info("User acknowledged app is old")
}
.show()
updateNodesFromDevice()

View file

@ -17,7 +17,8 @@ data class MyNodeInfo(
val currentPacketId: Long,
val nodeNumBits: Int,
val packetIdBits: Int,
val messageTimeoutMsec: Int
val messageTimeoutMsec: Int,
val minAppVersion: Int
) : Parcelable {
/** A human readable description of the software/hardware version */
val firmwareString: String get() = "$model $region/$firmwareVersion"
@ -33,6 +34,7 @@ data class MyNodeInfo(
parcel.readLong(),
parcel.readInt(),
parcel.readInt(),
parcel.readInt(),
parcel.readInt()
) {
}
@ -49,6 +51,7 @@ data class MyNodeInfo(
parcel.writeInt(nodeNumBits)
parcel.writeInt(packetIdBits)
parcel.writeInt(messageTimeoutMsec)
parcel.writeInt(minAppVersion)
}
override fun describeContents(): Int {

View file

@ -5,9 +5,7 @@ import androidx.lifecycle.MutableLiveData
import com.geeksville.android.BuildUtils.isEmulator
import com.geeksville.android.Logging
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.MeshProtos
import com.geeksville.mesh.MessageStatus
import com.geeksville.mesh.utf8
class MessagesState(private val ui: UIViewModel) : Logging {
@ -31,12 +29,14 @@ class MessagesState(private val ui: UIViewModel) : Logging {
/// add a message our GUI list of past msgs
fun addMessage(m: DataPacket) {
debug("Adding message to view id=${m.id}")
// FIXME - don't just slam in a new list each time, it probably causes extra drawing.
messages.value = messages.value!! + m
}
fun updateStatus(id: Int, status: MessageStatus) {
// Super inefficent but this is rare
debug("Handling message status change $id: $status")
val msgs = messages.value!!
msgs.find { it.id == id }?.let { p ->
@ -55,11 +55,8 @@ class MessagesState(private val ui: UIViewModel) : Logging {
fun sendMessage(str: String, dest: String = DataPacket.ID_BROADCAST) {
val service = ui.meshService
val p = DataPacket(
dest,
str.toByteArray(utf8),
MeshProtos.Data.Type.CLEAR_TEXT_VALUE
)
val p = DataPacket(dest, str)
if (service != null)
try {
service.send(p)
@ -69,6 +66,7 @@ class MessagesState(private val ui: UIViewModel) : Logging {
else
p.errorMessage = "Error: No Mesh service"
// FIXME - why is the first time we are called p is already in the list at this point?
addMessage(p)
}
}

View file

@ -1228,7 +1228,8 @@ class MeshService : Service(), Logging {
currentPacketId.toLong() and 0xffffffffL,
if (nodeNumBits == 0) 8 else nodeNumBits,
if (packetIdBits == 0) 8 else packetIdBits,
if (messageTimeoutMsec == 0) 5 * 60 * 1000 else messageTimeoutMsec // constants from current device code
if (messageTimeoutMsec == 0) 5 * 60 * 1000 else messageTimeoutMsec, // constants from current device code
minAppVersion
)
}
@ -1543,8 +1544,6 @@ class MeshService : Service(), Logging {
"num_data_sent",
DataPair(1)
)
connectionState == ConnectionState.CONNECTED
}
}