Skip to content
Snippets Groups Projects
Commit 5485ef27 authored by Taras's avatar Taras
Browse files

Move link confirmation to Post vh

parent 32e6bcf9
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.feature.timeline.base
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.MotionEvent
import android.view.View
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.futo.circles.R
import org.futo.circles.core.model.PostListItem
import org.futo.circles.feature.timeline.InternalLinkMovementMethod
import org.futo.circles.feature.timeline.list.OnLinkClickedListener
import org.matrix.android.sdk.api.extensions.tryOrNull
abstract class TimelineListItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
abstract fun bind(item: PostListItem)
@SuppressLint("ClickableViewAccessibility")
protected fun handleLinkClick(textView: TextView?) {
textView?.apply {
movementMethod = InternalLinkMovementMethod(object : OnLinkClickedListener {
override fun onLinkClicked(url: String) {
showLinkConfirmation(context, url)
}
})
setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) v.requestFocus()
false
}
}
}
private fun showLinkConfirmation(context: Context, url: String) {
MaterialAlertDialogBuilder(context)
.setTitle(R.string.do_you_want_to_open_this_url)
.setMessage(url)
.setPositiveButton(android.R.string.ok) { dialogInterface, _ ->
tryOrNull {
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
dialogInterface.dismiss()
}
.setNegativeButton(android.R.string.cancel) { dialogInterface, _ ->
dialogInterface.dismiss()
}
.show()
}
}
\ No newline at end of file
package org.futo.circles.feature.timeline.list.holder
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.futo.circles.R
import org.futo.circles.core.base.list.context
import org.futo.circles.core.feature.markdown.MarkdownParser
......@@ -18,16 +14,13 @@ import org.futo.circles.core.model.Post
import org.futo.circles.core.model.PostContent
import org.futo.circles.core.model.PostListItem
import org.futo.circles.core.model.TextContent
import org.futo.circles.feature.timeline.InternalLinkMovementMethod
import org.futo.circles.feature.timeline.base.TimelineListItemViewHolder
import org.futo.circles.feature.timeline.list.OnLinkClickedListener
import org.futo.circles.feature.timeline.list.PostOptionsListener
import org.futo.circles.model.PostItemPayload
import org.futo.circles.view.PostFooterView
import org.futo.circles.view.PostHeaderView
import org.futo.circles.view.PostStatusView
import org.futo.circles.view.ReadMoreTextView
import org.matrix.android.sdk.api.extensions.tryOrNull
@SuppressLint("ClickableViewAccessibility")
......@@ -84,7 +77,7 @@ abstract class PostViewHolder(
}
postFooter?.setListener(optionsListener)
postHeader.setListener(optionsListener)
handleLinkClick()
readMoreTextView?.let { handleLinkClick(it) }
readMoreTextView?.apply {
setNotCollapsableClickAction { openReplies() }
setOnLongClickListener {
......@@ -125,38 +118,6 @@ abstract class PostViewHolder(
else postLayout?.background = null
}
@SuppressLint("ClickableViewAccessibility")
private fun handleLinkClick() {
readMoreTextView?.apply {
movementMethod = InternalLinkMovementMethod(object : OnLinkClickedListener {
override fun onLinkClicked(url: String) {
showLinkConfirmation(context, url)
}
})
setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) v.requestFocus()
false
}
}
}
private fun showLinkConfirmation(context: Context, url: String) {
MaterialAlertDialogBuilder(context)
.setTitle(R.string.do_you_want_to_open_this_url)
.setMessage(url)
.setPositiveButton(android.R.string.ok) { dialogInterface, _ ->
tryOrNull {
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
dialogInterface.dismiss()
}
.setNegativeButton(android.R.string.cancel) { dialogInterface, _ ->
dialogInterface.dismiss()
}
.show()
}
private fun openReplies() {
post?.let { optionsListener.onReply(it.postInfo.roomId, it.id) }
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment