5 Commits

5 changed files with 34 additions and 8 deletions

View File

@@ -11,8 +11,8 @@ android {
applicationId = "ru.ua1zbe.svxremote" applicationId = "ru.ua1zbe.svxremote"
minSdk = 26 minSdk = 26
targetSdk = 34 targetSdk = 34
versionCode = 6 versionCode = 7
versionName = "1.0.4" versionName = "1.0.5"
} }
buildTypes { buildTypes {
@@ -21,6 +21,10 @@ android {
} }
} }
buildFeatures {
buildConfig = true
}
lint { lint {
checkReleaseBuilds = false checkReleaseBuilds = false
abortOnError = false abortOnError = false

View File

@@ -432,7 +432,13 @@ class MainActivity : Activity(), SvxService.Listener {
/** Включить/выключить режим мониторинга групп с переподключением. */ /** Включить/выключить режим мониторинга групп с переподключением. */
private fun toggleMonitoring() { private fun toggleMonitoring() {
monitoring = !monitoring val enabling = !monitoring
if (enabling) {
showToast(R.string.monitoring_dev_warning, 10000)
} else {
showToast(R.string.monitor_off)
}
monitoring = enabling
priorityActive = false priorityActive = false
updateMonitorButton() updateMonitorButton()
updatePttEnabled() updatePttEnabled()
@@ -444,6 +450,15 @@ class MainActivity : Activity(), SvxService.Listener {
} }
} }
/** Окно с сообщением на заданное время (мс). */
private fun showToast(resId: Int, durationMs: Int = Toast.LENGTH_SHORT) {
val toast = Toast.makeText(this, resId, Toast.LENGTH_SHORT)
toast.show()
if (durationMs > Toast.LENGTH_SHORT) {
mainHandler.postDelayed({ toast.cancel() }, durationMs.toLong())
}
}
private fun updateMonitorButton() { private fun updateMonitorButton() {
val active = monitoring val active = monitoring
btnMonitor.imageTintList = ColorStateList.valueOf( btnMonitor.imageTintList = ColorStateList.valueOf(

View File

@@ -1,5 +1,6 @@
package ru.ua1zbe.svxremote.proto package ru.ua1zbe.svxremote.proto
import android.util.Log
import java.net.DatagramPacket import java.net.DatagramPacket
import java.net.DatagramSocket import java.net.DatagramSocket
import java.net.InetAddress import java.net.InetAddress
@@ -7,7 +8,7 @@ import java.net.InetSocketAddress
import java.net.Socket import java.net.Socket
import java.net.SocketTimeoutException import java.net.SocketTimeoutException
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
import android.util.Log import ru.ua1zbe.svxremote.BuildConfig
/** /**
* Клиент рефлектора SVXLink (протокол v2, авторизация AUTH_KEY, аудио Opus по UDP). * Клиент рефлектора SVXLink (протокол v2, авторизация AUTH_KEY, аудио Opus по UDP).
@@ -50,7 +51,9 @@ class ReflectorClient(
const val RECONNECT_DELAY_MS = 5000L const val RECONNECT_DELAY_MS = 5000L
const val CLIENT_SW_INFO = "SVXHomyak" const val CLIENT_SW_INFO = "SVXHomyak"
const val CLIENT_SW_VERSION = "1.0.0" // Версия ПО передаётся на сервер для дашборда; берём из BuildConfig,
// чтобы не расходилась с versionName в build.gradle.kts
val CLIENT_SW_VERSION = BuildConfig.VERSION_NAME
} }
data class Settings( data class Settings(

View File

@@ -195,9 +195,11 @@ object MsgBuilder {
return RcMessage(ReflectorProtocol.MSG_TG_MONITOR, w.toByteArray()) return RcMessage(ReflectorProtocol.MSG_TG_MONITOR, w.toByteArray())
} }
/** MsgNodeInfo v2: JSON-строка с данными клиента (версия ПО и пр.). */ /** MsgNodeInfo v2: JSON-строка с данными клиента (версия ПО и пр.).
* Рефлектор вливает JSON в статус узла, дашборд показывает поле
* «swVer» (как у svxlink-узлов). */
fun nodeInfo(swInfo: String, swVersion: String): RcMessage { fun nodeInfo(swInfo: String, swVersion: String): RcMessage {
val json = "{\"swInfo\":\"$swInfo\",\"swVersion\":\"$swVersion\"}" val json = "{\"swInfo\":\"$swInfo\",\"swVer\":\"$swVersion\"}"
return RcMessage(ReflectorProtocol.MSG_NODE_INFO, BinWriter().str(json).toByteArray()) return RcMessage(ReflectorProtocol.MSG_NODE_INFO, BinWriter().str(json).toByteArray())
} }

View File

@@ -20,7 +20,7 @@
<string name="node_tg_suffix"> (группа %1$d)</string> <string name="node_tg_suffix"> (группа %1$d)</string>
<string name="node_with_tg">%1$s — TG%2$d</string> <string name="node_with_tg">%1$s — TG%2$d</string>
<string name="btn_save">Сохранить</string> <string name="btn_save">Сохранить</string>
<string name="app_version">SVXhomyak — v1.0.4</string> <string name="app_version">SVXhomyak — v1.0.5</string>
<string name="saved">Сохранено</string> <string name="saved">Сохранено</string>
<string name="pref_callsign_hint">например UA1ZBE</string> <string name="pref_callsign_hint">например UA1ZBE</string>
@@ -28,6 +28,8 @@
<string name="app_title">SVXHomyak</string> <string name="app_title">SVXHomyak</string>
<string name="btn_power">Выключить: отключиться и закрыть</string> <string name="btn_power">Выключить: отключиться и закрыть</string>
<string name="btn_monitor">Мониторинг групп (нажмите, чтобы включить)</string> <string name="btn_monitor">Мониторинг групп (нажмите, чтобы включить)</string>
<string name="monitoring_dev_warning">Функция находится в разработке. Может работать некорректно!</string>
<string name="monitor_off">Обычный режим</string>
<string name="btn_monitor_on">Мониторинг групп включен (нажмите, чтобы выключить)</string> <string name="btn_monitor_on">Мониторинг групп включен (нажмите, чтобы выключить)</string>
<string name="status_monitoring">Мониторинг: %1$s</string> <string name="status_monitoring">Мониторинг: %1$s</string>
<string name="talker_mon">Говорит: %1$s · TG%2$d</string> <string name="talker_mon">Говорит: %1$s · TG%2$d</string>