Add own live stream shortcut to Android chat header
This commit is contained in:
1 parent
352f5b3f94
commit
7e95c3043b
3 files changed
+22
-3
No files matched your search
@@ -71,8 +71,10 @@ import com.utun.chat.ui.components.GroupAvatar
|
||||
import com.utun.chat.ui.components.GroupPropertiesDialog
|
||||
import com.utun.chat.data.ConversationTarget
|
||||
import com.utun.chat.viewmodel.ChatViewModel
|
||||
import com.utun.chat.data.StreamController
|
||||
import com.utun.chat.data.StreamSource
|
||||
import androidx.compose.material.icons.filled.LiveTv
|
||||
import androidx.compose.material.icons.filled.Videocam
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -103,6 +105,12 @@ fun ChatScreen(
|
||||
var properties by remember(channel.id) { mutableStateOf(false) }
|
||||
var menu by remember(channel.id) { mutableStateOf(false) }
|
||||
val streams by viewModel.streamSources.collectAsState()
|
||||
val publisher by StreamController.state.collectAsState()
|
||||
val ownStream = publisher?.takeIf { it.ongoing && it.group.toULong().toString() == channel.id }
|
||||
LaunchedEffect(channel.id, ownStream?.id, ownStream?.phase) {
|
||||
LogManager.addLog("INFO", "stream", "own stream header channel=${channel.id} publisher=${ownStream?.id} " +
|
||||
"phase=${ownStream?.phase} visible=${ownStream != null}")
|
||||
}
|
||||
var chooseStream by remember(channel.id) { mutableStateOf(false) }
|
||||
if (chooseStream) AlertDialog(
|
||||
onDismissRequest = { chooseStream = false },
|
||||
@@ -186,9 +194,12 @@ fun ChatScreen(
|
||||
) {
|
||||
TopAppBar(
|
||||
title = {
|
||||
Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
GroupAvatar(channel.id, channel.name, size = 32.dp)
|
||||
Text(channel.name, maxLines = 1, overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis)
|
||||
BoxWithConstraints {
|
||||
val showAvatar = maxWidth >= 96.dp
|
||||
Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
if (showAvatar) GroupAvatar(channel.id, channel.name, size = 32.dp)
|
||||
Text(channel.name, maxLines = 1, overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis)
|
||||
}
|
||||
}
|
||||
},
|
||||
navigationIcon = {
|
||||
@@ -200,6 +211,12 @@ fun ChatScreen(
|
||||
Icon(Icons.Filled.LiveTv, stringResource(R.string.stream_available, streams.size), tint = Color(0xFFE53935))
|
||||
}
|
||||
}
|
||||
if (ownStream != null) IconButton(onClick = {
|
||||
LogManager.addLog("INFO", "stream", "own stream header clicked channel=${channel.id} publisher=${ownStream.id}")
|
||||
onStreams()
|
||||
}) {
|
||||
Icon(Icons.Filled.Videocam, stringResource(R.string.stream_manage), tint = Color(0xFFE53935))
|
||||
}
|
||||
IconButton(
|
||||
onClick = { viewModel.toggleRadio() },
|
||||
modifier = Modifier.background(
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
<string name="stream_group_closed">Канал закрыт</string>
|
||||
<string name="stream_start">Начать трансляцию</string>
|
||||
<string name="stream_stop">Остановить трансляцию</string>
|
||||
<string name="stream_manage">Управление своей трансляцией</string>
|
||||
<string name="stream_audio">Звук трансляции</string>
|
||||
<string name="stream_audio_on">Звук трансляции включён</string>
|
||||
<string name="stream_audio_off">Звук трансляции выключен</string>
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
<string name="stream_group_closed">The channel is closed</string>
|
||||
<string name="stream_start">Start stream</string>
|
||||
<string name="stream_stop">Stop stream</string>
|
||||
<string name="stream_manage">Manage your stream</string>
|
||||
<string name="stream_audio">Stream audio</string>
|
||||
<string name="stream_audio_on">Stream audio on</string>
|
||||
<string name="stream_audio_off">Stream audio off</string>
|
||||
|
||||
Reference in new issue
Block a user