mirror of
https://github.com/vector-im/riotX-android
synced 2025-10-06 00:02:48 +02:00
Compare commits
3 Commits
v1.6.46
...
experiment
Author | SHA1 | Date | |
---|---|---|---|
|
ed52469fc1 | ||
|
af778ad925 | ||
|
48c02ac336 |
@@ -368,6 +368,10 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// WYSIWIG dependencies
|
||||
implementation files("libs/wysiwyg-release.aar")
|
||||
implementation "net.java.dev.jna:jna:5.7.0@aar"
|
||||
|
||||
implementation project(":vector-config")
|
||||
implementation project(":matrix-sdk-android")
|
||||
implementation project(":matrix-sdk-android-flow")
|
||||
|
BIN
vector/libs/wysiwyg-release.aar
Normal file
BIN
vector/libs/wysiwyg-release.aar
Normal file
Binary file not shown.
@@ -87,7 +87,7 @@
|
||||
android:taskAffinity="${applicationId}.${appTaskAffinitySuffix}"
|
||||
android:theme="@style/Theme.Vector.Light"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:replace="android:allowBackup">
|
||||
tools:replace="android:allowBackup,android:theme">
|
||||
|
||||
<!-- No limit for screen ratio: avoid black strips -->
|
||||
<meta-data
|
||||
|
@@ -736,7 +736,7 @@ class TimelineFragment @Inject constructor(
|
||||
setImageResource(R.drawable.ic_insert_emoji)
|
||||
}
|
||||
},
|
||||
editText = views.composerLayout.views.composerEditText
|
||||
editText = views.composerLayout.views.composerEditor.editText
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1523,7 +1523,7 @@ class TimelineFragment @Inject constructor(
|
||||
}
|
||||
|
||||
private fun setupComposer() {
|
||||
val composerEditText = views.composerLayout.views.composerEditText
|
||||
val composerEditText = views.composerLayout.views.composerEditor.editText
|
||||
autoCompleter.setup(composerEditText)
|
||||
|
||||
observerUserTyping()
|
||||
@@ -1554,7 +1554,7 @@ class TimelineFragment @Inject constructor(
|
||||
|
||||
if (isThreadTimeLine() && timelineArgs.threadTimelineArgs?.showKeyboard == true) {
|
||||
// Show keyboard when the user started a thread
|
||||
views.composerLayout.views.composerEditText.showKeyboard(andRequestFocus = true)
|
||||
views.composerLayout.views.composerEditor.editText.showKeyboard(andRequestFocus = true)
|
||||
}
|
||||
views.composerLayout.callback = object : MessageComposerView.Callback {
|
||||
override fun onAddAttachment() {
|
||||
@@ -1605,7 +1605,7 @@ class TimelineFragment @Inject constructor(
|
||||
|
||||
private fun observerUserTyping() {
|
||||
if (isThreadTimeLine()) return
|
||||
views.composerLayout.views.composerEditText.textChanges()
|
||||
views.composerLayout.views.composerEditor.editText.textChanges()
|
||||
.skipInitialValue()
|
||||
.debounce(300)
|
||||
.map { it.isNotEmpty() }
|
||||
@@ -1615,7 +1615,7 @@ class TimelineFragment @Inject constructor(
|
||||
}
|
||||
.launchIn(viewLifecycleOwner.lifecycleScope)
|
||||
|
||||
views.composerLayout.views.composerEditText.focusChanges()
|
||||
views.composerLayout.views.composerEditor.editText.focusChanges()
|
||||
.onEach {
|
||||
timelineViewModel.handle(RoomDetailAction.ComposerFocusChange(it))
|
||||
}
|
||||
@@ -2443,8 +2443,8 @@ class TimelineFragment @Inject constructor(
|
||||
if (startToCompose &&
|
||||
userId == session.myUserId) {
|
||||
// Empty composer, current user: start an emote
|
||||
views.composerLayout.views.composerEditText.setText(Command.EMOTE.command + " ")
|
||||
views.composerLayout.views.composerEditText.setSelection(Command.EMOTE.command.length + 1)
|
||||
views.composerLayout.views.composerEditor.editText.setText(Command.EMOTE.command + " ")
|
||||
views.composerLayout.views.composerEditor.editText.setSelection(Command.EMOTE.command.length + 1)
|
||||
} else {
|
||||
val roomMember = timelineViewModel.getMember(userId)
|
||||
// TODO move logic outside of fragment
|
||||
@@ -2460,7 +2460,7 @@ class TimelineFragment @Inject constructor(
|
||||
requireContext(),
|
||||
MatrixItem.UserItem(userId, displayName, roomMember?.avatarUrl)
|
||||
)
|
||||
.also { it.bind(views.composerLayout.views.composerEditText) },
|
||||
.also { it.bind(views.composerLayout.views.composerEditor.editText) },
|
||||
0,
|
||||
displayName.length,
|
||||
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
|
||||
@@ -2470,11 +2470,11 @@ class TimelineFragment @Inject constructor(
|
||||
if (startToCompose) {
|
||||
if (displayName.startsWith("/")) {
|
||||
// Ensure displayName will not be interpreted as a Slash command
|
||||
views.composerLayout.views.composerEditText.append("\\")
|
||||
views.composerLayout.views.composerEditor.editText.append("\\")
|
||||
}
|
||||
views.composerLayout.views.composerEditText.append(pill)
|
||||
views.composerLayout.views.composerEditor.editText.append(pill)
|
||||
} else {
|
||||
views.composerLayout.views.composerEditText.text?.insert(views.composerLayout.views.composerEditText.selectionStart, pill)
|
||||
views.composerLayout.views.composerEditor.editText.text?.insert(views.composerLayout.views.composerEditor.editText.selectionStart, pill)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2484,7 +2484,7 @@ class TimelineFragment @Inject constructor(
|
||||
|
||||
private fun focusComposerAndShowKeyboard() {
|
||||
if (views.composerLayout.isVisible) {
|
||||
views.composerLayout.views.composerEditText.showKeyboard(andRequestFocus = true)
|
||||
views.composerLayout.views.composerEditor.editText.showKeyboard(andRequestFocus = true)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -17,13 +17,13 @@
|
||||
package im.vector.app.features.home.room.detail.composer
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.text.Editable
|
||||
import android.util.AttributeSet
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import androidx.core.text.toSpannable
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import androidx.transition.ChangeBounds
|
||||
import androidx.transition.Fade
|
||||
import androidx.transition.Transition
|
||||
@@ -57,7 +57,7 @@ class MessageComposerView @JvmOverloads constructor(
|
||||
private val animationDuration = 100L
|
||||
|
||||
val text: Editable?
|
||||
get() = views.composerEditText.text
|
||||
get() = views.composerEditor.editText.text
|
||||
|
||||
init {
|
||||
inflate(context, R.layout.composer_layout, this)
|
||||
@@ -65,15 +65,21 @@ class MessageComposerView @JvmOverloads constructor(
|
||||
|
||||
collapse(false)
|
||||
|
||||
views.composerEditText.callback = object : ComposerEditText.Callback {
|
||||
override fun onRichContentSelected(contentUri: Uri): Boolean {
|
||||
return callback?.onRichContentSelected(contentUri) ?: false
|
||||
}
|
||||
// views.composerEditText.callback = object : ComposerEditText.Callback {
|
||||
// override fun onRichContentSelected(contentUri: Uri): Boolean {
|
||||
// return callback?.onRichContentSelected(contentUri) ?: false
|
||||
// }
|
||||
//
|
||||
// override fun onTextChanged(text: CharSequence) {
|
||||
// callback?.onTextChanged(text)
|
||||
// }
|
||||
// }
|
||||
|
||||
// Equivalent of ComposerEditText.Callback.onTextChanged
|
||||
views.composerEditor.editText.addTextChangedListener(onTextChanged = { text, _, _, _ ->
|
||||
text?.let { callback?.onTextChanged(it) }
|
||||
})
|
||||
|
||||
override fun onTextChanged(text: CharSequence) {
|
||||
callback?.onTextChanged(text)
|
||||
}
|
||||
}
|
||||
views.composerRelatedMessageCloseButton.setOnClickListener {
|
||||
collapse()
|
||||
callback?.onCloseRelatedMessage()
|
||||
@@ -108,7 +114,7 @@ class MessageComposerView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
fun setTextIfDifferent(text: CharSequence?): Boolean {
|
||||
return views.composerEditText.setTextIfDifferent(text)
|
||||
return views.composerEditor.editText.setTextIfDifferent(text)
|
||||
}
|
||||
|
||||
private fun applyNewConstraintSet(animate: Boolean, transitionComplete: (() -> Unit)?) {
|
||||
@@ -149,9 +155,9 @@ class MessageComposerView @JvmOverloads constructor(
|
||||
|
||||
fun setRoomEncrypted(isEncrypted: Boolean) {
|
||||
if (isEncrypted) {
|
||||
views.composerEditText.setHint(R.string.room_message_placeholder)
|
||||
views.composerEditor.setHint(R.string.room_message_placeholder)
|
||||
} else {
|
||||
views.composerEditText.setHint(R.string.room_message_placeholder)
|
||||
views.composerEditor.setHint(R.string.room_message_placeholder)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -102,13 +102,13 @@
|
||||
android:layout_height="0dp"
|
||||
android:background="@drawable/bg_composer_edit_text" />
|
||||
|
||||
<im.vector.app.features.home.room.detail.composer.ComposerEditText
|
||||
android:id="@+id/composerEditText"
|
||||
<io.element.android.wysiwyg.RichTextEditor
|
||||
android:id="@+id/composerEditor"
|
||||
style="@style/Widget.Vector.EditText.Composer"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:nextFocusLeft="@id/composerEditText"
|
||||
android:nextFocusUp="@id/composerEditText"
|
||||
android:nextFocusLeft="@id/composerEditor"
|
||||
android:nextFocusUp="@id/composerEditor"
|
||||
tools:hint="@string/room_message_placeholder"
|
||||
tools:ignore="MissingConstraints" />
|
||||
|
||||
|
@@ -133,16 +133,16 @@
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_goneMarginEnd="12dp" />
|
||||
|
||||
<im.vector.app.features.home.room.detail.composer.ComposerEditText
|
||||
android:id="@+id/composerEditText"
|
||||
<io.element.android.wysiwyg.RichTextEditor
|
||||
android:id="@+id/composerEditor"
|
||||
style="@style/Widget.Vector.EditText.Composer"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/room_message_placeholder"
|
||||
android:nextFocusLeft="@id/composerEditText"
|
||||
android:nextFocusUp="@id/composerEditText"
|
||||
android:nextFocusLeft="@id/composerEditor"
|
||||
android:nextFocusUp="@id/composerEditor"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/composerEmojiButton"
|
||||
app:layout_constraintEnd_toStartOf="@id/sendButton"
|
||||
app:layout_constraintStart_toStartOf="@id/composerEditTextOuterBorder"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="@tools:sample/lorem/random" />
|
||||
@@ -157,7 +157,6 @@
|
||||
android:src="@drawable/ic_insert_emoji"
|
||||
app:layout_constraintBottom_toBottomOf="@id/attachmentButton"
|
||||
app:layout_constraintEnd_toEndOf="@id/composerEditTextOuterBorder"
|
||||
app:layout_constraintStart_toEndOf="@id/composerEditText"
|
||||
app:layout_constraintTop_toTopOf="@id/attachmentButton"
|
||||
app:layout_goneMarginEnd="8dp"
|
||||
app:tint="?vctr_content_quaternary"
|
||||
|
@@ -145,13 +145,13 @@
|
||||
app:layout_constraintTop_toBottomOf="@id/composer_preview_barrier"
|
||||
app:layout_goneMarginEnd="12dp" />
|
||||
|
||||
<im.vector.app.features.home.room.detail.composer.ComposerEditText
|
||||
android:id="@+id/composerEditText"
|
||||
<io.element.android.wysiwyg.RichTextEditor
|
||||
android:id="@+id/composerEditor"
|
||||
style="@style/Widget.Vector.EditText.Composer"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:nextFocusLeft="@id/composerEditText"
|
||||
android:nextFocusUp="@id/composerEditText"
|
||||
android:nextFocusLeft="@id/composerEditor"
|
||||
android:nextFocusUp="@id/composerEditor"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/composerEmojiButton"
|
||||
app:layout_constraintStart_toStartOf="@id/composerEditTextOuterBorder"
|
||||
@@ -168,7 +168,7 @@
|
||||
android:src="@drawable/ic_insert_emoji"
|
||||
app:layout_constraintBottom_toBottomOf="@id/sendButton"
|
||||
app:layout_constraintEnd_toEndOf="@id/composerEditTextOuterBorder"
|
||||
app:layout_constraintStart_toEndOf="@id/composerEditText"
|
||||
app:layout_constraintStart_toEndOf="@id/composerEditor"
|
||||
app:layout_constraintTop_toTopOf="@id/sendButton"
|
||||
app:layout_goneMarginBottom="52dp"
|
||||
app:layout_goneMarginEnd="8dp"
|
||||
|
Reference in New Issue
Block a user