Browse Source

Expose the adaptive call video range in Android audio settings

master
evgeny 5 days ago
parent
commit
6980bc7a88
  1. 35
      tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt
  2. 4
      tools/chatgui-android/app/src/main/res/values-ru/strings.xml
  3. 4
      tools/chatgui-android/app/src/main/res/values/strings.xml

35
tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt

@ -1,6 +1,7 @@
package com.utun.chat.ui.screens
import com.utun.chat.R
import kotlin.math.roundToInt
import androidx.compose.ui.res.stringResource
import androidx.compose.foundation.clickable
import androidx.compose.foundation.Canvas
@ -35,6 +36,7 @@ import com.utun.chat.data.RadioOverlayService
import com.utun.chat.data.RadioAudioEngine
import com.utun.chat.data.RadioAutoSettings
import com.utun.chat.data.ConfigProvider
import com.utun.chat.data.CallVideoBitrateRange
import com.utun.chat.data.MicrophonePermission
import com.utun.chat.data.LogManager
import com.utun.chat.data.ServerEntry
@ -903,6 +905,11 @@ private fun AudioSettingsTab(vm: ChatViewModel) {
var presetExpanded by remember { mutableStateOf(false) }
var jitterReserveMs by remember { mutableStateOf(provider.getInt("chat.call_jitter_max_reserve_ms")) }
val savedVideoRange = remember { provider.getCallVideoBitrateRange() }
var videoMinimum by rememberSaveable { mutableIntStateOf(savedVideoRange.minimum) }
var videoMaximum by rememberSaveable { mutableIntStateOf(savedVideoRange.maximum) }
var videoRangeSaving by remember { mutableStateOf(false) }
var videoRangeSaveFailed by remember { mutableStateOf(false) }
/* Все параметры восстанавливаются из одного снимка DataStore. */
var compressorOn by remember { mutableStateOf(savedVoiceSettings.compressorEnabled) }
@ -1035,6 +1042,34 @@ private fun AudioSettingsTab(vm: ChatViewModel) {
}
)
Text(stringResource(R.string.call_video_bitrate_range), style = MaterialTheme.typography.titleMedium)
Text(stringResource(R.string.call_video_bitrate_range_value, videoMinimum, videoMaximum))
Text(stringResource(R.string.call_video_bitrate_range_hint), style = MaterialTheme.typography.bodySmall)
RangeSlider(
value = videoMinimum.toFloat()..videoMaximum.toFloat(),
onValueChange = { videoMinimum = it.start.roundToInt(); videoMaximum = it.endInclusive.roundToInt() },
valueRange = 300f..4000f,
steps = 36,
enabled = !videoRangeSaving,
onValueChangeFinished = {
val range = CallVideoBitrateRange(videoMinimum, videoMaximum)
videoRangeSaving = true
videoRangeSaveFailed = false
vm.viewModelScope.launch {
try {
provider.saveCallVideoBitrateRange(range)
NativeLib.setChatSetting("call_video_bitrate_range_kbps", range.encode())
} catch (e: IOException) {
videoRangeSaveFailed = true
LogManager.addLog("ERROR", "CallSettings", "Video bitrate range save failed: $range: $e")
} finally {
videoRangeSaving = false
}
}
}
)
if (videoRangeSaveFailed) Text(stringResource(R.string.call_video_bitrate_range_save_failed), color = MaterialTheme.colorScheme.error)
/* ── Voice Compressor ── */
Text(stringResource(R.string.voice_compressor), style = MaterialTheme.typography.titleMedium)
Row(verticalAlignment = Alignment.CenterVertically) {

4
tools/chatgui-android/app/src/main/res/values-ru/strings.xml

@ -282,6 +282,10 @@
<string name="test">"Проверить"</string>
<string name="voice_codec_quality">"Качество голосового кодека"</string>
<string name="call_max_jitter_reserve">"Звонки: максимальный запас джиттер-буфера"</string>
<string name="call_video_bitrate_range">Звонки: диапазон битрейта видео</string>
<string name="call_video_bitrate_range_value">%1$d–%2$d кбит/с</string>
<string name="call_video_bitrate_range_hint">Битрейт видео подстраивается под связь в заданном диапазоне. По умолчанию: 300–4000 кбит/с.</string>
<string name="call_video_bitrate_range_save_failed">Не удалось сохранить диапазон битрейта видеозвонка. Попробуйте ещё раз.</string>
<string name="call_jitter_hint">"%1$s с · применяется к следующему звонку"</string>
<string name="voice_compressor">"Голосовой компрессор"</string>
<string name="lookback_time">"Время анализа:"</string>

4
tools/chatgui-android/app/src/main/res/values/strings.xml

@ -283,6 +283,10 @@
<string name="test">"Test"</string>
<string name="voice_codec_quality">"Voice codec quality"</string>
<string name="call_max_jitter_reserve">"Calls: maximum jitter buffer reserve"</string>
<string name="call_video_bitrate_range">Calls: video bitrate range</string>
<string name="call_video_bitrate_range_value">%1$d–%2$d kbit/s</string>
<string name="call_video_bitrate_range_hint">Video bitrate adapts to the connection within this range. Default: 300–4000 kbit/s.</string>
<string name="call_video_bitrate_range_save_failed">Could not save the call video bitrate range. Try again.</string>
<string name="call_jitter_hint">"%1$s s · applies to the next call"</string>
<string name="voice_compressor">"Voice compressor"</string>
<string name="lookback_time">"Lookback time:"</string>

Loading…
Cancel
Save