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 bb8bfae6..6a86e4a3 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
@@ -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(
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 3056823e..1597a647 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
@@ -62,6 +62,7 @@
Канал закрыт
Начать трансляцию
Остановить трансляцию
+ Управление своей трансляцией
Звук трансляции
Звук трансляции включён
Звук трансляции выключен
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 63ebcf8d..f0c15dd7 100644
--- a/tools/chatgui-android/app/src/main/res/values/strings.xml
+++ b/tools/chatgui-android/app/src/main/res/values/strings.xml
@@ -62,6 +62,7 @@
The channel is closed
Start stream
Stop stream
+ Manage your stream
Stream audio
Stream audio on
Stream audio off