1.0.12: UI — убрана HOLD TO TALK, PTT крупнее, строка говорящего между блоками

- Удалена надпись HOLD TO TALK (lbl_ptt_hint).
- PTT-кнопка увеличена 130→170 dp.
- Строка говорящего перенесена между блоками «на связи» и
  индикаторами; единый формат: «Говорит UA1ZBE TG12» при приёме,
  «UA1ZBE TG12» когда приёма нет (шрифт прежний).
This commit is contained in:
ua1zbe
2026-08-21 11:54:44 +03:00
parent 587d46578e
commit f23d8e35bb
3 changed files with 37 additions and 49 deletions

View File

@@ -57,10 +57,10 @@ class MainActivity : Activity(), SvxService.Listener {
private lateinit var lblSubtitle: TextView private lateinit var lblSubtitle: TextView
private lateinit var lblCallsign: TextView private lateinit var lblCallsign: TextView
private lateinit var lblTg: TextView private lateinit var lblTg: TextView
private lateinit var lblTalkerTitle: TextView
private lateinit var lblTalker: TextView private lateinit var lblTalker: TextView
private lateinit var lblDuplex: TextView private lateinit var lblDuplex: TextView
private lateinit var lblPttHint: TextView private var lastTalkerCs = ""
private var lastTalkerTg = -1L
private lateinit var lblTxState: TextView private lateinit var lblTxState: TextView
private lateinit var lblConnectHint: TextView private lateinit var lblConnectHint: TextView
private lateinit var connectZone: View private lateinit var connectZone: View
@@ -147,10 +147,8 @@ class MainActivity : Activity(), SvxService.Listener {
statusChip = findViewById(R.id.status_chip) statusChip = findViewById(R.id.status_chip)
lblAppTitle = findViewById(R.id.lbl_app_title) lblAppTitle = findViewById(R.id.lbl_app_title)
lblSubtitle = findViewById(R.id.lbl_subtitle) lblSubtitle = findViewById(R.id.lbl_subtitle)
lblTalkerTitle = findViewById(R.id.lbl_talker_title)
lblTalker = findViewById(R.id.lbl_talker) lblTalker = findViewById(R.id.lbl_talker)
lblDuplex = findViewById(R.id.lbl_duplex) lblDuplex = findViewById(R.id.lbl_duplex)
lblPttHint = findViewById(R.id.lbl_ptt_hint)
lblTxState = findViewById(R.id.lbl_tx_state) lblTxState = findViewById(R.id.lbl_tx_state)
lblConnectHint = findViewById(R.id.lbl_connect_hint) lblConnectHint = findViewById(R.id.lbl_connect_hint)
connectZone = findViewById(R.id.connect_zone) connectZone = findViewById(R.id.connect_zone)
@@ -274,7 +272,6 @@ class MainActivity : Activity(), SvxService.Listener {
toast(getString(R.string.perm_mic)) toast(getString(R.string.perm_mic))
return return
} }
lblPttHint.text = getString(R.string.ptt_talking)
lblTxState.text = getString(R.string.status_big_talking) lblTxState.text = getString(R.string.status_big_talking)
showDuplex(getString(R.string.duplex_tx), R.color.danger, null) showDuplex(getString(R.string.duplex_tx), R.color.danger, null)
svc?.startTx() svc?.startTx()
@@ -283,7 +280,6 @@ class MainActivity : Activity(), SvxService.Listener {
override fun onPttUp() { override fun onPttUp() {
Log.d("SVXRemote", "PTT up") Log.d("SVXRemote", "PTT up")
svc?.stopTx() svc?.stopTx()
lblPttHint.text = getString(R.string.hold_to_talk)
lblTxState.text = lblTxState.text =
if (connected) getString(R.string.status_big_connected) if (connected) getString(R.string.status_big_connected)
else getString(R.string.status_big_disconnected) else getString(R.string.status_big_disconnected)
@@ -376,7 +372,6 @@ class MainActivity : Activity(), SvxService.Listener {
lblTxState.text = getString(R.string.status_big_disconnected) lblTxState.text = getString(R.string.status_big_disconnected)
lblTxState.setTextColor(getColor(R.color.danger)) lblTxState.setTextColor(getColor(R.color.danger))
lblConnectHint.text = getString(R.string.hint_connect) lblConnectHint.text = getString(R.string.hint_connect)
lblPttHint.text = getString(R.string.hold_to_talk)
} }
ReflectorClient.STATE_CONNECTING, ReflectorClient.STATE_CONNECTING,
@@ -454,9 +449,9 @@ class MainActivity : Activity(), SvxService.Listener {
} }
resetMonitorIdle() resetMonitorIdle()
} }
lblTalkerTitle.text = getString(R.string.talker_now, tg) lastTalkerCs = callsign
lblTalkerTitle.setTextColor(getColor(R.color.text_secondary)) lastTalkerTg = tg
lblTalker.text = callsign updateTalkerLine(active = true)
if (!pttButton.isPressed2) { if (!pttButton.isPressed2) {
showDuplex(getString(R.string.duplex_rx), R.color.accent, DUPLEX_RX_HIDE_MS) showDuplex(getString(R.string.duplex_rx), R.color.accent, DUPLEX_RX_HIDE_MS)
} }
@@ -464,7 +459,20 @@ class MainActivity : Activity(), SvxService.Listener {
} }
override fun onTalkerStop(tg: Long, callsign: String) { override fun onTalkerStop(tg: Long, callsign: String) {
// последний говоривший остаётся на экране // последний говоривший остаётся на экране, но без префикса «Говорит»
mainHandler.post { updateTalkerLine(active = false) }
}
/** Единая строка говорящего: «Говорит …» при приёме, иначе позывной+TG. */
private fun updateTalkerLine(active: Boolean) {
if (lastTalkerCs.isEmpty()) {
lblTalker.text = ""
return
}
lblTalker.text = if (active)
getString(R.string.talker_active_fmt, lastTalkerCs, lastTalkerTg)
else
getString(R.string.talker_idle_fmt, lastTalkerCs, lastTalkerTg)
} }
override fun onNodeJoined(callsign: String, tg: Long?) { override fun onNodeJoined(callsign: String, tg: Long?) {

View File

@@ -154,11 +154,24 @@
android:text="@string/status_disconnected" /> android:text="@string/status_disconnected" />
</LinearLayout> </LinearLayout>
<!-- Говорящий (единая строка): «Говорит …» при приёме, иначе позывной+TG -->
<TextView
android:id="@+id/lbl_talker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="center"
android:textColor="@color/accent"
android:textSize="22sp"
android:textStyle="bold"
android:singleLine="true"
android:ellipsize="end" />
<!-- S-метры --> <!-- S-метры -->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="28dp" android:layout_marginTop="16dp"
android:orientation="vertical" android:orientation="vertical"
android:background="@drawable/bg_section" android:background="@drawable/bg_section"
android:paddingStart="14dp" android:paddingStart="14dp"
@@ -223,28 +236,6 @@
android:visibility="gone" /> android:visibility="gone" />
</LinearLayout> </LinearLayout>
<!-- Последний говоривший -->
<TextView
android:id="@+id/lbl_talker_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center"
android:textColor="@color/text_secondary"
android:textSize="13sp"
android:text="@string/talker_last_none" />
<TextView
android:id="@+id/lbl_talker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/accent"
android:textSize="22sp"
android:textStyle="bold"
android:singleLine="true"
android:ellipsize="end" />
<!-- Индикация направления: RX (приём) / TX (передача) --> <!-- Индикация направления: RX (приём) / TX (передача) -->
<TextView <TextView
android:id="@+id/lbl_duplex" android:id="@+id/lbl_duplex"
@@ -264,19 +255,8 @@
<!-- Кнопка PTT --> <!-- Кнопка PTT -->
<ru.ua1zbe.svxremote.ui.PttButton <ru.ua1zbe.svxremote.ui.PttButton
android:id="@+id/ptt_button" android:id="@+id/ptt_button"
android:layout_width="130dp" android:layout_width="170dp"
android:layout_height="130dp" /> android:layout_height="170dp" />
<TextView
android:id="@+id/lbl_ptt_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="center"
android:textColor="@color/text_secondary"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/hold_to_talk" />
<Space <Space
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -55,7 +55,8 @@
<string name="record_delete_yes">Удалить</string> <string name="record_delete_yes">Удалить</string>
<string name="record_deleted">Удалено</string> <string name="record_deleted">Удалено</string>
<string name="status_monitoring">Мониторинг: %1$s</string> <string name="status_monitoring">Мониторинг: %1$s</string>
<string name="talker_now">Говорит TG%1$d</string> <string name="talker_active_fmt">Говорит %1$s TG%2$d</string>
<string name="talker_idle_fmt">%1$s TG%2$d</string>
<string name="duplex_rx">RX</string> <string name="duplex_rx">RX</string>
<string name="duplex_tx">TX</string> <string name="duplex_tx">TX</string>
<string name="status_big_disconnected">DISCONNECTED</string> <string name="status_big_disconnected">DISCONNECTED</string>
@@ -63,7 +64,6 @@
<string name="status_big_talking">ПЕРЕДАЧА</string> <string name="status_big_talking">ПЕРЕДАЧА</string>
<string name="hint_connect">Нажмите, чтобы подключиться</string> <string name="hint_connect">Нажмите, чтобы подключиться</string>
<string name="hint_disconnect">Нажмите, чтобы отключиться</string> <string name="hint_disconnect">Нажмите, чтобы отключиться</string>
<string name="hold_to_talk">HOLD TO TALK</string>
<string name="meter_rx">RX</string> <string name="meter_rx">RX</string>
<string name="meter_mic">MIC</string> <string name="meter_mic">MIC</string>
<string name="meter_idle">---</string> <string name="meter_idle">---</string>