Composer: avoid passing interface Callback as it will force recomposition

This commit is contained in:
ganfra 2022-11-08 17:17:32 +01:00
parent f85e522842
commit 7ca1f90512
3 changed files with 30 additions and 29 deletions

View file

@ -3,7 +3,6 @@
package io.element.android.x.features.messages
import Avatar
import android.net.Uri
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
@ -39,7 +38,6 @@ import io.element.android.x.designsystem.components.avatar.AvatarData
import io.element.android.x.features.messages.model.MessagesItemGroupPosition
import io.element.android.x.features.messages.model.MessagesTimelineItemState
import io.element.android.x.features.messages.model.MessagesViewState
import io.element.android.x.textcomposer.Callback
import io.element.android.x.textcomposer.TextComposer
private val BUBBLE_RADIUS = 16.dp
@ -122,30 +120,7 @@ fun MessagesContent(
modifier = Modifier.weight(1f)
)
TextComposer(
callback = object : Callback {
override fun onRichContentSelected(contentUri: Uri): Boolean {
return false
}
override fun onTextChanged(text: CharSequence) {
}
override fun onCloseRelatedMessage() {
}
override fun onSendMessage(text: CharSequence) {
onSendMessage.invoke(text)
}
override fun onAddAttachment() {
}
override fun onExpandOrCompactChange() {
}
override fun onFullScreenModeChanged() {
}
},
onSendMessage = onSendMessage,
modifier = Modifier
.fillMaxWidth()
.height(COMPOSER_HEIGHT)

View file

@ -24,6 +24,7 @@ sealed interface MessagesTimelineItemState {
}
}

View file

@ -1,5 +1,6 @@
package io.element.android.x.textcomposer
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
@ -8,15 +9,39 @@ import io.element.android.x.element.resources.R as ElementR
@Composable
fun TextComposer(
callback: Callback,
onSendMessage: (CharSequence) -> Unit,
modifier: Modifier = Modifier,
){
) {
AndroidView(
modifier = modifier,
factory = { context ->
RichTextComposerLayout(context).apply {
// Sets up listeners for View -> Compose communication
this.callback = callback
this.callback = object : Callback {
override fun onRichContentSelected(contentUri: Uri): Boolean {
return false
}
override fun onTextChanged(text: CharSequence) {
}
override fun onCloseRelatedMessage() {
}
override fun onSendMessage(text: CharSequence) {
onSendMessage(text)
}
override fun onAddAttachment() {
}
override fun onExpandOrCompactChange() {
}
override fun onFullScreenModeChanged() {
}
}
val messageComposerView = (this as MessageComposerView)
setupComposer(messageComposerView)
}