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 872fa19a6..c748073a9 100644
--- a/app/src/main/java/com/geeksville/mesh/model/Channel.kt
+++ b/app/src/main/java/com/geeksville/mesh/model/Channel.kt
@@ -74,15 +74,3 @@ data class Channel(
return barcodeEncoder.createBitmap(bitMatrix)
}
}
-
-
-/**
- * a nice readable description of modem configs
- */
-fun MeshProtos.ChannelSettings.ModemConfig.toHumanString(): String = when (this) {
- MeshProtos.ChannelSettings.ModemConfig.Bw125Cr45Sf128 -> "Medium range (but fast)"
- MeshProtos.ChannelSettings.ModemConfig.Bw500Cr45Sf128 -> "Short range (but fast)"
- MeshProtos.ChannelSettings.ModemConfig.Bw31_25Cr48Sf512 -> "Long range (but slower)"
- MeshProtos.ChannelSettings.ModemConfig.Bw125Cr48Sf4096 -> "Very long range (but slow)"
- else -> this.toString()
-}
diff --git a/app/src/main/java/com/geeksville/mesh/model/ChannelOption.kt b/app/src/main/java/com/geeksville/mesh/model/ChannelOption.kt
new file mode 100644
index 000000000..318739496
--- /dev/null
+++ b/app/src/main/java/com/geeksville/mesh/model/ChannelOption.kt
@@ -0,0 +1,11 @@
+package com.geeksville.mesh.model
+
+import com.geeksville.mesh.MeshProtos
+import com.geeksville.mesh.R
+
+enum class ChannelOption(val modemConfig: MeshProtos.ChannelSettings.ModemConfig, val configRes: Int) {
+ SHORT(MeshProtos.ChannelSettings.ModemConfig.Bw125Cr45Sf128, R.string.modem_config_short),
+ MEDIUM(MeshProtos.ChannelSettings.ModemConfig.Bw500Cr45Sf128, R.string.modem_config_medium),
+ LONG(MeshProtos.ChannelSettings.ModemConfig.Bw31_25Cr48Sf512, R.string.modem_config_long),
+ VERY_LONG(MeshProtos.ChannelSettings.ModemConfig.Bw125Cr48Sf4096, R.string.modem_config_very_long)
+}
\ No newline at end of file
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 df8523a7c..ee9dd4823 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
@@ -17,9 +17,12 @@ import com.geeksville.analytics.DataPair
import com.geeksville.android.GeeksvilleApplication
import com.geeksville.android.Logging
import com.geeksville.android.hideKeyboard
+import com.geeksville.mesh.MeshProtos
import com.geeksville.mesh.R
import com.geeksville.mesh.model.Channel
+import com.geeksville.mesh.model.ChannelOption
import com.geeksville.mesh.model.UIViewModel
+import com.geeksville.mesh.model.toHumanRes
import com.geeksville.mesh.service.MeshService
import com.geeksville.util.Exceptions
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -59,7 +62,7 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
private fun onEditingChanged() {
val isEditing = editableCheckbox.isChecked
- channelOptions.isEnabled = false // Not yet ready
+ channelOptions.isEnabled = isEditing
shareButton.isEnabled = !isEditing
channelNameView.isEnabled = isEditing
if (isEditing) // Dim the (stale) QR code while editing...
@@ -91,11 +94,12 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
}
onEditingChanged() // we just locked the gui
-
+ val modemConfigs = ChannelOption.values()
+ val modemConfigList = modemConfigs.map { getString(it.configRes) }
val adapter = ArrayAdapter(
requireContext(),
R.layout.dropdown_menu_popup_item,
- arrayOf("Item 1", "Item 2", "Item 3", "Item 4")
+ modemConfigList
)
filled_exposed_dropdown.setAdapter(adapter)
@@ -163,6 +167,8 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
newSettings.psk = ByteString.copyFrom(Channel.channelDefaultKey)
}
+ val selectedChannelOptionString = filled_exposed_dropdown.editableText.toString()
+ newSettings.modemConfig = getModemConfig(selectedChannelOptionString)
// Try to change the radio, if it fails, tell the user why and throw away their redits
try {
model.setChannel(newSettings.build())
@@ -200,4 +206,13 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
setGUIfromModel()
})
}
+
+ private fun getModemConfig(selectedChannelOptionString: String): MeshProtos.ChannelSettings.ModemConfig {
+ for (item in ChannelOption.values()) {
+ if (getString(item.configRes) == selectedChannelOptionString)
+ return item.modemConfig
+ }
+
+ return MeshProtos.ChannelSettings.ModemConfig.UNRECOGNIZED
+ }
}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index da828d1d9..033450d2d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -64,4 +64,8 @@
Le jumelage a échoué, veuillez sélectionner à nouveau
L\'accès à la position est désactivé, ne peut pas fournir de position au mesh.
Mise à jour vers %s
+ Courte distance (rapide)
+ Moyenne distance (rapide)
+ Longue distance (plus lent)
+ Très longue distance (lent)
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1140ba58e..ebe3ad8dc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -63,4 +63,9 @@
Application too old
You must update this application on the Google Play store (or Github). It is too old to talk to this radio.
None (disable)
+ Short range (but fast)
+ Medium range (but fast)
+ Long range (but slower)
+ Very long range (but slow)
+ UNRECOGNIZED