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 1548dd4e6a
commit dca9563762
3 changed files with 30 additions and 29 deletions

View file

@ -3,7 +3,6 @@
package io.element.android.x.features.messages package io.element.android.x.features.messages
import Avatar import Avatar
import android.net.Uri
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource 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.MessagesItemGroupPosition
import io.element.android.x.features.messages.model.MessagesTimelineItemState import io.element.android.x.features.messages.model.MessagesTimelineItemState
import io.element.android.x.features.messages.model.MessagesViewState import io.element.android.x.features.messages.model.MessagesViewState
import io.element.android.x.textcomposer.Callback
import io.element.android.x.textcomposer.TextComposer import io.element.android.x.textcomposer.TextComposer
private val BUBBLE_RADIUS = 16.dp private val BUBBLE_RADIUS = 16.dp
@ -122,30 +120,7 @@ fun MessagesContent(
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
) )
TextComposer( TextComposer(
callback = object : Callback { onSendMessage = onSendMessage,
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() {
}
},
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(COMPOSER_HEIGHT) .height(COMPOSER_HEIGHT)

View file

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

View file

@ -1,5 +1,6 @@
package io.element.android.x.textcomposer package io.element.android.x.textcomposer
import android.net.Uri
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
@ -8,15 +9,39 @@ import io.element.android.x.element.resources.R as ElementR
@Composable @Composable
fun TextComposer( fun TextComposer(
callback: Callback, onSendMessage: (CharSequence) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
){ ) {
AndroidView( AndroidView(
modifier = modifier, modifier = modifier,
factory = { context -> factory = { context ->
RichTextComposerLayout(context).apply { RichTextComposerLayout(context).apply {
// Sets up listeners for View -> Compose communication // 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) val messageComposerView = (this as MessageComposerView)
setupComposer(messageComposerView) setupComposer(messageComposerView)
} }