diff --git a/app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt b/app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt index 92321ce..6817e0f 100644 --- a/app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt +++ b/app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt @@ -42,6 +42,7 @@ class MainActivity : Activity(), SvxService.Listener { companion object { private const val TAG = "SVXRemote" + private const val TALK_LOG_MAX = 15 } private lateinit var statusChip: TextView @@ -66,6 +67,10 @@ class MainActivity : Activity(), SvxService.Listener { private val mainHandler = Handler(Looper.getMainLooper()) private var titleHoldRunnable: Runnable? = null + private data class TalkLogEntry(val time: Long, val callsign: String, val tg: Long) + + private val talkLog = ArrayDeque() + private var connected = false private var monitoring = false private var connectedSettings: ConnectionSettings? = null @@ -136,6 +141,8 @@ class MainActivity : Activity(), SvxService.Listener { lblCallsign.setOnClickListener { showNodesDialog() } + lblTalker.setOnClickListener { showTalkLogDialog() } + // Удержание на названии программы (> 2 с) — выбор профиля настроек lblAppTitle.setOnTouchListener { _, event -> when (event.actionMasked) { @@ -331,6 +338,10 @@ class MainActivity : Activity(), SvxService.Listener { override fun onTalkerStart(tg: Long, callsign: String) { mainHandler.post { + talkLog.addLast(TalkLogEntry(System.currentTimeMillis(), callsign, tg)) + while (talkLog.size > TALK_LOG_MAX) { + talkLog.removeFirst() + } val priority = monitoring && settings.groups.firstOrNull() == tg if (priority) { priorityActive = true @@ -581,6 +592,23 @@ class MainActivity : Activity(), SvxService.Listener { .show() } + /** Лог последних выходов на передачу (до 15, время — позывной — группа). */ + private fun showTalkLogDialog() { + if (talkLog.isEmpty()) { + toast(getString(R.string.talk_log_empty)) + return + } + val fmt = java.text.SimpleDateFormat("HH:mm", java.util.Locale.getDefault()) + val items = talkLog.map { e -> + getString(R.string.talk_log_entry, fmt.format(java.util.Date(e.time)), e.callsign, e.tg) + }.toTypedArray() + AlertDialog.Builder(this) + .setTitle(R.string.talk_log_title) + .setItems(items, null) + .setPositiveButton(R.string.close, null) + .show() + } + private fun showGroupsDialog() { val groups = (settings.groups + settings.talkGroup).distinct() if (groups.isEmpty()) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8db4ebe..68c0867 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -81,6 +81,10 @@ (текущий) не настроен Отмена + Последние передачи + Журнала передач пока нет + %1$s %2$s TG%3$d + Закрыть Настройки не заданы Нет связи