Browse Source

Messages: update how textcomposer is composed

feature/bma/flipper
ganfra 2 years ago
parent
commit
f85e522842
  1. 78
      features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt
  2. 8
      libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt

78
features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt

@ -109,7 +109,7 @@ fun MessagesContent( @@ -109,7 +109,7 @@ fun MessagesContent(
)
},
content = { padding ->
Box(
Column(
modifier = Modifier
.padding(padding)
.fillMaxSize()
@ -119,38 +119,37 @@ fun MessagesContent( @@ -119,38 +119,37 @@ fun MessagesContent(
timelineItems = timelineItems,
hasMoreToLoad = hasMoreToLoad,
onReachedLoadMore = onReachedLoadMore,
modifier = Modifier.weight(1f)
)
Box(
modifier = Modifier.align(Alignment.BottomCenter)
) {
TextComposer(
callback = object : Callback {
override fun onRichContentSelected(contentUri: Uri): Boolean {
return false
}
TextComposer(
callback = object : Callback {
override fun onRichContentSelected(contentUri: Uri): Boolean {
return false
}
override fun onTextChanged(text: CharSequence) {
}
override fun onTextChanged(text: CharSequence) {
}
override fun onCloseRelatedMessage() {
}
override fun onCloseRelatedMessage() {
}
override fun onSendMessage(text: CharSequence) {
onSendMessage.invoke(text)
}
override fun onSendMessage(text: CharSequence) {
onSendMessage.invoke(text)
}
override fun onAddAttachment() {
}
override fun onAddAttachment() {
}
override fun onExpandOrCompactChange() {
}
override fun onExpandOrCompactChange() {
}
override fun onFullScreenModeChanged() {
}
},
height = COMPOSER_HEIGHT
)
}
override fun onFullScreenModeChanged() {
}
},
modifier = Modifier
.fillMaxWidth()
.height(COMPOSER_HEIGHT)
)
}
}
)
@ -162,19 +161,15 @@ fun TimelineItems( @@ -162,19 +161,15 @@ fun TimelineItems(
timelineItems: List<MessagesTimelineItemState>,
hasMoreToLoad: Boolean,
onReachedLoadMore: () -> Unit,
modifier: Modifier = Modifier,
) {
LazyColumn(
modifier = Modifier
.padding(bottom = COMPOSER_HEIGHT)
.fillMaxSize(),
modifier = modifier.fillMaxWidth(),
state = lazyListState,
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.Bottom,
reverseLayout = true
) {
item {
Spacer(modifier = Modifier.height(8.dp))
}
itemsIndexed(timelineItems) { index, timelineItem ->
TimelineItemRow(timelineItem = timelineItem)
}
@ -267,7 +262,6 @@ fun MessageEventBubble( @@ -267,7 +262,6 @@ fun MessageEventBubble(
messageEvent: MessagesTimelineItemState.MessageEvent,
modifier: Modifier = Modifier,
) {
fun MessagesTimelineItemState.MessageEvent.bubbleShape(): Shape {
return when (groupPosition) {
MessagesItemGroupPosition.First -> if (isMine) {
@ -295,6 +289,14 @@ fun MessageEventBubble( @@ -295,6 +289,14 @@ fun MessageEventBubble(
}
}
fun Modifier.offsetForItem(messageEvent: MessagesTimelineItemState.MessageEvent): Modifier {
return if (messageEvent.isMine) {
offset(y = -(12.dp))
} else {
offset(x = 20.dp, y = -(12.dp))
}
}
val (backgroundBubbleColor, border) = if (messageEvent.isMine) {
Pair(MaterialTheme.colorScheme.surfaceVariant, null)
} else {
@ -304,15 +306,7 @@ fun MessageEventBubble( @@ -304,15 +306,7 @@ fun MessageEventBubble(
)
}
fun Modifier.offsetForItem(messageEvent: MessagesTimelineItemState.MessageEvent): Modifier {
return if (messageEvent.isMine) {
offset(y = -(12.dp))
} else {
offset(x = 20.dp, y = -(12.dp))
}
}
val bubbleShape = remember { messageEvent.bubbleShape() }
val bubbleShape = messageEvent.bubbleShape()
Surface(
modifier = modifier
.widthIn(min = 80.dp)

8
libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt

@ -1,9 +1,7 @@ @@ -1,9 +1,7 @@
package io.element.android.x.textcomposer
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.isVisible
import io.element.android.x.element.resources.R as ElementR
@ -11,12 +9,10 @@ import io.element.android.x.element.resources.R as ElementR @@ -11,12 +9,10 @@ import io.element.android.x.element.resources.R as ElementR
@Composable
fun TextComposer(
callback: Callback,
height: Dp,
modifier: Modifier = Modifier,
){
AndroidView(
modifier = Modifier
.fillMaxWidth()
.height(height),
modifier = modifier,
factory = { context ->
RichTextComposerLayout(context).apply {
// Sets up listeners for View -> Compose communication

Loading…
Cancel
Save