Merge branch 'develop' into julioromano/poll_history_entry_point
This commit is contained in:
commit
664e8b6d5b
24 changed files with 219 additions and 54 deletions
|
|
@ -242,7 +242,6 @@ class MessagesFlowNode @AssistedInject constructor(
|
|||
backstack.push(navTarget)
|
||||
}
|
||||
is TimelineItemVideoContent -> {
|
||||
val mediaSource = event.content.videoSource
|
||||
val navTarget = NavTarget.MediaViewer(
|
||||
mediaInfo = MediaInfo(
|
||||
name = event.content.body,
|
||||
|
|
@ -250,13 +249,12 @@ class MessagesFlowNode @AssistedInject constructor(
|
|||
formattedFileSize = event.content.formattedFileSize,
|
||||
fileExtension = event.content.fileExtension
|
||||
),
|
||||
mediaSource = mediaSource,
|
||||
mediaSource = event.content.videoSource,
|
||||
thumbnailSource = event.content.thumbnailSource,
|
||||
)
|
||||
backstack.push(navTarget)
|
||||
}
|
||||
is TimelineItemFileContent -> {
|
||||
val mediaSource = event.content.fileSource
|
||||
val navTarget = NavTarget.MediaViewer(
|
||||
mediaInfo = MediaInfo(
|
||||
name = event.content.body,
|
||||
|
|
@ -264,13 +262,12 @@ class MessagesFlowNode @AssistedInject constructor(
|
|||
formattedFileSize = event.content.formattedFileSize,
|
||||
fileExtension = event.content.fileExtension
|
||||
),
|
||||
mediaSource = mediaSource,
|
||||
mediaSource = event.content.fileSource,
|
||||
thumbnailSource = event.content.thumbnailSource,
|
||||
)
|
||||
backstack.push(navTarget)
|
||||
}
|
||||
is TimelineItemAudioContent -> {
|
||||
val mediaSource = event.content.mediaSource
|
||||
val navTarget = NavTarget.MediaViewer(
|
||||
mediaInfo = MediaInfo(
|
||||
name = event.content.body,
|
||||
|
|
@ -278,7 +275,7 @@ class MessagesFlowNode @AssistedInject constructor(
|
|||
formattedFileSize = event.content.formattedFileSize,
|
||||
fileExtension = event.content.fileExtension
|
||||
),
|
||||
mediaSource = mediaSource,
|
||||
mediaSource = event.content.mediaSource,
|
||||
thumbnailSource = null,
|
||||
)
|
||||
backstack.push(navTarget)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
|||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||
import io.element.android.libraries.matrix.api.room.MessageEventType
|
||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
|
||||
import io.element.android.libraries.matrix.api.verification.SessionVerificationService
|
||||
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
|
||||
|
|
@ -233,7 +234,7 @@ class TimelinePresenter @AssistedInject constructor(
|
|||
if (eventId != null && firstVisibleIndex <= lastReadReceiptIndex.value && eventId != lastReadReceiptId.value) {
|
||||
lastReadReceiptIndex.value = firstVisibleIndex
|
||||
lastReadReceiptId.value = eventId
|
||||
timeline.sendReadReceipt(eventId)
|
||||
timeline.sendReadReceipt(eventId = eventId, receiptType = ReceiptType.READ)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditNode
|
|||
import io.element.android.features.roomdetails.impl.invite.RoomInviteMembersNode
|
||||
import io.element.android.features.roomdetails.impl.members.RoomMemberListNode
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsNode
|
||||
import io.element.android.features.roomdetails.impl.members.details.avatar.RoomMemberAvatarPreviewNode
|
||||
import io.element.android.features.roomdetails.impl.members.details.avatar.AvatarPreviewNode
|
||||
import io.element.android.features.roomdetails.impl.notificationsettings.RoomNotificationSettingsNode
|
||||
import io.element.android.libraries.architecture.BackstackNode
|
||||
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
|
||||
|
|
@ -89,7 +89,7 @@ class RoomDetailsFlowNode @AssistedInject constructor(
|
|||
data class RoomMemberDetails(val roomMemberId: UserId) : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data class MemberAvatarPreview(val userName: String, val avatarUrl: String) : NavTarget
|
||||
data class AvatarPreview(val name: String, val avatarUrl: String) : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data object PollHistory : NavTarget
|
||||
|
|
@ -115,8 +115,8 @@ class RoomDetailsFlowNode @AssistedInject constructor(
|
|||
backstack.push(NavTarget.RoomNotificationSettings(showUserDefinedSettingStyle = false))
|
||||
}
|
||||
|
||||
override fun openAvatarPreview(username: String, url: String) {
|
||||
backstack.push(NavTarget.MemberAvatarPreview(username, url))
|
||||
override fun openAvatarPreview(name: String, url: String) {
|
||||
backstack.push(NavTarget.AvatarPreview(name, url))
|
||||
}
|
||||
|
||||
override fun openPollHistory() {
|
||||
|
|
@ -160,7 +160,7 @@ class RoomDetailsFlowNode @AssistedInject constructor(
|
|||
is NavTarget.RoomMemberDetails -> {
|
||||
val callback = object : RoomMemberDetailsNode.Callback {
|
||||
override fun openAvatarPreview(username: String, avatarUrl: String) {
|
||||
backstack.push(NavTarget.MemberAvatarPreview(username, avatarUrl))
|
||||
backstack.push(NavTarget.AvatarPreview(username, avatarUrl))
|
||||
}
|
||||
|
||||
override fun onStartDM(roomId: RoomId) {
|
||||
|
|
@ -170,22 +170,22 @@ class RoomDetailsFlowNode @AssistedInject constructor(
|
|||
val plugins = listOf(RoomMemberDetailsNode.RoomMemberDetailsInput(navTarget.roomMemberId), callback)
|
||||
createNode<RoomMemberDetailsNode>(buildContext, plugins)
|
||||
}
|
||||
is NavTarget.MemberAvatarPreview -> {
|
||||
is NavTarget.AvatarPreview -> {
|
||||
// We need to fake the MimeType here for the viewer to work.
|
||||
val mimeType = MimeTypes.Images
|
||||
val input = MediaViewerNode.Inputs(
|
||||
mediaInfo = MediaInfo(
|
||||
name = navTarget.userName,
|
||||
name = navTarget.name,
|
||||
mimeType = mimeType,
|
||||
formattedFileSize = "",
|
||||
fileExtension = ""
|
||||
),
|
||||
mediaSource = MediaSource(url = navTarget.avatarUrl),
|
||||
thumbnailSource = MediaSource(url = navTarget.avatarUrl),
|
||||
thumbnailSource = null,
|
||||
canDownload = false,
|
||||
canShare = false,
|
||||
)
|
||||
createNode<RoomMemberAvatarPreviewNode>(buildContext, listOf(input))
|
||||
createNode<AvatarPreviewNode>(buildContext, listOf(input))
|
||||
}
|
||||
|
||||
is NavTarget.PollHistory -> {
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class RoomDetailsNode @AssistedInject constructor(
|
|||
fun openInviteMembers()
|
||||
fun editRoomDetails()
|
||||
fun openRoomNotificationSettings()
|
||||
fun openAvatarPreview(username: String, url: String)
|
||||
fun openAvatarPreview(name: String, url: String)
|
||||
fun openPollHistory()
|
||||
}
|
||||
|
||||
|
|
@ -116,8 +116,8 @@ class RoomDetailsNode @AssistedInject constructor(
|
|||
callbacks.forEach { it.editRoomDetails() }
|
||||
}
|
||||
|
||||
private fun openAvatarPreview(username: String, url: String) {
|
||||
callbacks.forEach { it.openAvatarPreview(username, url) }
|
||||
private fun openAvatarPreview(name: String, url: String) {
|
||||
callbacks.forEach { it.openAvatarPreview(name, url) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package io.element.android.features.roomdetails.impl
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
|
@ -77,6 +78,7 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
|||
import io.element.android.libraries.designsystem.utils.CommonDrawables
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.getBestName
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
@Composable
|
||||
|
|
@ -89,7 +91,7 @@ fun RoomDetailsView(
|
|||
openRoomMemberList: () -> Unit,
|
||||
openRoomNotificationSettings: () -> Unit,
|
||||
invitePeople: () -> Unit,
|
||||
openAvatarPreview: (username: String, url: String) -> Unit,
|
||||
openAvatarPreview: (name: String, url: String) -> Unit,
|
||||
openPollHistory: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
|
|
@ -121,7 +123,10 @@ fun RoomDetailsView(
|
|||
avatarUrl = state.roomAvatarUrl,
|
||||
roomId = state.roomId,
|
||||
roomName = state.roomName,
|
||||
roomAlias = state.roomAlias
|
||||
roomAlias = state.roomAlias,
|
||||
openAvatarPreview = { avatarUrl ->
|
||||
openAvatarPreview(state.roomName, avatarUrl)
|
||||
},
|
||||
)
|
||||
MainActionsSection(
|
||||
state = state,
|
||||
|
|
@ -135,10 +140,8 @@ fun RoomDetailsView(
|
|||
avatarUrl = state.roomAvatarUrl ?: member.avatarUrl,
|
||||
userId = member.userId.value,
|
||||
userName = state.roomName,
|
||||
openAvatarPreview = {
|
||||
if (member.avatarUrl != null) {
|
||||
openAvatarPreview(member.displayName ?: member.userId.value, member.avatarUrl!!)
|
||||
}
|
||||
openAvatarPreview = { avatarUrl ->
|
||||
openAvatarPreview(member.getBestName(), avatarUrl)
|
||||
},
|
||||
)
|
||||
RoomMemberMainActionsSection(onShareUser = ::onShareMember)
|
||||
|
|
@ -270,6 +273,7 @@ private fun RoomHeaderSection(
|
|||
roomId: String,
|
||||
roomName: String,
|
||||
roomAlias: String?,
|
||||
openAvatarPreview: (url: String) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Column(
|
||||
|
|
@ -280,7 +284,9 @@ private fun RoomHeaderSection(
|
|||
) {
|
||||
Avatar(
|
||||
avatarData = AvatarData(roomId, roomName, avatarUrl, AvatarSize.RoomHeader),
|
||||
modifier = Modifier.size(70.dp)
|
||||
modifier = Modifier
|
||||
.size(70.dp)
|
||||
.clickable(enabled = avatarUrl != null) { openAvatarPreview(avatarUrl!!) }
|
||||
)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
Text(
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode
|
|||
import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerPresenter
|
||||
|
||||
@ContributesNode(RoomScope::class)
|
||||
class RoomMemberAvatarPreviewNode @AssistedInject constructor(
|
||||
class AvatarPreviewNode @AssistedInject constructor(
|
||||
@Assisted buildContext: BuildContext,
|
||||
@Assisted plugins: List<Plugin>,
|
||||
presenterFactory: MediaViewerPresenter.Factory,
|
||||
Loading…
Add table
Add a link
Reference in a new issue