diff --git a/app/src/main/java/org/futo/circles/view/PreviewPostView.kt b/app/src/main/java/org/futo/circles/view/PreviewPostView.kt index 3ab89926c1cd509b017ce4b902d47a5c1669e157..f18fd33c2bf0edd88bd4c59695fe847706db7ccb 100644 --- a/app/src/main/java/org/futo/circles/view/PreviewPostView.kt +++ b/app/src/main/java/org/futo/circles/view/PreviewPostView.kt @@ -1,16 +1,12 @@ package org.futo.circles.view -import android.annotation.SuppressLint import android.content.Context import android.graphics.drawable.ColorDrawable import android.net.Uri import android.text.Editable import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater -import android.view.MotionEvent -import android.view.View import android.view.inputmethod.InputMethodManager import android.widget.LinearLayout import androidx.annotation.DrawableRes @@ -21,6 +17,8 @@ import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.core.widget.doAfterTextChanged import io.element.android.wysiwyg.EditorEditText +import io.element.android.wysiwyg.display.LinkDisplayHandler +import io.element.android.wysiwyg.display.TextDisplay import io.element.android.wysiwyg.view.models.InlineFormat import org.futo.circles.R import org.futo.circles.core.extensions.loadEncryptedThumbOrFullIntoWithAspect @@ -30,7 +28,9 @@ import org.futo.circles.core.extensions.setIsVisible import org.futo.circles.core.feature.autocomplete.Autocomplete import org.futo.circles.core.feature.autocomplete.AutocompleteCallback import org.futo.circles.core.feature.autocomplete.CharPolicy +import org.futo.circles.core.feature.markdown.mentions.MentionsLinkDisplayHandler import org.futo.circles.core.feature.markdown.mentions.MentionsPresenter +import org.futo.circles.core.feature.markdown.span.MentionSpan import org.futo.circles.core.model.MediaContent import org.futo.circles.core.model.MediaType import org.futo.circles.core.model.UserListItem @@ -46,7 +46,9 @@ import org.futo.circles.feature.timeline.post.create.PreviewPostListener import org.futo.circles.model.CreatePostContent import org.futo.circles.model.MediaPostContent import org.futo.circles.model.TextPostContent +import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.session.getUser +import org.matrix.android.sdk.api.session.permalinks.PermalinkService.Companion.MATRIX_TO_URL_BASE import org.matrix.android.sdk.api.session.user.model.User import uniffi.wysiwyg_composer.ActionState import uniffi.wysiwyg_composer.ComposerAction @@ -88,6 +90,7 @@ class PreviewPostView( doAfterTextChanged { binding.btnSend.isEnabled = it?.toString()?.isNotBlank() == true } + linkDisplayHandler = MentionsLinkDisplayHandler(context) } setupRichTextMenu() } @@ -226,8 +229,10 @@ class PreviewPostView( ) .with(object : AutocompleteCallback<UserListItem> { override fun onPopupItemClicked(editable: Editable, item: UserListItem): Boolean { - val range = CharPolicy.getQueryRange(editable) ?: return false - //insertMentionSpan(editable, item.user.name, range[0]) + binding.etTextPost.setLinkSuggestion( + MATRIX_TO_URL_BASE + item.id, + "@${item.user.name}@" + ) return true } @@ -328,21 +333,6 @@ class PreviewPostView( } } - @SuppressLint("ClickableViewAccessibility") - private fun disallowParentInterceptTouchEvent(view: View) { - view.setOnTouchListener { v, event -> - if (v.hasFocus()) { - v.parent?.requestDisallowInterceptTouchEvent(true) - val action = event.actionMasked - if (action == MotionEvent.ACTION_SCROLL) { - v.parent?.requestDisallowInterceptTouchEvent(false) - return@setOnTouchListener true - } - } - false - } - } - private fun addMenuItem( container: LinearLayout, @DrawableRes iconId: Int, diff --git a/core/src/main/java/org/futo/circles/core/feature/markdown/mentions/MentionsLinkDisplayHandler.kt b/core/src/main/java/org/futo/circles/core/feature/markdown/mentions/MentionsLinkDisplayHandler.kt new file mode 100644 index 0000000000000000000000000000000000000000..3e61d3e8b8d0f6e321ecd3b7f457fca5754ad7b3 --- /dev/null +++ b/core/src/main/java/org/futo/circles/core/feature/markdown/mentions/MentionsLinkDisplayHandler.kt @@ -0,0 +1,22 @@ +package org.futo.circles.core.feature.markdown.mentions + +import android.content.Context +import io.element.android.wysiwyg.display.LinkDisplayHandler +import io.element.android.wysiwyg.display.TextDisplay +import org.futo.circles.core.feature.markdown.span.MentionSpan +import org.matrix.android.sdk.api.MatrixPatterns +import org.matrix.android.sdk.api.session.permalinks.PermalinkService + +class MentionsLinkDisplayHandler(private val context: Context) : LinkDisplayHandler { + + override fun resolveLinkDisplay(text: String, url: String): TextDisplay { + val userId = url.removePrefix(PermalinkService.MATRIX_TO_URL_BASE) + return if (MatrixPatterns.isUserId(userId)) + TextDisplay.Custom( + MentionSpan( + context, + text.replace("@", "") + ) + ) else TextDisplay.Plain + } +} \ No newline at end of file