Composer fullscreen toggle

This commit is contained in:
Benoit Marty
2022-11-08 17:42:47 +01:00
parent dca9563762
commit c66b1859a9
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 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)
}
},
)
}
}

View File

@@ -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() {

View File

@@ -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<List<MessagesTimelineItemState>> = Uninitialized,
val hasMoreToLoad: Boolean = true,
val composerFullScreen: Boolean = false,
) : MavericksState {
@Suppress("unused")
@@ -20,9 +20,4 @@ data class MessagesViewState(
roomName = null,
roomAvatar = null
)
}

View File

@@ -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
}
)
}