Merge branch 'develop' of https://github.com/vector-im/element-x-android-poc into develop
This commit is contained in:
commit
26c12d7bb4
4 changed files with 44 additions and 15 deletions
|
|
@ -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)
|
||||||
|
}
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue