This commit is contained in:
ganfra 2022-11-08 19:41:03 +01:00
commit 26c12d7bb4
4 changed files with 44 additions and 15 deletions

View file

@ -54,6 +54,7 @@ fun MessagesScreen(
val roomAvatar by viewModel.collectAsState(MessagesViewState::roomAvatar) val roomAvatar by viewModel.collectAsState(MessagesViewState::roomAvatar)
val timelineItems by viewModel.collectAsState(MessagesViewState::timelineItems) val timelineItems by viewModel.collectAsState(MessagesViewState::timelineItems)
val hasMoreToLoad by viewModel.collectAsState(MessagesViewState::hasMoreToLoad) val hasMoreToLoad by viewModel.collectAsState(MessagesViewState::hasMoreToLoad)
val composerFullScreen by viewModel.collectAsState(MessagesViewState::composerFullScreen)
MessagesContent( MessagesContent(
roomTitle = roomTitle, roomTitle = roomTitle,
roomAvatar = roomAvatar, roomAvatar = roomAvatar,
@ -61,7 +62,9 @@ fun MessagesScreen(
hasMoreToLoad = hasMoreToLoad, hasMoreToLoad = hasMoreToLoad,
onReachedLoadMore = viewModel::loadMore, onReachedLoadMore = viewModel::loadMore,
onBackPressed = onBackPressed, onBackPressed = onBackPressed,
onSendMessage = viewModel::sendMessage onSendMessage = viewModel::sendMessage,
composerFullScreen = composerFullScreen,
onComposerFullScreenChange = viewModel::onComposerFullScreenChange,
) )
} }
@ -74,6 +77,8 @@ fun MessagesContent(
onReachedLoadMore: () -> Unit, onReachedLoadMore: () -> Unit,
onBackPressed: () -> Unit, onBackPressed: () -> Unit,
onSendMessage: (CharSequence) -> Unit, onSendMessage: (CharSequence) -> Unit,
composerFullScreen: Boolean,
onComposerFullScreenChange: () -> Unit,
) { ) {
LogCompositions(tag = "MessagesScreen", msg = "Content") LogCompositions(tag = "MessagesScreen", msg = "Content")
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
@ -112,18 +117,28 @@ fun MessagesContent(
.padding(padding) .padding(padding)
.fillMaxSize() .fillMaxSize()
) { ) {
TimelineItems( if (!composerFullScreen) {
lazyListState = lazyListState, TimelineItems(
timelineItems = timelineItems, lazyListState = lazyListState,
hasMoreToLoad = hasMoreToLoad, timelineItems = timelineItems,
onReachedLoadMore = onReachedLoadMore, hasMoreToLoad = hasMoreToLoad,
modifier = Modifier.weight(1f) onReachedLoadMore = onReachedLoadMore,
) modifier = Modifier.weight(1f)
)
}
TextComposer( TextComposer(
onSendMessage = onSendMessage, onSendMessage = onSendMessage,
fullscreen = composerFullScreen,
onFullscreenToggle = onComposerFullScreenChange,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(COMPOSER_HEIGHT) .let {
if (composerFullScreen) {
it.weight(1f)
} else {
it.height(COMPOSER_HEIGHT)
}
},
) )
} }
} }

View file

@ -64,6 +64,19 @@ class MessagesViewModel(
viewModelScope.launch { viewModelScope.launch {
timeline.sendMessage(text.toString()) timeline.sendMessage(text.toString())
} }
setState {
copy(
composerFullScreen = false
)
}
}
fun onComposerFullScreenChange() {
setState {
copy(
composerFullScreen = !composerFullScreen
)
}
} }
private fun handleInit() { private fun handleInit() {

View file

@ -4,7 +4,6 @@ import com.airbnb.mvrx.Async
import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.MavericksState
import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.Uninitialized
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.x.designsystem.components.avatar.AvatarData
import io.element.android.x.matrix.timeline.MatrixTimelineItem
data class MessagesViewState( data class MessagesViewState(
val roomId: String, val roomId: String,
@ -12,6 +11,7 @@ data class MessagesViewState(
val roomAvatar: AvatarData? = null, val roomAvatar: AvatarData? = null,
val timelineItems: Async<List<MessagesTimelineItemState>> = Uninitialized, val timelineItems: Async<List<MessagesTimelineItemState>> = Uninitialized,
val hasMoreToLoad: Boolean = true, val hasMoreToLoad: Boolean = true,
val composerFullScreen: Boolean = false,
) : MavericksState { ) : MavericksState {
@Suppress("unused") @Suppress("unused")
@ -20,9 +20,4 @@ data class MessagesViewState(
roomName = null, roomName = null,
roomAvatar = null roomAvatar = null
) )
} }

View file

@ -11,6 +11,8 @@ import io.element.android.x.element.resources.R as ElementR
fun TextComposer( fun TextComposer(
onSendMessage: (CharSequence) -> Unit, onSendMessage: (CharSequence) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
fullscreen: Boolean,
onFullscreenToggle: () -> Unit,
) { ) {
AndroidView( AndroidView(
modifier = modifier, modifier = modifier,
@ -39,10 +41,12 @@ fun TextComposer(
} }
override fun onFullScreenModeChanged() { override fun onFullScreenModeChanged() {
onFullscreenToggle()
} }
} }
val messageComposerView = (this as MessageComposerView) val messageComposerView = (this as MessageComposerView)
messageComposerView.toggleFullScreen(fullscreen)
setupComposer(messageComposerView) setupComposer(messageComposerView)
} }
}, },
@ -54,6 +58,8 @@ fun TextComposer(
// whenever the state changes // whenever the state changes
// Example of Compose -> View communication // Example of Compose -> View communication
val messageComposerView = (view as MessageComposerView) val messageComposerView = (view as MessageComposerView)
messageComposerView.toggleFullScreen(fullscreen)
messageComposerView.sendButton.isVisible = true
} }
) )
} }