diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 237047402..d151f585d 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index dfe11bfc4..6d4c9c306 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -30,8 +30,8 @@ android {
applicationId "com.geeksville.mesh"
minSdkVersion 21 // The oldest emulator image I have tried is 22 (though 21 probably works)
targetSdkVersion 29
- versionCode 20120 // format is Mmmss (where M is 1+the numeric major number
- versionName "1.1.20"
+ versionCode 20122 // format is Mmmss (where M is 1+the numeric major number
+ versionName "1.1.22"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -152,7 +152,7 @@ dependencies {
implementation 'com.github.mik3y:usb-serial-for-android:v3.0.0'
// mapbox
- implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1'
+ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0'
// mapbox specifies a really old version of okhttp3 which causes lots of API warnings. trying a newer version
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
index 52a5152c1..b5686f564 100644
--- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt
+++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
@@ -715,7 +715,7 @@ class MainActivity : AppCompatActivity(), Logging,
model.messagesState.addMessage(payload)
}
else ->
- errormsg("Unhandled dataType ${payload.dataType}")
+ warn("Ignored dataType ${payload.dataType}")
}
}
@@ -798,8 +798,8 @@ class MainActivity : AppCompatActivity(), Logging,
// We don't start listening for packets until after we are connected to the service
registerMeshReceiver()
- // Init our messages table with the service's record of past text messages
- val msgs = service.oldMessages
+ // Init our messages table with the service's record of past text messages (ignore all other message types)
+ val msgs = service.oldMessages.filter { p -> p.dataType == Portnums.PortNum.TEXT_MESSAGE_APP_VALUE }
debug("Service provided ${msgs.size} messages")
model.messagesState.setMessages(msgs)
val connectionState =
diff --git a/app/src/main/java/com/geeksville/mesh/model/Channel.kt b/app/src/main/java/com/geeksville/mesh/model/Channel.kt
index e698dbccb..1af4da1e5 100644
--- a/app/src/main/java/com/geeksville/mesh/model/Channel.kt
+++ b/app/src/main/java/com/geeksville/mesh/model/Channel.kt
@@ -4,6 +4,7 @@ import android.graphics.Bitmap
import android.net.Uri
import android.util.Base64
import com.geeksville.mesh.MeshProtos
+import com.google.protobuf.ByteString
import com.google.zxing.BarcodeFormat
import com.google.zxing.MultiFormatWriter
import com.journeyapps.barcodescanner.BarcodeEncoder
@@ -52,9 +53,26 @@ data class Channel(
constructor(url: Uri) : this(urlToSettings(url))
- val name: String get() = settings.name
+ /// Return the name of our channel as a human readable string. If empty string, assume "Default" per mesh.proto spec
+ val name: String get() = if(settings.name.isEmpty()) defaultChannelName else settings.name
val modemConfig: MeshProtos.ChannelSettings.ModemConfig get() = settings.modemConfig
+ val psk get() = if(settings.psk.size() != 1)
+ settings.psk // A standard PSK
+ else {
+ // One of our special 1 byte PSKs, see mesh.proto for docs.
+ val pskIndex = settings.psk.byteAt(0).toInt()
+
+ if(pskIndex == 0)
+ ByteString.EMPTY // Treat as an empty PSK (no encryption)
+ else {
+ // Treat an index of 1 as the old channelDefaultKey and work up from there
+ val bytes = channelDefaultKey.clone()
+ bytes[bytes.size - 1] = (0xff and (bytes[bytes.size - 1] + pskIndex - 1)).toByte()
+ ByteString.copyFrom(bytes)
+ }
+ }
+
/**
* Return a name that is formatted as #channename-suffix
*
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 c294e8ac3..30d2e8087 100644
--- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt
+++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt
@@ -597,7 +597,7 @@ class MeshService : Service(), Logging {
if (dataPacket != null) {
if (myInfo.myNodeNum == packet.from)
- debug("Ignoring retransmission of our packet ${bytes.size}")
+ debug("Ignoring packet sent from our node")
else {
debug("Received data from $fromId, portnum=${data.portnumValue} ${bytes.size} bytes")
diff --git a/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt b/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt
index 13663d047..ece6f66e4 100644
--- a/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt
+++ b/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt
@@ -76,7 +76,10 @@ class RadioInterfaceService : Service(), Logging {
var address = prefs.getString(DEVADDR_KEY, null)
if (address == null) { /// Check for the old preferences name we used to use
- val rest = prefs.getString(DEVADDR_KEY_OLD, null)
+ var rest = prefs.getString(DEVADDR_KEY_OLD, null)
+ if(rest == "null")
+ rest = null
+
if (rest != null)
address = "x$rest" // Add the bluetooth prefix
}
diff --git a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt
index 889792f5b..936dfff5f 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt
@@ -113,7 +113,7 @@ class BTScanModel(app: Application) : AndroidViewModel(app), Logging {
open class DeviceListEntry(val name: String, val address: String, val bonded: Boolean) {
val bluetoothAddress
get() =
- if (address[0] == 'x')
+ if (isBluetooth)
address.substring(1)
else
null
@@ -367,27 +367,30 @@ class BTScanModel(app: Application) : AndroidViewModel(app), Logging {
// Handle requestng USB or bluetooth permissions for the device
debug("Requesting permissions for the device")
- if (it.isBluetooth) {
- // Request bonding for bluetooth
- // We ignore missing BT adapters, because it lets us run on the emulator
- bluetoothAdapter
- ?.getRemoteDevice(it.bluetoothAddress)?.let { device ->
- requestBonding(activity, device) { state ->
- if (state == BOND_BONDED) {
- errorText.value = activity.getString(R.string.pairing_completed)
- changeScanSelection(
- activity,
- it.address
- )
- } else {
- errorText.value =
- activity.getString(R.string.pairing_failed_try_again)
- }
+ exceptionReporter {
+ val bleAddress = it.bluetoothAddress
+ if (bleAddress != null) {
+ // Request bonding for bluetooth
+ // We ignore missing BT adapters, because it lets us run on the emulator
+ bluetoothAdapter
+ ?.getRemoteDevice(bleAddress)?.let { device ->
+ requestBonding(activity, device) { state ->
+ if (state == BOND_BONDED) {
+ errorText.value = activity.getString(R.string.pairing_completed)
+ changeScanSelection(
+ activity,
+ it.address
+ )
+ } else {
+ errorText.value =
+ activity.getString(R.string.pairing_failed_try_again)
+ }
- // Force the GUI to redraw
- devices.value = devices.value
+ // Force the GUI to redraw
+ devices.value = devices.value
+ }
}
- }
+ }
}
if (it.isSerial) {
@@ -453,6 +456,7 @@ class BTScanModel(app: Application) : AndroidViewModel(app), Logging {
class SettingsFragment : ScreenFragment("Settings"), Logging {
private var _binding: SettingsFragmentBinding? = null
+
// This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!!
diff --git a/app/src/main/proto b/app/src/main/proto
index aac0044b2..8729bad7f 160000
--- a/app/src/main/proto
+++ b/app/src/main/proto
@@ -1 +1 @@
-Subproject commit aac0044b2dcca5daa86c6532c1d8c43475956d31
+Subproject commit 8729bad7f6cfa461be02e3ea65fbde29435b3fe3
diff --git a/build.gradle b/build.gradle
index f37671e92..e0bb43c82 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.4.20'
+ ext.kotlin_version = '1.4.21'
ext.coroutines_version = "1.3.9"
repositories {
@@ -33,6 +33,20 @@ buildscript {
allprojects {
repositories {
+ maven {
+ // Per https://docs.mapbox.com/android/maps/guides/install/ we now need to signin to download mapbox lib
+ url 'https://api.mapbox.com/downloads/v2/releases/maven'
+ authentication {
+ basic(BasicAuthentication)
+ }
+ credentials {
+ // Do not change the username below.
+ // This should always be `mapbox` (not your username).
+ username = 'mapbox'
+ // Use the secret token you stored in gradle.properties as the password
+ password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
+ }
+ }
google()
jcenter()
maven { url 'https://jitpack.io' }
diff --git a/geeksville-androidlib b/geeksville-androidlib
index 534f0e192..eeeab6556 160000
--- a/geeksville-androidlib
+++ b/geeksville-androidlib
@@ -1 +1 @@
-Subproject commit 534f0e192bbbaaa6c32a981534b00451ed708ddc
+Subproject commit eeeab655618ea3e978caa1ed5fdfb9b68a503d38