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:
@@ -107,6 +107,8 @@ class MainActivity : Activity(), SvxService.Listener {
|
||||
|
||||
lblTg.setOnClickListener { showGroupsDialog() }
|
||||
|
||||
lblCallsign.setOnClickListener { showNodesDialog() }
|
||||
|
||||
connectZone.setOnClickListener {
|
||||
if (connected) {
|
||||
svc?.disconnect()
|
||||
@@ -341,6 +343,18 @@ class MainActivity : Activity(), SvxService.Listener {
|
||||
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() {
|
||||
val groups = (settings.groups + settings.talkGroup).distinct()
|
||||
if (groups.isEmpty()) {
|
||||
|
||||
@@ -111,9 +111,26 @@ class SvxService : Service(), ReflectorClient.Callbacks {
|
||||
}
|
||||
|
||||
override fun onServerInfo(info: MsgParser.ServerInfo) {
|
||||
synchronized(nodeSet) {
|
||||
nodeSet.clear()
|
||||
nodeSet.addAll(info.nodes)
|
||||
}
|
||||
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) {
|
||||
updateNotification(getString(R.string.notif_talking, callsign))
|
||||
listener?.onTalkerStart(tg, callsign)
|
||||
@@ -124,12 +141,6 @@ class SvxService : Service(), ReflectorClient.Callbacks {
|
||||
listener?.onTalkerStop(tg, callsign)
|
||||
}
|
||||
|
||||
override fun onNodeJoined(callsign: String) {
|
||||
}
|
||||
|
||||
override fun onNodeLeft(callsign: String) {
|
||||
}
|
||||
|
||||
override fun onAudioPacket(packet: ByteArray, seq: Int) {
|
||||
engine.onAudioPacket(packet)
|
||||
}
|
||||
|
||||
@@ -12,8 +12,10 @@
|
||||
<string name="pref_groups">Группы для переключения (через запятую)</string>
|
||||
<string name="select_tg">Выбор группы</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="app_version">SVXhomyak — v1.0.3</string>
|
||||
<string name="app_version">SVXhomyak — v1.0.4</string>
|
||||
<string name="saved">Сохранено</string>
|
||||
<string name="pref_callsign_hint">например UA1ZBE</string>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user