From 28a1cf6982ffc60a919d87c2bc63fb98a7653e7a Mon Sep 17 00:00:00 2001
From: ganfra <francoisg@matrix.org>
Date: Thu, 27 Aug 2020 11:44:21 +0200
Subject: [PATCH] Join room: clean up after benoit's remarks

---
 .../api/session/permalinks/PermalinkParser.kt | 50 ++++---------------
 .../features/permalink/PermalinkHandler.kt    |  9 ++--
 .../roomdirectory/PublicRoomsController.kt    |  2 +-
 .../features/roomdirectory/UnknownRoomItem.kt |  3 --
 4 files changed, 14 insertions(+), 50 deletions(-)

diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt
index d741367376..59e289ffd7 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt
@@ -18,11 +18,8 @@
 package org.matrix.android.sdk.api.session.permalinks
 
 import android.net.Uri
+import android.net.UrlQuerySanitizer
 import org.matrix.android.sdk.api.MatrixPatterns
-import java.io.UnsupportedEncodingException
-import java.net.URLEncoder
-import java.util.ArrayList
-import java.util.Collections
 
 /**
  * This class turns an uri to a [PermalinkData]
@@ -50,7 +47,7 @@ object PermalinkParser {
         }
         val indexOfQuery = fragment.indexOf("?")
         val safeFragment = if (indexOfQuery != -1) fragment.substring(0, indexOfQuery) else fragment
-        val viaQueryParameters = fragment.getViaParameters(indexOfQuery)
+        val viaQueryParameters = fragment.getViaParameters()
 
         // we are limiting to 2 params
         val params = safeFragment
@@ -84,42 +81,13 @@ object PermalinkParser {
         }
     }
 
-    private fun String.getViaParameters(indexOfQuery: Int): List<String> {
-        val query = try {
-            substring(indexOfQuery + 1)
-        } catch (e: IndexOutOfBoundsException) {
-            return emptyList()
-        }
-        val encodedKey = try {
-            URLEncoder.encode("via", "UTF-8")
-        } catch (e: UnsupportedEncodingException) {
-            return emptyList()
-        }
-        val values = ArrayList<String>()
-        var start = 0
-        do {
-            val nextAmpersand = query.indexOf('&', start)
-            val end = if (nextAmpersand != -1) nextAmpersand else query.length
-            var separator = query.indexOf('=', start)
-            if (separator > end || separator == -1) {
-                separator = end
-            }
-            if (separator - start == encodedKey.length
-                    && query.regionMatches(start, encodedKey, 0, encodedKey.length)) {
-                if (separator == end) {
-                    values.add("")
-                } else {
-                    values.add(Uri.decode(query.substring(separator + 1, end)))
+    private fun String.getViaParameters(): List<String> {
+        return UrlQuerySanitizer(this)
+                .parameterList
+                .filter {
+                    it.mParameter == "via"
+                }.map {
+                    it.mValue
                 }
-            }
-
-            // Move start to end of name.
-            start = if (nextAmpersand != -1) {
-                nextAmpersand + 1
-            } else {
-                break
-            }
-        } while (true)
-        return Collections.unmodifiableList(values)
     }
 }
diff --git a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt b/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt
index 4ca16888a5..11c55f6a73 100644
--- a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt
+++ b/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt
@@ -139,13 +139,15 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti
             return
         }
         val roomSummary = session.getRoomSummary(roomId)
+        val membership = roomSummary?.membership
         val eventId = permalinkData.eventId
         val roomAlias = permalinkData.getRoomAliasOrNull()
         return when {
-            roomSummary?.membership?.isActive().orFalse() -> {
+            membership == Membership.BAN     -> context.toast(R.string.error_opening_banned_room)
+            membership?.isActive().orFalse() -> {
                 navigator.openRoom(context, roomId, eventId, buildTask)
             }
-            roomSummary?.membership != Membership.BAN     -> {
+            else                             -> {
                 val roomPreviewData = RoomPreviewData(
                         roomId = roomId,
                         eventId = eventId,
@@ -157,9 +159,6 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti
                 )
                 navigator.openRoomPreview(context, roomPreviewData)
             }
-            else                                          -> {
-                context.toast(R.string.error_opening_banned_room)
-            }
         }
     }
 }
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsController.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsController.kt
index a35725815b..b71b494948 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsController.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsController.kt
@@ -127,7 +127,7 @@ class PublicRoomsController @Inject constructor(private val stringProvider: Stri
         return roomItem?.let {
             UnknownRoomItem_().apply {
                 id(roomIdOrAlias)
-                matrixItem(roomItem)
+                matrixItem(it)
                 avatarRenderer(this@PublicRoomsController.avatarRenderer)
                 globalListener {
                     callback?.onUnknownRoomClicked(roomIdOrAlias)
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/UnknownRoomItem.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/UnknownRoomItem.kt
index cf0ad811a2..084f518405 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/UnknownRoomItem.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/UnknownRoomItem.kt
@@ -36,9 +36,6 @@ abstract class UnknownRoomItem : VectorEpoxyModel<UnknownRoomItem.Holder>() {
     @EpoxyAttribute
     lateinit var matrixItem: MatrixItem
 
-    @EpoxyAttribute
-    var identifier: String? = null
-
     @EpoxyAttribute
     var globalListener: (() -> Unit)? = null