diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CameraRecordScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CameraRecordScreen.kt
index 6c1b9020..729b1739 100644
--- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CameraRecordScreen.kt
+++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CameraRecordScreen.kt
@@ -367,6 +367,7 @@ fun CameraRecordScreen(initialMode: CaptureMode, onSend: (String, CaptureMode) -
CaptureValueIcon(CaptureIconShape.CAMERA, focal, front = lens?.type == LensType.SELFIE)
}
DropdownMenu(expanded = menu == CameraOption.CAMERA, onDismissRequest = { menu = null }) {
+ CaptureMenuHeader(stringResource(R.string.camera))
lenses.forEach { item ->
CaptureOptionItem("${item.label} ${item.mm}".trim(), lens == item, onClick = {
menu = null; lens = item
@@ -382,6 +383,7 @@ fun CameraRecordScreen(initialMode: CaptureMode, onSend: (String, CaptureMode) -
CaptureValueIcon(CaptureIconShape.CHIP, codec.name)
}
DropdownMenu(expanded = menu == CameraOption.CODEC, onDismissRequest = { menu = null }) {
+ CaptureMenuHeader(stringResource(R.string.call_video_codec))
videoOptions?.forEach { (item, supported) ->
CaptureOptionItem(item.label, codec == item, onClick = {
menu = null; codec = item
@@ -405,6 +407,7 @@ fun CameraRecordScreen(initialMode: CaptureMode, onSend: (String, CaptureMode) -
CaptureValueIcon(CaptureIconShape.SCREEN, value)
}
DropdownMenu(expanded = menu == CameraOption.RESOLUTION, onDismissRequest = { menu = null }) {
+ CaptureMenuHeader(stringResource(R.string.call_video_resolution))
if (mode == CaptureMode.PHOTO) resolutions.forEach { item ->
CaptureOptionItem(item.label, resolution == item, onClick = {
menu = null; resolution = item
@@ -426,6 +429,7 @@ fun CameraRecordScreen(initialMode: CaptureMode, onSend: (String, CaptureMode) -
CaptureValueIcon(CaptureIconShape.GAUGE, captureBitrateLabel(bitrate))
}
DropdownMenu(expanded = menu == CameraOption.BITRATE, onDismissRequest = { menu = null }) {
+ CaptureMenuHeader(stringResource(R.string.capture_bitrate_title))
VIDEO_BITRATES.forEach { item ->
CaptureOptionItem(stringResource(R.string.stream_bitrate_value, item / 1_000_000.0), bitrate == item,
onClick = {
@@ -440,6 +444,7 @@ fun CameraRecordScreen(initialMode: CaptureMode, onSend: (String, CaptureMode) -
CaptureValueIcon(CaptureIconShape.GAUGE, jpegQuality.toString(), detail = "JPEG")
}
DropdownMenu(expanded = menu == CameraOption.JPEG_QUALITY, onDismissRequest = { menu = null }) {
+ CaptureMenuHeader(stringResource(R.string.capture_jpeg_quality_title))
JPEG_QUALITIES.forEach { item ->
CaptureOptionItem(item.toString(), jpegQuality == item, onClick = {
menu = null; jpegQuality = item
diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CaptureControls.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CaptureControls.kt
index e1ae09c5..26225e13 100644
--- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CaptureControls.kt
+++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/CaptureControls.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.selected
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.font.FontWeight
@@ -137,6 +138,14 @@ internal fun CaptureValueIcon(shape: CaptureIconShape, value: String, detail: St
}
}
+/** Название параметра над вариантами меню; заголовок не является действием. */
+@Composable
+internal fun CaptureMenuHeader(title: String) {
+ Text(title, Modifier.fillMaxWidth().padding(horizontal = 16.dp, vertical = 8.dp).semantics { heading() },
+ style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.onSurfaceVariant)
+ HorizontalDivider()
+}
+
/** Текущее значение отмечено галочкой и доступно средствам чтения экрана. */
@Composable
internal fun CaptureOptionItem(label: String, active: Boolean, onClick: () -> Unit, icon: @Composable (() -> Unit)? = null) {
diff --git a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
index c3ffcadc..7620948b 100644
--- a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
+++ b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
@@ -167,6 +167,8 @@
"Фото"
Видео
Качество JPEG: %1$d
+ Качество JPEG
+ Битрейт видео
Не удалось выполнить съёмку. Попробуйте ещё раз.
Не удалось прочитать изображение
"Подсветка"
diff --git a/tools/chatgui-android/app/src/main/res/values/strings.xml b/tools/chatgui-android/app/src/main/res/values/strings.xml
index 9fc4251c..e5659a82 100644
--- a/tools/chatgui-android/app/src/main/res/values/strings.xml
+++ b/tools/chatgui-android/app/src/main/res/values/strings.xml
@@ -168,6 +168,8 @@
"Photo"
Video
JPEG quality: %1$d
+ JPEG quality
+ Video bitrate
Could not capture media. Try again.
Could not read image
"Fill light"