Browse Source

Connect Android poll screens and localize interaction controls

master
evgeny 6 days ago
parent
commit
1d05ff34c6
  1. 13
      tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt
  2. 18
      tools/chatgui-android/app/src/main/res/values-ru/strings.xml
  3. 18
      tools/chatgui-android/app/src/main/res/values/strings.xml

13
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<String?>(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(

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

@ -363,4 +363,22 @@
<string name="avatar_crop_title">Выбор аватарки</string>
<string name="avatar_crop_hint">Перемещайте и масштабируйте фото, чтобы выбрать квадрат.</string>
<string name="avatar_none">Нет аватарки</string>
<string name="poll_create">Создать опрос</string>
<string name="poll_question">Вопрос</string>
<string name="poll_options_hint">Каждый вариант на отдельной строке</string>
<string name="poll_single">Один вариант</string>
<string name="poll_multiple">Несколько вариантов</string>
<string name="poll_allow_custom">Разрешить свой ответ</string>
<string name="poll_own_answer">Свой ответ</string>
<string name="poll_vote_results">Голосование / результаты</string>
<string name="poll_withdraw">Отменить голос</string>
<string name="poll_save">Сохранить ответ</string>
<string name="poll_voters">Участников: %1$d</string>
<string name="poll_option_result">%1$d голосов · %2$.1f%%</string>
<string name="poll_pending">Загрузка опроса…</string>
<string name="poll_invalid_input">Укажите вопрос и 2–32 разных варианта допустимой длины.</string>
<string name="poll_answer_error">Укажите более короткий непустой ответ.</string>
<string name="poll_react">Реакция</string>
<string name="poll_clear_reactions">Снять все реакции</string>
<string name="poll_interaction_failed">Не удалось сохранить опрос, голос или реакцию. Проверьте введённые данные и повторите.</string>
</resources>

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

@ -361,4 +361,22 @@
<string name="avatar_crop_title">Crop avatar</string>
<string name="avatar_crop_hint">Move and zoom the photo to choose a square.</string>
<string name="avatar_none">No avatar</string>
<string name="poll_create">Create poll</string>
<string name="poll_question">Question</string>
<string name="poll_options_hint">One option per line</string>
<string name="poll_single">Single choice</string>
<string name="poll_multiple">Multiple choices</string>
<string name="poll_allow_custom">Allow a custom answer</string>
<string name="poll_own_answer">Your answer</string>
<string name="poll_vote_results">Vote / results</string>
<string name="poll_withdraw">Withdraw vote</string>
<string name="poll_save">Save answer</string>
<string name="poll_voters">Participants: %1$d</string>
<string name="poll_option_result">%1$d votes · %2$.1f%%</string>
<string name="poll_pending">Loading poll…</string>
<string name="poll_invalid_input">Enter a question and 2–32 distinct options within the size limit.</string>
<string name="poll_answer_error">Enter a shorter nonempty answer.</string>
<string name="poll_react">React</string>
<string name="poll_clear_reactions">Clear reactions</string>
<string name="poll_interaction_failed">Could not save the poll, vote or reaction. Check your input and try again.</string>
</resources>

Loading…
Cancel
Save