Fix another issue when there is no name and no canonical alias on a public room

This commit is contained in:
Benoit Marty 2020-02-20 18:47:07 +01:00
parent eec65fb622
commit b72698d63c
4 changed files with 21 additions and 16 deletions

View file

@ -23,66 +23,71 @@ import com.squareup.moshi.JsonClass
*/
@JsonClass(generateAdapter = true)
data class PublicRoom(
/**
* Aliases of the room. May be empty.
*/
@Json(name = "aliases")
var aliases: List<String>? = null,
val aliases: List<String>? = null,
/**
* The canonical alias of the room, if any.
*/
@Json(name = "canonical_alias")
var canonicalAlias: String? = null,
val canonicalAlias: String? = null,
/**
* The name of the room, if any.
*/
@Json(name = "name")
var name: String? = null,
val name: String? = null,
/**
* Required. The number of members joined to the room.
*/
@Json(name = "num_joined_members")
var numJoinedMembers: Int = 0,
val numJoinedMembers: Int = 0,
/**
* Required. The ID of the room.
*/
@Json(name = "room_id")
var roomId: String,
val roomId: String,
/**
* The topic of the room, if any.
*/
@Json(name = "topic")
var topic: String? = null,
val topic: String? = null,
/**
* Required. Whether the room may be viewed by guest users without joining.
*/
@Json(name = "world_readable")
var worldReadable: Boolean = false,
val worldReadable: Boolean = false,
/**
* Required. Whether guest users may join the room and participate in it. If they can,
* they will be subject to ordinary power level rules like any other user.
*/
@Json(name = "guest_can_join")
var guestCanJoin: Boolean = false,
val guestCanJoin: Boolean = false,
/**
* The URL for the room's avatar, if one is set.
*/
@Json(name = "avatar_url")
var avatarUrl: String? = null,
val avatarUrl: String? = null,
/**
* Undocumented item
*/
@Json(name = "m.federate")
var isFederated: Boolean = false
)
val isFederated: Boolean = false
) {
/**
* Return the canonical alias, or the first alias from the list of alias, or null
*/
fun getPrimaryAlias(): String? {
return canonicalAlias ?: aliases?.firstOrNull()
}
}

View file

@ -151,6 +151,6 @@ fun RoomSummary.toMatrixItem() = MatrixItem.RoomItem(roomId, displayName, avatar
fun RoomSummary.toRoomAliasMatrixItem() = MatrixItem.RoomAliasItem(canonicalAlias ?: roomId, displayName, avatarUrl)
// If no name is available, use room alias as Riot-Web does
fun PublicRoom.toMatrixItem() = MatrixItem.RoomItem(roomId, name ?: canonicalAlias, avatarUrl)
fun PublicRoom.toMatrixItem() = MatrixItem.RoomItem(roomId, name ?: getPrimaryAlias() ?: "", avatarUrl)
fun RoomMemberSummary.toMatrixItem() = MatrixItem.UserItem(userId, displayName, avatarUrl)

View file

@ -242,7 +242,7 @@ class EllipsizingTextView @JvmOverloads constructor(context: Context, attrs: Att
@Suppress("DEPRECATION")
protected fun createWorkingLayout(workingText: CharSequence?): Layout {
return StaticLayout(
workingText,
workingText ?: "",
paint,
width - compoundPaddingLeft - compoundPaddingRight,
Layout.Alignment.ALIGN_NORMAL,

View file

@ -85,7 +85,7 @@ class PublicRoomsController @Inject constructor(private val stringProvider: Stri
avatarRenderer(avatarRenderer)
id(publicRoom.roomId)
matrixItem(publicRoom.toMatrixItem())
roomAlias(publicRoom.canonicalAlias)
roomAlias(publicRoom.getPrimaryAlias())
roomTopic(publicRoom.topic)
nbOfMembers(publicRoom.numJoinedMembers)