diff --git a/app/build.gradle b/app/build.gradle index 4704ea736..29a6baa4e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,9 +36,9 @@ android { defaultConfig { applicationId "com.geeksville.mesh" minSdkVersion 21 // The oldest emulator image I have tried is 22 (though 21 probably works) - targetSdkVersion 30 - versionCode 20213 // format is Mmmss (where M is 1+the numeric major number - versionName "1.2.13" + targetSdkVersion 29 // 30 can't work until an explicit location permissions dialog is added + versionCode 20214 // format is Mmmss (where M is 1+the numeric major number + versionName "1.2.14" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // per https://developer.android.com/studio/write/vector-asset-studio 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 06855b66a..b07c383f4 100644 --- a/app/src/main/java/com/geeksville/mesh/model/Channel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/Channel.kt @@ -78,6 +78,10 @@ data class Channel( return "#${name}-${suffix}" } + + override fun equals(o: Any?): Boolean = (o is Channel) + && psk.toByteArray() contentEquals o.psk.toByteArray() + && name == o.name } fun xorHash(b: ByteArray) = b.fold(0, { acc, x -> acc xor (x.toInt() and 0xff) }) \ 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 9a0d41a98..5f8a075d1 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -428,7 +428,7 @@ class MeshService : Service(), Logging { private var radioConfig: RadioConfigProtos.RadioConfig? = null - private var channels = arrayOf() + private var channels = fixupChannelList(listOf()).toTypedArray() /// True after we've done our initial node db init @Volatile @@ -781,6 +781,7 @@ class MeshService : Service(), Logging { val mi = myNodeInfo if (mi != null) { val ch = a.getChannelResponse + // add new entries if needed channels[ch.index] = ch debug("Admin: Received channel ${ch.index}") if (ch.index + 1 < mi.maxChannels) { @@ -1314,14 +1315,14 @@ class MeshService : Service(), Logging { /// scan the channel list and make sure it has one PRIMARY channel and is maxChannels long private fun fixupChannelList(lIn: List): List { - val mi = myNodeInfo + val maxChannels = + myNodeInfo?.maxChannels ?: 8 // If we don't have my node info, assume 8 channels var l = lIn - if (mi != null) - while (l.size < mi.maxChannels) { - val b = ChannelProtos.Channel.newBuilder() - b.index = l.size - l += b.build() - } + while (l.size < maxChannels) { + val b = ChannelProtos.Channel.newBuilder() + b.index = l.size + l += b.build() + } return l } diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt index a8f5457b1..8caa6b9d6 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt @@ -85,7 +85,7 @@ class ChannelFragment : ScreenFragment("Channel"), Logging { // Only let buttons work if we are connected to the radio binding.shareButton.isEnabled = connected - binding.resetButton.isEnabled = connected + binding.resetButton.isEnabled = connected && Channel.defaultChannel != channel binding.editableCheckbox.isChecked = false // start locked if (channel != null) { @@ -185,7 +185,7 @@ class ChannelFragment : ScreenFragment("Channel"), Logging { .setNeutralButton(R.string.cancel) { _, _ -> setGUIfromModel() // throw away any edits } - .setPositiveButton(getString(R.string.accept)) { _, _ -> + .setPositiveButton(R.string.apply) { _, _ -> debug("Switching back to default channel") installSettings(Channel.defaultChannel.settings) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c91839d96..8e2d4774d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,4 +101,5 @@ Reset Are you sure you want to change to the default channel? Reset to defaults + Apply