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
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)
}
}

View File

@ -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)
}
}
}
}

View File

@ -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)

View File

@ -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