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