Add connected nodes list dialog (v1.0.4)
- Tap callsign on main screen shows dialog with connected nodes - SvxService tracks node list: ServerInfo + NODE_JOINED/NODE_LEFT events - Bump to 1.0.4
This commit is contained in:
@@ -11,8 +11,8 @@ android {
|
|||||||
applicationId = "ru.ua1zbe.svxremote"
|
applicationId = "ru.ua1zbe.svxremote"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 5
|
versionCode = 6
|
||||||
versionName = "1.0.3"
|
versionName = "1.0.4"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ class MainActivity : Activity(), SvxService.Listener {
|
|||||||
|
|
||||||
lblTg.setOnClickListener { showGroupsDialog() }
|
lblTg.setOnClickListener { showGroupsDialog() }
|
||||||
|
|
||||||
|
lblCallsign.setOnClickListener { showNodesDialog() }
|
||||||
|
|
||||||
connectZone.setOnClickListener {
|
connectZone.setOnClickListener {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
svc?.disconnect()
|
svc?.disconnect()
|
||||||
@@ -341,6 +343,18 @@ class MainActivity : Activity(), SvxService.Listener {
|
|||||||
mainHandler.postDelayed({ connect() }, 500)
|
mainHandler.postDelayed({ connect() }, 500)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showNodesDialog() {
|
||||||
|
val nodes = (svc?.nodeList() ?: emptyList()).sorted()
|
||||||
|
if (nodes.isEmpty()) {
|
||||||
|
toast(getString(R.string.toast_nodes_empty))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
AlertDialog.Builder(this)
|
||||||
|
.setTitle(getString(R.string.nodes_title, nodes.size))
|
||||||
|
.setItems(nodes.toTypedArray(), null)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun showGroupsDialog() {
|
private fun showGroupsDialog() {
|
||||||
val groups = (settings.groups + settings.talkGroup).distinct()
|
val groups = (settings.groups + settings.talkGroup).distinct()
|
||||||
if (groups.isEmpty()) {
|
if (groups.isEmpty()) {
|
||||||
|
|||||||
@@ -111,9 +111,26 @@ class SvxService : Service(), ReflectorClient.Callbacks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onServerInfo(info: MsgParser.ServerInfo) {
|
override fun onServerInfo(info: MsgParser.ServerInfo) {
|
||||||
|
synchronized(nodeSet) {
|
||||||
|
nodeSet.clear()
|
||||||
|
nodeSet.addAll(info.nodes)
|
||||||
|
}
|
||||||
listener?.onServerInfo(info)
|
listener?.onServerInfo(info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val nodeSet = LinkedHashSet<String>()
|
||||||
|
|
||||||
|
/** Текущий список подключенных узлов (копия для UI). */
|
||||||
|
fun nodeList(): List<String> = synchronized(nodeSet) { nodeSet.toList() }
|
||||||
|
|
||||||
|
override fun onNodeJoined(callsign: String) {
|
||||||
|
synchronized(nodeSet) { nodeSet.add(callsign) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNodeLeft(callsign: String) {
|
||||||
|
synchronized(nodeSet) { nodeSet.remove(callsign) }
|
||||||
|
}
|
||||||
|
|
||||||
override fun onTalkerStart(tg: Long, callsign: String) {
|
override fun onTalkerStart(tg: Long, callsign: String) {
|
||||||
updateNotification(getString(R.string.notif_talking, callsign))
|
updateNotification(getString(R.string.notif_talking, callsign))
|
||||||
listener?.onTalkerStart(tg, callsign)
|
listener?.onTalkerStart(tg, callsign)
|
||||||
@@ -124,12 +141,6 @@ class SvxService : Service(), ReflectorClient.Callbacks {
|
|||||||
listener?.onTalkerStop(tg, callsign)
|
listener?.onTalkerStop(tg, callsign)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNodeJoined(callsign: String) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onNodeLeft(callsign: String) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAudioPacket(packet: ByteArray, seq: Int) {
|
override fun onAudioPacket(packet: ByteArray, seq: Int) {
|
||||||
engine.onAudioPacket(packet)
|
engine.onAudioPacket(packet)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,10 @@
|
|||||||
<string name="pref_groups">Группы для переключения (через запятую)</string>
|
<string name="pref_groups">Группы для переключения (через запятую)</string>
|
||||||
<string name="select_tg">Выбор группы</string>
|
<string name="select_tg">Выбор группы</string>
|
||||||
<string name="toast_groups_empty">Добавьте группы в настройках</string>
|
<string name="toast_groups_empty">Добавьте группы в настройках</string>
|
||||||
|
<string name="nodes_title">Узлы в сети (%1$d)</string>
|
||||||
|
<string name="toast_nodes_empty">Нет подключенных узлов</string>
|
||||||
<string name="btn_save">Сохранить</string>
|
<string name="btn_save">Сохранить</string>
|
||||||
<string name="app_version">SVXhomyak — v1.0.3</string>
|
<string name="app_version">SVXhomyak — v1.0.4</string>
|
||||||
<string name="saved">Сохранено</string>
|
<string name="saved">Сохранено</string>
|
||||||
<string name="pref_callsign_hint">например UA1ZBE</string>
|
<string name="pref_callsign_hint">например UA1ZBE</string>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user