From c66b1859a95e9356e1206105910a3f1bcc442729 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Nov 2022 17:42:47 +0100 Subject: [PATCH] Composer fullscreen toggle --- .../x/features/messages/MessagesScreen.kt | 33 ++++++++++++++----- .../x/features/messages/MessagesViewModel.kt | 13 ++++++++ .../messages/model/MessagesViewState.kt | 7 +--- .../android/x/textcomposer/TextComposer.kt | 6 ++++ 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt index 36974ae22c..5779ec930c 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt @@ -54,6 +54,7 @@ fun MessagesScreen( val roomAvatar by viewModel.collectAsState(MessagesViewState::roomAvatar) val timelineItems by viewModel.collectAsState(MessagesViewState::timelineItems) val hasMoreToLoad by viewModel.collectAsState(MessagesViewState::hasMoreToLoad) + val composerFullScreen by viewModel.collectAsState(MessagesViewState::composerFullScreen) MessagesContent( roomTitle = roomTitle, roomAvatar = roomAvatar, @@ -61,7 +62,9 @@ fun MessagesScreen( hasMoreToLoad = hasMoreToLoad, onReachedLoadMore = viewModel::loadMore, onBackPressed = onBackPressed, - onSendMessage = viewModel::sendMessage + onSendMessage = viewModel::sendMessage, + composerFullScreen = composerFullScreen, + onComposerFullScreenChange = viewModel::onComposerFullScreenChange, ) } @@ -74,6 +77,8 @@ fun MessagesContent( onReachedLoadMore: () -> Unit, onBackPressed: () -> Unit, onSendMessage: (CharSequence) -> Unit, + composerFullScreen: Boolean, + onComposerFullScreenChange: () -> Unit, ) { LogCompositions(tag = "MessagesScreen", msg = "Content") val lazyListState = rememberLazyListState() @@ -112,18 +117,28 @@ fun MessagesContent( .padding(padding) .fillMaxSize() ) { - TimelineItems( - lazyListState = lazyListState, - timelineItems = timelineItems, - hasMoreToLoad = hasMoreToLoad, - onReachedLoadMore = onReachedLoadMore, - modifier = Modifier.weight(1f) - ) + if (!composerFullScreen) { + TimelineItems( + lazyListState = lazyListState, + timelineItems = timelineItems, + hasMoreToLoad = hasMoreToLoad, + onReachedLoadMore = onReachedLoadMore, + modifier = Modifier.weight(1f) + ) + } TextComposer( onSendMessage = onSendMessage, + fullscreen = composerFullScreen, + onFullscreenToggle = onComposerFullScreenChange, modifier = Modifier .fillMaxWidth() - .height(COMPOSER_HEIGHT) + .let { + if (composerFullScreen) { + it.weight(1f) + } else { + it.height(COMPOSER_HEIGHT) + } + }, ) } } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt index 8543e8d0c0..6cc1f7b6da 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt @@ -64,6 +64,19 @@ class MessagesViewModel( viewModelScope.launch { timeline.sendMessage(text.toString()) } + setState { + copy( + composerFullScreen = false + ) + } + } + + fun onComposerFullScreenChange() { + setState { + copy( + composerFullScreen = !composerFullScreen + ) + } } private fun handleInit() { diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt index 72fff2a4c5..8b5fd946e3 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt @@ -4,7 +4,6 @@ import com.airbnb.mvrx.Async import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.Uninitialized import io.element.android.x.designsystem.components.avatar.AvatarData -import io.element.android.x.matrix.timeline.MatrixTimelineItem data class MessagesViewState( val roomId: String, @@ -12,6 +11,7 @@ data class MessagesViewState( val roomAvatar: AvatarData? = null, val timelineItems: Async> = Uninitialized, val hasMoreToLoad: Boolean = true, + val composerFullScreen: Boolean = false, ) : MavericksState { @Suppress("unused") @@ -20,9 +20,4 @@ data class MessagesViewState( roomName = null, roomAvatar = null ) - - - - - } diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt index 4d1ad1839e..e13b09ba74 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt @@ -11,6 +11,8 @@ import io.element.android.x.element.resources.R as ElementR fun TextComposer( onSendMessage: (CharSequence) -> Unit, modifier: Modifier = Modifier, + fullscreen: Boolean, + onFullscreenToggle: () -> Unit, ) { AndroidView( modifier = modifier, @@ -39,10 +41,12 @@ fun TextComposer( } override fun onFullScreenModeChanged() { + onFullscreenToggle() } } val messageComposerView = (this as MessageComposerView) + messageComposerView.toggleFullScreen(fullscreen) setupComposer(messageComposerView) } }, @@ -54,6 +58,8 @@ fun TextComposer( // whenever the state changes // Example of Compose -> View communication val messageComposerView = (view as MessageComposerView) + messageComposerView.toggleFullScreen(fullscreen) + messageComposerView.sendButton.isVisible = true } ) }