From c3d170b8081bcd387fb4da7a617b97048d8a58a7 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 10 Jun 2018 10:43:24 +0200
Subject: [PATCH] Make links in core info clickable

---
 .../ui/chat/info/core/ClientAdapter.kt            | 15 +++++++++++++--
 .../ui/chat/info/core/CoreInfoFragment.kt         | 10 ++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/ClientAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/ClientAdapter.kt
index f04876edc..917a6cc13 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/ClientAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/ClientAdapter.kt
@@ -20,6 +20,8 @@ import de.kuschku.quasseldroid.util.helper.getVectorDrawableCompat
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.tint
 import de.kuschku.quasseldroid.util.helper.visibleIf
+import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod
+import de.kuschku.quasseldroid.util.ui.LinkLongClickMenuHelper
 import org.threeten.bp.ZoneId
 import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
@@ -33,6 +35,12 @@ class ClientAdapter : ListAdapter<CoreInfo.ConnectedClientData, ClientAdapter.Cl
                                     newItem: CoreInfo.ConnectedClientData) = oldItem == newItem
   }
 ) {
+  private val movementMethod = BetterLinkMovementMethod.newInstance()
+
+  init {
+    movementMethod.setOnLinkLongClickListener(LinkLongClickMenuHelper())
+  }
+
   private var disconnectListener: ((Int) -> Unit)? = null
   fun setDisconnectListener(listener: ((Int) -> Unit)?) {
     this.disconnectListener = listener
@@ -45,7 +53,8 @@ class ClientAdapter : ListAdapter<CoreInfo.ConnectedClientData, ClientAdapter.Cl
   override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ClientViewHolder(
     LayoutInflater.from(parent.context).inflate(R.layout.widget_client, parent, false),
     dateTimeFormatter,
-    ::disconnect
+    ::disconnect,
+    movementMethod
   )
 
   private val dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
@@ -56,7 +65,8 @@ class ClientAdapter : ListAdapter<CoreInfo.ConnectedClientData, ClientAdapter.Cl
   class ClientViewHolder(
     itemView: View,
     private val dateTimeFormatter: DateTimeFormatter,
-    private val disconnectListener: (Int) -> Unit
+    private val disconnectListener: (Int) -> Unit,
+    movementMethod: BetterLinkMovementMethod
   ) : RecyclerView.ViewHolder(itemView) {
 
     @BindView(R.id.ip)
@@ -84,6 +94,7 @@ class ClientAdapter : ListAdapter<CoreInfo.ConnectedClientData, ClientAdapter.Cl
 
     init {
       ButterKnife.bind(this, itemView)
+      version.movementMethod = movementMethod
       disconnect.setOnClickListener {
         id?.let(disconnectListener::invoke)
       }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/CoreInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/CoreInfoFragment.kt
index 63bd080f6..0f1e01b0b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/CoreInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/core/CoreInfoFragment.kt
@@ -41,6 +41,8 @@ import de.kuschku.quasseldroid.util.missingfeatures.MissingFeature
 import de.kuschku.quasseldroid.util.missingfeatures.MissingFeaturesDialog
 import de.kuschku.quasseldroid.util.missingfeatures.RequiredFeatures
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
+import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod
+import de.kuschku.quasseldroid.util.ui.LinkLongClickMenuHelper
 import org.threeten.bp.ZoneId
 import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
@@ -76,6 +78,12 @@ class CoreInfoFragment : ServiceBoundFragment() {
 
   private val dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
 
+  private val movementMethod = BetterLinkMovementMethod.newInstance()
+
+  init {
+    movementMethod.setOnLinkLongClickListener(LinkLongClickMenuHelper())
+  }
+
   override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                             savedInstanceState: Bundle?): View? {
     val view = inflater.inflate(R.layout.fragment_info_core, container, false)
@@ -106,6 +114,8 @@ class CoreInfoFragment : ServiceBoundFragment() {
         .readOnly(true)
         .show()
     }
+    version.movementMethod = movementMethod
+    versionDate.movementMethod = movementMethod
 
     val secure = requireContext().getVectorDrawableCompat(R.drawable.ic_lock)?.mutate()
     val partiallySecure = requireContext().getVectorDrawableCompat(R.drawable.ic_lock)?.mutate()
-- 
GitLab