Skip to content
Snippets Groups Projects
Commit 3e1674cb authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Add copy/share menu to links

parent 484f8a5e
Branches
Tags
No related merge requests found
......@@ -29,7 +29,8 @@ class MessageAdapter(
private val messageRenderer: MessageRenderer,
private val clickListener: ((FormattedMessage) -> Unit)? = null,
private val selectionListener: ((FormattedMessage) -> Unit)? = null,
private val expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null
private val expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null,
private val urlLongClickListener: ((TextView, String) -> Boolean)? = null
) : PagedListAdapter<DisplayMessage, MessageAdapter.QuasselMessageViewHolder>(
object : DiffUtil.ItemCallback<DisplayMessage>() {
override fun areItemsTheSame(oldItem: DisplayMessage, newItem: DisplayMessage) =
......@@ -38,6 +39,13 @@ class MessageAdapter(
override fun areContentsTheSame(oldItem: DisplayMessage, newItem: DisplayMessage) =
oldItem == newItem
}) {
private val movementMethod = BetterLinkMovementMethod.newInstance()
init {
movementMethod.setOnLinkLongClickListener { textView, url ->
urlLongClickListener?.invoke(textView, url) ?: false
}
}
private val messageCache = LruCache<DisplayMessage.Tag, FormattedMessage>(512)
......@@ -99,7 +107,8 @@ class MessageAdapter(
),
clickListener,
selectionListener,
expansionListener
expansionListener,
movementMethod
)
messageRenderer.init(viewHolder, messageType, hasHighlight, isFollowUp)
return viewHolder
......@@ -115,7 +124,8 @@ class MessageAdapter(
itemView: View,
clickListener: ((FormattedMessage) -> Unit)? = null,
selectionListener: ((FormattedMessage) -> Unit)? = null,
expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null
expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null,
movementMethod: BetterLinkMovementMethod
) : RecyclerView.ViewHolder(itemView) {
@BindView(R.id.time_left)
@JvmField
......@@ -172,9 +182,8 @@ class MessageAdapter(
init {
ButterKnife.bind(this, itemView)
content?.movementMethod = BetterLinkMovementMethod.getInstance()
combined?.movementMethod = BetterLinkMovementMethod.getInstance()
content?.movementMethod = movementMethod
combined?.movementMethod = movementMethod
itemView.setOnClickListener(localClickListener)
itemView.setOnLongClickListener(localLongClickListener)
......
......@@ -10,6 +10,7 @@ import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.PopupMenu
import android.support.v7.widget.RecyclerView
import android.text.SpannableStringBuilder
import android.view.*
......@@ -97,7 +98,7 @@ class MessageListFragment : ServiceBoundFragment() {
else
builder
val clipboard = requireActivity().systemService<ClipboardManager>()
val clipboard = requireContext().systemService<ClipboardManager>()
val clip = ClipData.newPlainText(null, data)
clipboard.primaryClip = clip
actionMode?.finish()
......@@ -174,6 +175,7 @@ class MessageListFragment : ServiceBoundFragment() {
linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.reverseLayout = true
var linkMenu: PopupMenu? = null
adapter = MessageAdapter(
messageRenderer,
{ msg ->
......@@ -190,6 +192,41 @@ class MessageListFragment : ServiceBoundFragment() {
if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
actionMode?.finish()
}
},
null,
{ textView, url ->
if (linkMenu == null) {
linkMenu = PopupMenu(requireContext(), textView).also { menu ->
linkMenu?.dismiss()
menu.menuInflater.inflate(R.menu.context_link, menu.menu)
menu.setOnMenuItemClickListener {
when (it.itemId) {
R.id.action_copy -> {
val clipboard = requireContext().systemService<ClipboardManager>()
val clip = ClipData.newPlainText(null, url)
clipboard.primaryClip = clip
menu.dismiss()
linkMenu = null
true
}
R.id.action_share -> {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_TEXT, url)
requireContext().startActivity(
Intent.createChooser(intent, requireContext().getString(R.string.label_share))
)
menu.dismiss()
linkMenu = null
true
}
else -> false
}
}
menu.show()
}
}
true
}
)
messageList.adapter = adapter
......
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_copy"
android:icon="@drawable/ic_copy"
android:title="@string/label_copy" />
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share"
android:title="@string/label_share" />
</menu>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment