diff --git a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt index 15301c038..99d8ec4c7 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt @@ -1,6 +1,7 @@ package com.github.libretube.ui.adapters import android.annotation.SuppressLint +import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -27,6 +28,8 @@ import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.ThemeHelper import com.github.libretube.ui.fragments.CommentsRepliesFragment import com.github.libretube.ui.viewholders.CommentsViewHolder +import com.github.libretube.util.HtmlParser +import com.github.libretube.util.LinkHandler import com.github.libretube.util.TextUtils import kotlinx.serialization.encodeToString @@ -35,6 +38,7 @@ class CommentsAdapter( private val videoId: String, private val comments: MutableList, private val isRepliesAdapter: Boolean = false, + private val handleLink: ((url: String) -> Unit)?, private val dismiss: () -> Unit ) : RecyclerView.Adapter() { fun clear() { @@ -60,7 +64,10 @@ class CommentsAdapter( val comment = comments[position] holder.binding.apply { commentInfos.text = comment.author + TextUtils.SEPARATOR + comment.commentedTime - commentText.text = comment.commentText?.parseAsHtml() + + commentText.movementMethod = LinkMovementMethod.getInstance() + commentText.text = comment.commentText + ?.parseAsHtml(tagHandler = HtmlParser(LinkHandler(handleLink ?: {}))) ImageHelper.loadImage(comment.thumbnail, commentorImage) likesTextView.text = comment.likeCount.formatShort() @@ -108,7 +115,6 @@ class CommentsAdapter( } } } - root.setOnLongClickListener { ClipboardHelper.save(root.context, comment.commentText ?: "") Toast.makeText(root.context, R.string.copied, Toast.LENGTH_SHORT).show() diff --git a/app/src/main/java/com/github/libretube/ui/fragments/CommentsMainFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/CommentsMainFragment.kt index 2e9adacfe..5804138a2 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/CommentsMainFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/CommentsMainFragment.kt @@ -43,7 +43,8 @@ class CommentsMainFragment : Fragment() { commentsAdapter = CommentsAdapter( this, viewModel.videoId!!, - viewModel.commentsPage.value?.comments.orEmpty().toMutableList() + viewModel.commentsPage.value?.comments.orEmpty().toMutableList(), + handleLink = viewModel.handleLink ) { viewModel.commentsSheetDismiss?.invoke() } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt index 328146d1d..4d7ab8de6 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt @@ -49,7 +49,13 @@ class CommentsRepliesFragment : Fragment() { arguments?.getString(IntentData.comment)!! ) - repliesAdapter = CommentsAdapter(null, videoId, mutableListOf(comment), true) { + repliesAdapter = CommentsAdapter( + null, + videoId, + mutableListOf(comment), + true, + viewModel.handleLink + ) { viewModel.commentsSheetDismiss?.invoke() } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index f807ee4c8..94f45fe5f 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -367,6 +367,7 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions { binding.commentsToggle.setOnClickListener { videoId ?: return@setOnClickListener // set the max height to not cover the currently playing video + commentsViewModel.handleLink = this::handleLink commentsViewModel.maxHeight = binding.root.height - binding.player.height commentsViewModel.videoId = videoId CommentsSheet().show(childFragmentManager) diff --git a/app/src/main/java/com/github/libretube/ui/models/CommentsViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/CommentsViewModel.kt index becb96b71..82faff0b8 100644 --- a/app/src/main/java/com/github/libretube/ui/models/CommentsViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/CommentsViewModel.kt @@ -21,6 +21,7 @@ class CommentsViewModel : ViewModel() { var videoId: String? = null var maxHeight: Int = 0 var commentsSheetDismiss: (() -> Unit)? = null + var handleLink: ((url: String) -> Unit)? = null fun fetchComments() { videoId ?: return diff --git a/app/src/main/res/layout/comments_row.xml b/app/src/main/res/layout/comments_row.xml index 6f27c1706..953729bd0 100644 --- a/app/src/main/res/layout/comments_row.xml +++ b/app/src/main/res/layout/comments_row.xml @@ -1,5 +1,5 @@ - + android:paddingEnd="15dp"> @@ -125,4 +122,4 @@ - +