Add descriptive headers to camera option menus
This commit is contained in:
1 parent
93da173987
commit
217a4bb27b
4 files changed
+18
No files matched your search
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -167,6 +167,8 @@
|
||||
<string name="photo">"Фото"</string>
|
||||
<string name="capture_video">Видео</string>
|
||||
<string name="capture_jpeg_quality">Качество JPEG: %1$d</string>
|
||||
<string name="capture_jpeg_quality_title">Качество JPEG</string>
|
||||
<string name="capture_bitrate_title">Битрейт видео</string>
|
||||
<string name="capture_failed">Не удалось выполнить съёмку. Попробуйте ещё раз.</string>
|
||||
<string name="image_failed">Не удалось прочитать изображение</string>
|
||||
<string name="camera_light">"Подсветка"</string>
|
||||
|
||||
@@ -168,6 +168,8 @@
|
||||
<string name="photo">"Photo"</string>
|
||||
<string name="capture_video">Video</string>
|
||||
<string name="capture_jpeg_quality">JPEG quality: %1$d</string>
|
||||
<string name="capture_jpeg_quality_title">JPEG quality</string>
|
||||
<string name="capture_bitrate_title">Video bitrate</string>
|
||||
<string name="capture_failed">Could not capture media. Try again.</string>
|
||||
<string name="image_failed">Could not read image</string>
|
||||
<string name="camera_light">"Fill light"</string>
|
||||
|
||||
Reference in new issue
Block a user