diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt index 5fdd693a..75d67a0a 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.drawscope.Stroke @@ -51,6 +52,7 @@ import com.utun.chat.data.Message import com.utun.chat.data.RadioAudioEngine import com.utun.chat.data.RadioOverlayService import com.utun.chat.ui.components.ConversationMessages +import com.utun.chat.ui.components.CreatePollDialog import com.utun.chat.ui.components.ConversationComposer import com.utun.chat.ui.components.PortableRadioIcon import com.utun.chat.ui.components.GroupAvatar @@ -92,6 +94,13 @@ fun ChatScreen( /* звук сообщений канала */ val soundOn by viewModel.soundOn.collectAsState() + val reactionCatalog by viewModel.reactionCatalog.collectAsState() + val interactionFailed by viewModel.interactionFailed.collectAsState() + var createPoll by rememberSaveable { mutableStateOf(false) } + if (createPoll) CreatePollDialog({ createPoll = false }, viewModel::createPoll) + if (interactionFailed) AlertDialog(onDismissRequest = viewModel::dismissInteractionError, + text = { Text(stringResource(R.string.poll_interaction_failed)) }, + confirmButton = { TextButton(onClick = viewModel::dismissInteractionError) { Text(stringResource(R.string.close)) } }) /* save dialog for downloaded files */ var pendingSaveFilePath by remember { mutableStateOf(null) } @@ -143,6 +152,7 @@ fun ChatScreen( Box { IconButton(onClick = { menu = true }) { Icon(Icons.Filled.MoreVert, stringResource(R.string.options)) } DropdownMenu(expanded = menu, onDismissRequest = { menu = false }) { + DropdownMenuItem(text = { Text(stringResource(R.string.poll_create)) }, onClick = { menu = false; createPoll = true }) DropdownMenuItem(text = { Text(stringResource(R.string.invite)) }, leadingIcon = { Icon(Icons.Filled.Link, null) }, onClick = { menu = false; onInvite() }) DropdownMenuItem(text = { Text(stringResource(R.string.sound)) }, @@ -185,7 +195,8 @@ fun ChatScreen( onSeekVoice = { path, position, duration -> viewModel.seekVoice(path, position, duration) }, onDownloadFile = { viewModel.downloadAttachment(it) }, onOpenFile = { if (it.filePath.isNotEmpty()) { pendingSaveFilePath = it.filePath; saveFileLauncher.launch(it.text) } }, - onOpenImage = onViewPhoto, onPlayVideo = onPlayVideo, onInviteLink = viewModel::openInviteLink + onOpenImage = onViewPhoto, onPlayVideo = onPlayVideo, onInviteLink = viewModel::openInviteLink, + reactionCatalog = reactionCatalog, onVote = viewModel::vote, onReact = viewModel::react, authorName = viewModel::radioName ) if (radioActive && !overlayShown) { RadioPttButton( 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 34648990..a77fb13b 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 @@ -363,4 +363,22 @@ Выбор аватарки Перемещайте и масштабируйте фото, чтобы выбрать квадрат. Нет аватарки + Создать опрос + Вопрос + Каждый вариант на отдельной строке + Один вариант + Несколько вариантов + Разрешить свой ответ + Свой ответ + Голосование / результаты + Отменить голос + Сохранить ответ + Участников: %1$d + %1$d голосов · %2$.1f%% + Загрузка опроса… + Укажите вопрос и 2–32 разных варианта допустимой длины. + Укажите более короткий непустой ответ. + Реакция + Снять все реакции + Не удалось сохранить опрос, голос или реакцию. Проверьте введённые данные и повторите. 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 bd469ebd..2d722b0f 100644 --- a/tools/chatgui-android/app/src/main/res/values/strings.xml +++ b/tools/chatgui-android/app/src/main/res/values/strings.xml @@ -361,4 +361,22 @@ Crop avatar Move and zoom the photo to choose a square. No avatar + Create poll + Question + One option per line + Single choice + Multiple choices + Allow a custom answer + Your answer + Vote / results + Withdraw vote + Save answer + Participants: %1$d + %1$d votes · %2$.1f%% + Loading poll… + Enter a question and 2–32 distinct options within the size limit. + Enter a shorter nonempty answer. + React + Clear reactions + Could not save the poll, vote or reaction. Check your input and try again.