From fc7001c295636fe5f150d59201a730dfe57a9af8 Mon Sep 17 00:00:00 2001 From: Koen J Date: Thu, 6 Nov 2025 11:29:24 +0100 Subject: [PATCH] Added double click to copy button on comments. --- .../views/adapters/CommentViewHolder.kt | 36 ++++++++++++++++++- app/src/main/res/layout/list_comment.xml | 7 ++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt index 74f7d53c..18f32096 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt @@ -1,6 +1,11 @@ package com.futo.platformplayer.views.adapters +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.view.GestureDetector import android.view.LayoutInflater +import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.FrameLayout @@ -11,6 +16,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.futo.platformplayer.R import com.futo.platformplayer.Settings +import com.futo.platformplayer.UIDialogs import com.futo.platformplayer.api.media.models.comments.IPlatformComment import com.futo.platformplayer.api.media.models.comments.LazyComment import com.futo.platformplayer.api.media.models.comments.PolycentricPlatformComment @@ -40,6 +46,7 @@ class CommentViewHolder : ViewHolder { private val _imageLikeIcon: ImageView; private val _textLikes: TextView; private val _imageDislikeIcon: ImageView; + private val _imageCopy: ImageView; private val _textDislikes: TextView; private val _buttonReplies: PillButton; private val _layoutRating: LinearLayout; @@ -70,6 +77,7 @@ class CommentViewHolder : ViewHolder { _layoutRating = itemView.findViewById(R.id.layout_rating); _pillRatingLikesDislikes = itemView.findViewById(R.id.rating); _buttonDelete = itemView.findViewById(R.id.button_delete); + _imageCopy = itemView.findViewById(R.id.button_copy) _containerComments = itemView.findViewById(R.id.comment_container); _loader = itemView.findViewById(R.id.loader); @@ -97,6 +105,32 @@ class CommentViewHolder : ViewHolder { StatePolycentric.instance.updateLikeMap(c.reference, args.hasLiked, args.hasDisliked) }; + val listener = object : GestureDetector.SimpleOnGestureListener() { + override fun onDown(e: MotionEvent): Boolean = true + + override fun onDoubleTap(e: MotionEvent): Boolean { + val clipboard = viewGroup.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val text = comment?.message.orEmpty() + val clip = ClipData.newPlainText("Comment", text) + clipboard.setPrimaryClip(clip) + UIDialogs.toast(viewGroup.context, "Copied", false) + return true + } + } + + val detector = GestureDetector(viewGroup.context, listener).apply { + setOnDoubleTapListener(listener) + } + + _imageCopy.apply { + isClickable = true + setOnTouchListener { v, event -> + val consumed = detector.onTouchEvent(event) + if (!consumed && event.actionMasked == MotionEvent.ACTION_UP) v.performClick() + consumed + } + } + _creatorThumbnail.onClick.subscribe { val c = comment ?: return@subscribe; onAuthorClick.emit(c); @@ -120,7 +154,7 @@ class CommentViewHolder : ViewHolder { onDelete.emit(c); } - _textBody.setPlatformPlayerLinkMovementMethod(viewGroup.context); + _textBody.setPlatformPlayerLinkMovementMethod(viewGroup.context) } fun bind(comment: IPlatformComment, readonly: Boolean) { diff --git a/app/src/main/res/layout/list_comment.xml b/app/src/main/res/layout/list_comment.xml index b39af456..1d0bd4b3 100644 --- a/app/src/main/res/layout/list_comment.xml +++ b/app/src/main/res/layout/list_comment.xml @@ -159,6 +159,13 @@ app:pillText="55 Replies" android:layout_marginStart="15dp" /> + +