From 8b2661283c8af82bed431da79120fbacbde7709b Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 20 Dec 2023 15:45:32 +0200
Subject: [PATCH] Propagate click on text to parent

---
 .../java/org/futo/circles/view/PostLayout.kt  | 23 +++++++++++++++----
 .../org/futo/circles/view/ReadMoreTextView.kt | 16 ++++++++++++-
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/view/PostLayout.kt b/app/src/main/java/org/futo/circles/view/PostLayout.kt
index 1976049f6..094f9ace2 100644
--- a/app/src/main/java/org/futo/circles/view/PostLayout.kt
+++ b/app/src/main/java/org/futo/circles/view/PostLayout.kt
@@ -62,8 +62,7 @@ class PostLayout(
             }
 
             override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
-                if (binding.postFooter.areUserAbleToReply())
-                    post?.let { optionsListener?.onReply(it.postInfo.roomId, it.id) }
+                openReplies()
                 return true
             }
 
@@ -75,9 +74,18 @@ class PostLayout(
         }
 
     init {
-        binding.lvContent.setOnClickListener {
-            post?.let {
-                if (it.content.isMedia()) optionsListener?.onShowPreview(it.postInfo.roomId, it.id)
+        binding.lvContent.apply {
+            setOnClickListener {
+                post?.let {
+                    if (it.content.isMedia()) optionsListener?.onShowPreview(
+                        it.postInfo.roomId,
+                        it.id
+                    ) else openReplies()
+                }
+            }
+            setOnLongClickListener {
+                binding.postHeader.showMenu()
+                true
             }
         }
         binding.lCard.setOnTouchListener { _, event ->
@@ -115,6 +123,11 @@ class PostLayout(
         binding.tvEditedLabel.setIsVisible(isEdited)
     }
 
+    private fun openReplies() {
+        if (binding.postFooter.areUserAbleToReply())
+            post?.let { optionsListener?.onReply(it.postInfo.roomId, it.id) }
+    }
+
     private fun setMentionBorder(content: PostContent) {
         val hasMention = when (content) {
             is MediaContent -> content.caption?.let {
diff --git a/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt b/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
index a2d49f26e..4cf2ccc96 100644
--- a/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
+++ b/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
@@ -9,10 +9,14 @@ import android.text.TextPaint
 import android.text.TextUtils
 import android.text.style.TextAppearanceSpan
 import android.util.AttributeSet
+import android.view.ViewGroup
 import androidx.appcompat.widget.AppCompatTextView
 import androidx.core.content.res.use
 import androidx.core.text.buildSpannedString
+import androidx.core.text.getSpans
 import androidx.core.text.inSpans
+import androidx.core.text.toSpannable
+import io.noties.markwon.core.spans.LinkSpan
 import org.futo.circles.R
 import kotlin.text.Typography.ellipsis
 import kotlin.text.Typography.nbsp
@@ -47,7 +51,17 @@ class ReadMoreTextView @JvmOverloads constructor(
         }
 
         if (hasOnClickListeners()) throw IllegalStateException("Custom onClickListener not supported")
-        super.setOnClickListener { toggle() }
+        super.setOnClickListener {
+            toggle()
+            if (collapseText == originalText &&
+                originalText?.toSpannable()
+                    ?.getSpans<LinkSpan>(0, originalText?.length ?: 0)?.size == 0
+            ) (parent?.parent as? ViewGroup)?.performClick()
+        }
+
+        super.setOnLongClickListener {
+            (parent?.parent as? ViewGroup)?.performLongClick() == true
+        }
 
         if (originalText != null) invalidateText()
 
-- 
GitLab