Skip to content

Commit 7ba1052

Browse files
authored
Fix rich text editor EditText not resizing properly in full screen (#7491)
* Fix rich text editor full screen mode * Add changelog * Address review comments.
1 parent 48cca99 commit 7ba1052

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

changelog.d/7491.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix rich text editor textfield not growing to fill parent on full screen.

vector/src/main/java/im/vector/app/features/home/room/detail/composer/RichTextComposerLayout.kt

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ class RichTextComposerLayout @JvmOverloads constructor(
5454

5555
private var currentConstraintSetId: Int = -1
5656
private val animationDuration = 100L
57+
private val maxEditTextLinesWhenCollapsed = 12
5758

58-
private var isFullScreen = false
59+
private val isFullScreen: Boolean get() = currentConstraintSetId == R.layout.composer_rich_text_layout_constraint_set_fullscreen
5960

6061
var isTextFormattingEnabled = true
6162
set(value) {
@@ -104,10 +105,10 @@ class RichTextComposerLayout @JvmOverloads constructor(
104105
collapse(false)
105106

106107
views.richTextComposerEditText.addTextChangedListener(
107-
TextChangeListener({ callback?.onTextChanged(it) }, ::updateTextFieldBorder)
108+
TextChangeListener({ callback?.onTextChanged(it) }, { updateTextFieldBorder() })
108109
)
109110
views.plainTextComposerEditText.addTextChangedListener(
110-
TextChangeListener({ callback?.onTextChanged(it) }, ::updateTextFieldBorder)
111+
TextChangeListener({ callback?.onTextChanged(it) }, { updateTextFieldBorder() })
111112
)
112113

113114
views.composerRelatedMessageCloseButton.setOnClickListener {
@@ -196,8 +197,9 @@ class RichTextComposerLayout @JvmOverloads constructor(
196197
button.isSelected = menuState.reversedActions.contains(action)
197198
}
198199

199-
private fun updateTextFieldBorder(isExpanded: Boolean) {
200-
val borderResource = if (isExpanded) {
200+
private fun updateTextFieldBorder() {
201+
val isExpanded = editText.editableText.lines().count() > 1
202+
val borderResource = if (isExpanded || isFullScreen) {
201203
R.drawable.bg_composer_rich_edit_text_expanded
202204
} else {
203205
R.drawable.bg_composer_rich_edit_text_single_line
@@ -240,8 +242,21 @@ class RichTextComposerLayout @JvmOverloads constructor(
240242
it.applyTo(this)
241243
}
242244

243-
updateTextFieldBorder(newValue)
245+
updateTextFieldBorder()
244246
updateEditTextVisibility()
247+
248+
updateEditTextFullScreenState(views.richTextComposerEditText, newValue)
249+
updateEditTextFullScreenState(views.plainTextComposerEditText, newValue)
250+
}
251+
252+
private fun updateEditTextFullScreenState(editText: EditText, isFullScreen: Boolean) {
253+
if (isFullScreen) {
254+
editText.maxLines = Int.MAX_VALUE
255+
// This is a workaround to fix incorrect scroll position when maximised
256+
post { editText.requestLayout() }
257+
} else {
258+
editText.maxLines = maxEditTextLinesWhenCollapsed
259+
}
245260
}
246261

247262
private fun applyNewConstraintSet(animate: Boolean, transitionComplete: (() -> Unit)?) {

0 commit comments

Comments
 (0)