Browse Source

Open live streams from Android channel navigation

stream-multiview
evgeny 1 week ago
parent
commit
d4ca812578
  1. 13
      tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt
  2. 4
      tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt

13
tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt

@ -71,7 +71,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.flow.collect
class MainActivity : AppCompatActivity() {
enum class Screen { ChannelList, Chat, MemberList, Files, Settings, Logs, VideoRecord, PhotoRecord, Call, Dm }
enum class Screen { ChannelList, Chat, MemberList, Files, Settings, Logs, VideoRecord, PhotoRecord, Call, Dm, Streams }
private var overLock = false
private var inputScreen = "setup"
@ -244,7 +244,7 @@ class MainActivity : AppCompatActivity() {
inputScreen = screen.name
LogManager.addLog("INFO", "MAIN", "UI screen=$screen")
val unavailable = when (screen) {
Screen.Chat, Screen.MemberList, Screen.Files, Screen.PhotoRecord -> vm.currentChannel.value == null
Screen.Chat, Screen.MemberList, Screen.Files, Screen.PhotoRecord, Screen.Streams -> vm.currentChannel.value == null
Screen.Dm -> vm.currentDm.value == null
Screen.VideoRecord -> videoTarget == null
Screen.Call -> callState == null
@ -313,6 +313,7 @@ class MainActivity : AppCompatActivity() {
Screen.MemberList -> screen = Screen.Chat
Screen.VideoRecord -> screen = if (videoTarget is ConversationTarget.Pm) Screen.Dm else Screen.Chat
Screen.PhotoRecord -> screen = Screen.Chat
Screen.Streams -> screen = Screen.Chat
Screen.Chat -> screen = Screen.ChannelList
Screen.Dm -> { vm.closeDm(); screen = Screen.ChannelList }
Screen.Call -> screen = screenBeforeCall ?: Screen.ChannelList
@ -393,19 +394,27 @@ class MainActivity : AppCompatActivity() {
},
onInvite = { showInvite(channel) },
onBack = { screen = Screen.ChannelList },
onStreams = { screen = Screen.Streams },
onPlayVideo = { msg -> videoMessage = msg },
onViewPhoto = { msg -> photoMessage = msg },
onRecordVideo = {
if (com.utun.chat.data.StreamController.blocksCapture()) return@ChatScreen
val target = ConversationTarget.Channel(channel.id)
videoTargetId = target.nativeId; vm.captureCameraReply(target); screen = Screen.VideoRecord
},
onCapturePhoto = {
if (com.utun.chat.data.StreamController.blocksCapture()) return@ChatScreen
photoTargetId = channel.id
vm.captureCameraReply(ConversationTarget.Channel(channel.id)); screen = Screen.PhotoRecord
}
)
}
}
Screen.Streams -> {
vm.currentChannel.collectAsState().value?.let { channel ->
StreamScreen(channel.id, channel.name) { screen = Screen.Chat }
}
}
Screen.MemberList -> {
val members by vm.members.collectAsState()
val selectedMember by vm.selectedMember.collectAsState()

4
tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt

@ -88,7 +88,8 @@ fun ChatScreen(
onPlayVideo: (Message) -> Unit = {},
onViewPhoto: (Message) -> Unit = {},
onRecordVideo: () -> Unit = {},
onCapturePhoto: () -> Unit = {}
onCapturePhoto: () -> Unit = {},
onStreams: () -> Unit = {}
) {
val listState = rememberLazyListState()
val context = LocalContext.current
@ -184,6 +185,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.stream_title)) }, onClick = { menu = false; onStreams() })
DropdownMenuItem(text = { Text(stringResource(R.string.files_title)) },
onClick = { menu = false; onFiles(0) })
DropdownMenuItem(text = { Text(stringResource(R.string.files_mine)) },

Loading…
Cancel
Save