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