Join room: clean up after benoit's remarks
This commit is contained in:
parent
b39a86edbd
commit
28a1cf6982
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user