From b9a4c81dd1d2bf1dd65ea9f3701a158a80261f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Fri, 2 Dec 2022 15:40:12 +0100 Subject: [PATCH] Improve the performance of changing the composer mode. Note: this will only be noticeable once a new version of the RTE library is used and the crash when calling `renderComposerMode` is fixed. Also, improved the UI for full screen mode. --- .../android/x/features/messages/MessagesScreen.kt | 4 ++-- .../x/textcomposer/RichTextComposerLayout.kt | 15 +++++++++++++-- .../android/x/textcomposer/TextComposer.kt | 13 ++++++++----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt index 90b16aebf4..749e406e44 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt @@ -232,9 +232,9 @@ fun MessagesContent( .imePadding() .let { if (composerFullScreen) { - it.weight(1f) + it.weight(1f, fill = false) } else { - it.height(COMPOSER_HEIGHT) + it.wrapContentHeight(Alignment.Bottom) } }, ) diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt index 6a0f5e7e23..e2523dcdd8 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt @@ -66,6 +66,7 @@ class RichTextComposerLayout @JvmOverloads constructor( // There is no need to persist these values since they're always updated by the parent fragment private var isFullScreen = false private var hasRelatedMessage = false + private var composerMode: MessageComposerMode? = null var isTextFormattingEnabled = true set(value) { @@ -118,9 +119,15 @@ class RichTextComposerLayout @JvmOverloads constructor( private val dimensionConverter = DimensionConverter(resources) - fun setFullScreen(isFullScreen: Boolean, manageKeyboard: Boolean) { + fun setFullScreen(isFullScreen: Boolean, animated: Boolean, manageKeyboard: Boolean) { + if (!animated && views.composerLayout.layoutParams != null) { + views.composerLayout.updateLayoutParams { + height = + if (isFullScreen) ViewGroup.LayoutParams.MATCH_PARENT else ViewGroup.LayoutParams.WRAP_CONTENT + } + } editText.updateLayoutParams { - height = if (isFullScreen) 0 else ViewGroup.LayoutParams.WRAP_CONTENT + height = if (isFullScreen) ViewGroup.LayoutParams.MATCH_PARENT else ViewGroup.LayoutParams.WRAP_CONTENT } updateTextFieldBorder(isFullScreen) @@ -141,6 +148,7 @@ class RichTextComposerLayout @JvmOverloads constructor( editText.hideKeyboard() } } + this.isFullScreen = isFullScreen } @@ -466,6 +474,9 @@ class RichTextComposerLayout @JvmOverloads constructor( } override fun renderComposerMode(mode: MessageComposerMode) { + if (this.composerMode == mode) return + this.composerMode = mode + if (mode is MessageComposerMode.Special) { views.composerModeGroup.isVisible = true replaceFormattedContent(mode.defaultContent) diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt index 093cdc858e..7648707264 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt @@ -71,7 +71,7 @@ fun TextComposer( } } - setFullScreen(fullscreen, true) + setFullScreen(fullscreen, animated = false, manageKeyboard = true) (this as MessageComposerView).apply { setup(isInDarkMode, composerMode) } @@ -85,8 +85,9 @@ fun TextComposer( // whenever the state changes // Example of Compose -> View communication val messageComposerView = (view as MessageComposerView) - view.setFullScreen(fullscreen, false) - // TODO messageComposerView.renderComposerMode(composerMode) + view.setFullScreen(fullscreen, animated = false, manageKeyboard = false) + // TODO: un-comment once we update to a version of the lib > 0.8.0 + // messageComposerView.renderComposerMode(composerMode) messageComposerView.sendButton.isInvisible = !composerCanSendMessage messageComposerView.setTextIfDifferent(composerText ?: "") } @@ -122,7 +123,9 @@ private fun MessageComposerView.setup(isDarkMode: Boolean, composerMode: Message editText.setHint(ElementR.string.room_message_placeholder) emojiButton?.isVisible = true sendButton.isVisible = true - // TODO renderComposerMode(composerMode) + editText.maxLines = MessageComposerView.MAX_LINES_WHEN_COLLAPSED + // TODO: un-comment once we update to a version of the lib > 0.8.0 + // renderComposerMode(composerMode) } @Preview @@ -138,4 +141,4 @@ fun TextComposerPreview() { composerCanSendMessage = true, composerText = "Message", ) -} \ No newline at end of file +}