Join room: clean up after benoit's remarks

This commit is contained in:
ganfra 2020-08-27 11:44:21 +02:00
parent b39a86edbd
commit 28a1cf6982
4 changed files with 14 additions and 50 deletions

View File

@ -18,11 +18,8 @@
package org.matrix.android.sdk.api.session.permalinks package org.matrix.android.sdk.api.session.permalinks
import android.net.Uri import android.net.Uri
import android.net.UrlQuerySanitizer
import org.matrix.android.sdk.api.MatrixPatterns 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] * This class turns an uri to a [PermalinkData]
@ -50,7 +47,7 @@ object PermalinkParser {
} }
val indexOfQuery = fragment.indexOf("?") val indexOfQuery = fragment.indexOf("?")
val safeFragment = if (indexOfQuery != -1) fragment.substring(0, indexOfQuery) else fragment 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 // we are limiting to 2 params
val params = safeFragment val params = safeFragment
@ -84,42 +81,13 @@ object PermalinkParser {
} }
} }
private fun String.getViaParameters(indexOfQuery: Int): List<String> { private fun String.getViaParameters(): List<String> {
val query = try { return UrlQuerySanitizer(this)
substring(indexOfQuery + 1) .parameterList
} catch (e: IndexOutOfBoundsException) { .filter {
return emptyList() it.mParameter == "via"
} }.map {
val encodedKey = try { it.mValue
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)))
} }
} }
// Move start to end of name.
start = if (nextAmpersand != -1) {
nextAmpersand + 1
} else {
break
}
} while (true)
return Collections.unmodifiableList(values)
}
} }

View File

@ -139,13 +139,15 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti
return return
} }
val roomSummary = session.getRoomSummary(roomId) val roomSummary = session.getRoomSummary(roomId)
val membership = roomSummary?.membership
val eventId = permalinkData.eventId val eventId = permalinkData.eventId
val roomAlias = permalinkData.getRoomAliasOrNull() val roomAlias = permalinkData.getRoomAliasOrNull()
return when { 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) navigator.openRoom(context, roomId, eventId, buildTask)
} }
roomSummary?.membership != Membership.BAN -> { else -> {
val roomPreviewData = RoomPreviewData( val roomPreviewData = RoomPreviewData(
roomId = roomId, roomId = roomId,
eventId = eventId, eventId = eventId,
@ -157,9 +159,6 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti
) )
navigator.openRoomPreview(context, roomPreviewData) navigator.openRoomPreview(context, roomPreviewData)
} }
else -> {
context.toast(R.string.error_opening_banned_room)
}
} }
} }
} }

View File

@ -127,7 +127,7 @@ class PublicRoomsController @Inject constructor(private val stringProvider: Stri
return roomItem?.let { return roomItem?.let {
UnknownRoomItem_().apply { UnknownRoomItem_().apply {
id(roomIdOrAlias) id(roomIdOrAlias)
matrixItem(roomItem) matrixItem(it)
avatarRenderer(this@PublicRoomsController.avatarRenderer) avatarRenderer(this@PublicRoomsController.avatarRenderer)
globalListener { globalListener {
callback?.onUnknownRoomClicked(roomIdOrAlias) callback?.onUnknownRoomClicked(roomIdOrAlias)

View File

@ -36,9 +36,6 @@ abstract class UnknownRoomItem : VectorEpoxyModel<UnknownRoomItem.Holder>() {
@EpoxyAttribute @EpoxyAttribute
lateinit var matrixItem: MatrixItem lateinit var matrixItem: MatrixItem
@EpoxyAttribute
var identifier: String? = null
@EpoxyAttribute @EpoxyAttribute
var globalListener: (() -> Unit)? = null var globalListener: (() -> Unit)? = null