Room: remove bestName and use displayName instead of name where it makes sense
This commit is contained in:
parent
79eef06995
commit
03b2cbb06f
9 changed files with 26 additions and 36 deletions
|
|
@ -105,7 +105,7 @@ private suspend fun MatrixClient.leaveRoom(
|
||||||
room.leave().onSuccess {
|
room.leave().onSuccess {
|
||||||
roomMembershipObserver.notifyUserLeftRoom(room.roomId)
|
roomMembershipObserver.notifyUserLeftRoom(room.roomId)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
Timber.e(it, "Error while leaving room ${room.name} - ${room.roomId}")
|
Timber.e(it, "Error while leaving room ${room.displayName} - ${room.roomId}")
|
||||||
error.value = LeaveRoomState.Error.Shown
|
error.value = LeaveRoomState.Error.Shown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
|
@ -107,13 +108,12 @@ class MessagesPresenter @AssistedInject constructor(
|
||||||
|
|
||||||
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
|
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
|
||||||
val userHasPermissionToSendMessage by room.canSendEventAsState(type = MessageEventType.ROOM_MESSAGE, updateKey = syncUpdateFlow.value)
|
val userHasPermissionToSendMessage by room.canSendEventAsState(type = MessageEventType.ROOM_MESSAGE, updateKey = syncUpdateFlow.value)
|
||||||
val roomName: MutableState<String?> = rememberSaveable {
|
val roomName by produceState(initialValue = room.displayName, key1 = syncUpdateFlow.value){
|
||||||
mutableStateOf(null)
|
value = room.displayName
|
||||||
}
|
}
|
||||||
val roomAvatar: MutableState<AvatarData?> = remember {
|
val roomAvatar by produceState(initialValue = room.avatarData(), key1 = syncUpdateFlow.value){
|
||||||
mutableStateOf(null)
|
value = room.avatarData()
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasDismissedInviteDialog by rememberSaveable {
|
var hasDismissedInviteDialog by rememberSaveable {
|
||||||
mutableStateOf(false)
|
mutableStateOf(false)
|
||||||
}
|
}
|
||||||
|
|
@ -134,16 +134,6 @@ class MessagesPresenter @AssistedInject constructor(
|
||||||
|
|
||||||
val snackbarMessage by snackbarDispatcher.collectSnackbarMessageAsState()
|
val snackbarMessage by snackbarDispatcher.collectSnackbarMessageAsState()
|
||||||
|
|
||||||
LaunchedEffect(syncUpdateFlow.value) {
|
|
||||||
roomAvatar.value =
|
|
||||||
AvatarData(
|
|
||||||
id = room.roomId.value,
|
|
||||||
name = room.name,
|
|
||||||
url = room.avatarUrl,
|
|
||||||
size = AvatarSize.TimelineRoom
|
|
||||||
)
|
|
||||||
roomName.value = room.name
|
|
||||||
}
|
|
||||||
LaunchedEffect(composerState.mode.relatedEventId) {
|
LaunchedEffect(composerState.mode.relatedEventId) {
|
||||||
timelineState.eventSink(TimelineEvents.SetHighlightedEvent(composerState.mode.relatedEventId))
|
timelineState.eventSink(TimelineEvents.SetHighlightedEvent(composerState.mode.relatedEventId))
|
||||||
}
|
}
|
||||||
|
|
@ -169,8 +159,8 @@ class MessagesPresenter @AssistedInject constructor(
|
||||||
|
|
||||||
return MessagesState(
|
return MessagesState(
|
||||||
roomId = room.roomId,
|
roomId = room.roomId,
|
||||||
roomName = roomName.value,
|
roomName = roomName,
|
||||||
roomAvatar = roomAvatar.value,
|
roomAvatar = roomAvatar,
|
||||||
userHasPermissionToSendMessage = userHasPermissionToSendMessage,
|
userHasPermissionToSendMessage = userHasPermissionToSendMessage,
|
||||||
composerState = composerState,
|
composerState = composerState,
|
||||||
timelineState = timelineState,
|
timelineState = timelineState,
|
||||||
|
|
@ -185,6 +175,15 @@ class MessagesPresenter @AssistedInject constructor(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun MatrixRoom.avatarData(): AvatarData {
|
||||||
|
return AvatarData(
|
||||||
|
id = room.roomId.value,
|
||||||
|
name = room.displayName,
|
||||||
|
url = room.avatarUrl,
|
||||||
|
size = AvatarSize.TimelineRoom
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun CoroutineScope.handleTimelineAction(
|
private fun CoroutineScope.handleTimelineAction(
|
||||||
action: TimelineItemAction,
|
action: TimelineItemAction,
|
||||||
targetEvent: TimelineItem.Event,
|
targetEvent: TimelineItem.Event,
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
@Immutable
|
@Immutable
|
||||||
data class MessagesState(
|
data class MessagesState(
|
||||||
val roomId: RoomId,
|
val roomId: RoomId,
|
||||||
val roomName: String?,
|
val roomName: String,
|
||||||
val roomAvatar: AvatarData?,
|
val roomAvatar: AvatarData,
|
||||||
val userHasPermissionToSendMessage: Boolean,
|
val userHasPermissionToSendMessage: Boolean,
|
||||||
val composerState: MessageComposerState,
|
val composerState: MessageComposerState,
|
||||||
val timelineState: TimelineState,
|
val timelineState: TimelineState,
|
||||||
|
|
|
||||||
|
|
@ -277,8 +277,8 @@ fun MessagesViewContent(
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun MessagesViewTopBar(
|
fun MessagesViewTopBar(
|
||||||
roomTitle: String?,
|
roomTitle: String,
|
||||||
roomAvatar: AvatarData?,
|
roomAvatar: AvatarData,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onRoomDetailsClicked: () -> Unit = {},
|
onRoomDetailsClicked: () -> Unit = {},
|
||||||
onBackPressed: () -> Unit = {},
|
onBackPressed: () -> Unit = {},
|
||||||
|
|
@ -293,14 +293,12 @@ fun MessagesViewTopBar(
|
||||||
modifier = Modifier.clickable { onRoomDetailsClicked() },
|
modifier = Modifier.clickable { onRoomDetailsClicked() },
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
if (roomAvatar != null) {
|
Avatar(roomAvatar)
|
||||||
Avatar(roomAvatar)
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
Spacer(modifier = Modifier.width(8.dp))
|
|
||||||
}
|
|
||||||
Text(
|
Text(
|
||||||
fontSize = 16.sp,
|
fontSize = 16.sp,
|
||||||
fontWeight = FontWeight.SemiBold,
|
fontWeight = FontWeight.SemiBold,
|
||||||
text = roomTitle ?: "Unknown room",
|
text = roomTitle,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ class RoomDetailsPresenter @Inject constructor(
|
||||||
|
|
||||||
return RoomDetailsState(
|
return RoomDetailsState(
|
||||||
roomId = room.roomId.value,
|
roomId = room.roomId.value,
|
||||||
roomName = room.name ?: room.displayName,
|
roomName = room.displayName,
|
||||||
roomAlias = room.alias,
|
roomAlias = room.alias,
|
||||||
roomAvatarUrl = room.avatarUrl,
|
roomAvatarUrl = room.avatarUrl,
|
||||||
roomTopic = topicState,
|
roomTopic = topicState,
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class RoomDetailsPresenterTests {
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.roomId).isEqualTo(room.roomId.value)
|
assertThat(initialState.roomId).isEqualTo(room.roomId.value)
|
||||||
assertThat(initialState.roomName).isEqualTo(room.name)
|
assertThat(initialState.roomName).isEqualTo(room.displayName)
|
||||||
assertThat(initialState.roomAvatarUrl).isEqualTo(room.avatarUrl)
|
assertThat(initialState.roomAvatarUrl).isEqualTo(room.avatarUrl)
|
||||||
assertThat(initialState.roomTopic).isEqualTo(RoomTopicState.ExistingTopic(room.topic!!))
|
assertThat(initialState.roomTopic).isEqualTo(RoomTopicState.ExistingTopic(room.topic!!))
|
||||||
assertThat(initialState.memberCount).isEqualTo(room.joinedMemberCount)
|
assertThat(initialState.memberCount).isEqualTo(room.joinedMemberCount)
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ interface MatrixRoom : Closeable {
|
||||||
val sessionId: SessionId
|
val sessionId: SessionId
|
||||||
val roomId: RoomId
|
val roomId: RoomId
|
||||||
val name: String?
|
val name: String?
|
||||||
val bestName: String
|
|
||||||
val displayName: String
|
val displayName: String
|
||||||
val alias: String?
|
val alias: String?
|
||||||
val alternativeAliases: List<String>
|
val alternativeAliases: List<String>
|
||||||
|
|
|
||||||
|
|
@ -130,11 +130,6 @@ class RustMatrixRoom(
|
||||||
return roomListItem.name()
|
return roomListItem.name()
|
||||||
}
|
}
|
||||||
|
|
||||||
override val bestName: String
|
|
||||||
get() {
|
|
||||||
return name?.takeIf { it.isNotEmpty() } ?: innerRoom.id()
|
|
||||||
}
|
|
||||||
|
|
||||||
override val displayName: String
|
override val displayName: String
|
||||||
get() {
|
get() {
|
||||||
return innerRoom.displayName()
|
return innerRoom.displayName()
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ class FakeMatrixRoom(
|
||||||
override val sessionId: SessionId = A_SESSION_ID,
|
override val sessionId: SessionId = A_SESSION_ID,
|
||||||
override val roomId: RoomId = A_ROOM_ID,
|
override val roomId: RoomId = A_ROOM_ID,
|
||||||
override val name: String? = null,
|
override val name: String? = null,
|
||||||
override val bestName: String = "",
|
|
||||||
override val displayName: String = "",
|
override val displayName: String = "",
|
||||||
override val topic: String? = null,
|
override val topic: String? = null,
|
||||||
override val avatarUrl: String? = null,
|
override val avatarUrl: String? = null,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue