From 28a1cf6982ffc60a919d87c2bc63fb98a7653e7a Mon Sep 17 00:00:00 2001 From: ganfra 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 { - 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() - 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 { + 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() { @EpoxyAttribute lateinit var matrixItem: MatrixItem - @EpoxyAttribute - var identifier: String? = null - @EpoxyAttribute var globalListener: (() -> Unit)? = null