|
|
|
@ -22,80 +22,81 @@ import io.element.android.x.element.resources.R as ElementR
@@ -22,80 +22,81 @@ import io.element.android.x.element.resources.R as ElementR
|
|
|
|
|
|
|
|
|
|
@Composable |
|
|
|
|
fun TextComposer( |
|
|
|
|
onSendMessage: (String) -> Unit, |
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
|
fullscreen: Boolean, |
|
|
|
|
onFullscreenToggle: () -> Unit, |
|
|
|
|
composerText: String?, |
|
|
|
|
composerMode: MessageComposerMode, |
|
|
|
|
onCloseSpecialMode: () -> Unit, |
|
|
|
|
onComposerTextChange: (CharSequence) -> Unit, |
|
|
|
|
composerCanSendMessage: Boolean, |
|
|
|
|
composerText: String?, |
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
|
onSendMessage: (String) -> Unit = {}, |
|
|
|
|
onFullscreenToggle: () -> Unit = {}, |
|
|
|
|
onCloseSpecialMode: () -> Unit = {}, |
|
|
|
|
onComposerTextChange: (CharSequence) -> Unit = {}, |
|
|
|
|
) { |
|
|
|
|
if (LocalInspectionMode.current) { |
|
|
|
|
FakeComposer(modifier) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
val isInDarkMode = isSystemInDarkTheme() |
|
|
|
|
AndroidView( |
|
|
|
|
modifier = modifier, |
|
|
|
|
factory = { context -> |
|
|
|
|
RichTextComposerLayout(context).apply { |
|
|
|
|
// Sets up listeners for View -> Compose communication |
|
|
|
|
this.callback = object : Callback { |
|
|
|
|
override fun onRichContentSelected(contentUri: Uri): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val isInDarkMode = isSystemInDarkTheme() |
|
|
|
|
AndroidView( |
|
|
|
|
modifier = modifier, |
|
|
|
|
factory = { context -> |
|
|
|
|
RichTextComposerLayout(context).apply { |
|
|
|
|
// Sets up listeners for View -> Compose communication |
|
|
|
|
this.callback = object : Callback { |
|
|
|
|
override fun onRichContentSelected(contentUri: Uri): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun onTextChanged(text: CharSequence) { |
|
|
|
|
onComposerTextChange(text) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onTextChanged(text: CharSequence) { |
|
|
|
|
onComposerTextChange(text) |
|
|
|
|
} |
|
|
|
|
override fun onCloseRelatedMessage() { |
|
|
|
|
onCloseSpecialMode() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onCloseRelatedMessage() { |
|
|
|
|
onCloseSpecialMode() |
|
|
|
|
} |
|
|
|
|
override fun onSendMessage(text: CharSequence) { |
|
|
|
|
// text contains markdown. |
|
|
|
|
onSendMessage(text.toString()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onSendMessage(text: CharSequence) { |
|
|
|
|
// text contains markdown. |
|
|
|
|
onSendMessage(text.toString()) |
|
|
|
|
} |
|
|
|
|
override fun onAddAttachment() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onAddAttachment() { |
|
|
|
|
} |
|
|
|
|
override fun onExpandOrCompactChange() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onExpandOrCompactChange() { |
|
|
|
|
override fun onFullScreenModeChanged() { |
|
|
|
|
onFullscreenToggle() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onFullScreenModeChanged() { |
|
|
|
|
onFullscreenToggle() |
|
|
|
|
setFullScreen(fullscreen, animated = false, manageKeyboard = true) |
|
|
|
|
(this as MessageComposerView).apply { |
|
|
|
|
setup(isInDarkMode, composerMode) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
setFullScreen(fullscreen, animated = false, manageKeyboard = true) |
|
|
|
|
(this as MessageComposerView).apply { |
|
|
|
|
setup(isInDarkMode, composerMode) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
update = { view -> |
|
|
|
|
// View's been inflated or state read in this block has been updated |
|
|
|
|
// Add logic here if necessary |
|
|
|
|
}, |
|
|
|
|
update = { view -> |
|
|
|
|
// View's been inflated or state read in this block has been updated |
|
|
|
|
// Add logic here if necessary |
|
|
|
|
|
|
|
|
|
// As selectedItem is read here, AndroidView will recompose |
|
|
|
|
// whenever the state changes |
|
|
|
|
// Example of Compose -> View communication |
|
|
|
|
val messageComposerView = (view as MessageComposerView) |
|
|
|
|
view.setFullScreen(fullscreen, animated = false, manageKeyboard = false) |
|
|
|
|
messageComposerView.renderComposerMode(composerMode) |
|
|
|
|
messageComposerView.sendButton.isInvisible = !composerCanSendMessage |
|
|
|
|
messageComposerView.setTextIfDifferent(composerText ?: "") |
|
|
|
|
messageComposerView.editText.requestFocus() |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
// As selectedItem is read here, AndroidView will recompose |
|
|
|
|
// whenever the state changes |
|
|
|
|
// Example of Compose -> View communication |
|
|
|
|
val messageComposerView = (view as MessageComposerView) |
|
|
|
|
view.setFullScreen(fullscreen, animated = false, manageKeyboard = false) |
|
|
|
|
messageComposerView.renderComposerMode(composerMode) |
|
|
|
|
messageComposerView.sendButton.isInvisible = !composerCanSendMessage |
|
|
|
|
messageComposerView.setTextIfDifferent(composerText ?: "") |
|
|
|
|
messageComposerView.editText.requestFocus() |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Composable |
|
|
|
|
private fun FakeComposer(modifier: Modifier) { |
|
|
|
|
private fun FakeComposer( |
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
|
) { |
|
|
|
|
// AndroidView is not Available in this mode, just render a Text |
|
|
|
|
Box( |
|
|
|
|
modifier = modifier |
|
|
|
|