Rename fun in Callback for clarity.

This commit is contained in:
Benoit Marty 2025-10-29 10:30:30 +01:00 committed by Benoit Marty
parent 45b5783b23
commit 09a18ad7ca
104 changed files with 658 additions and 664 deletions

View file

@ -220,18 +220,18 @@ class MessagesFlowNode(
return when (navTarget) {
is NavTarget.Messages -> {
val callback = object : MessagesNode.Callback {
override fun onRoomDetailsClick() {
callbacks.forEach { it.onRoomDetailsClick() }
override fun navigateToRoomDetails() {
callbacks.forEach { it.navigateToRoomDetails() }
}
override fun onEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean {
override fun handleEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean {
return processEventClick(
timelineMode = timelineMode,
event = event,
)
}
override fun onPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
override fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
backstack.push(
NavTarget.AttachmentPreview(
attachment = attachments.first(),
@ -241,39 +241,39 @@ class MessagesFlowNode(
)
}
override fun onUserDataClick(userId: UserId) {
callbacks.forEach { it.onUserDataClick(userId) }
override fun navigateToRoomMemberDetails(userId: UserId) {
callbacks.forEach { it.navigateToRoomMemberDetails(userId) }
}
override fun onPermalinkClick(data: PermalinkData) {
callbacks.forEach { it.onPermalinkClick(data, pushToBackstack = true) }
override fun handlePermalinkClick(data: PermalinkData) {
callbacks.forEach { it.handlePermalinkClick(data, pushToBackstack = true) }
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
backstack.push(NavTarget.EventDebugInfo(eventId, debugInfo))
}
override fun onForwardEventClick(eventId: EventId) {
override fun forwardEvent(eventId: EventId) {
backstack.push(NavTarget.ForwardEvent(eventId, fromPinnedEvents = false))
}
override fun onReportMessage(eventId: EventId, senderId: UserId) {
override fun navigateToReportMessage(eventId: EventId, senderId: UserId) {
backstack.push(NavTarget.ReportMessage(eventId, senderId))
}
override fun onSendLocationClick() {
override fun navigateToSendLocation() {
backstack.push(NavTarget.SendLocation(Timeline.Mode.Live))
}
override fun onCreatePollClick() {
override fun navigateToCreatePoll() {
backstack.push(NavTarget.CreatePoll(Timeline.Mode.Live))
}
override fun onEditPollClick(eventId: EventId) {
override fun navigateToEditPoll(eventId: EventId) {
backstack.push(NavTarget.EditPoll(Timeline.Mode.Live, eventId))
}
override fun onJoinCallClick(roomId: RoomId) {
override fun navigateToRoomCall(roomId: RoomId) {
val callType = CallType.RoomCall(
sessionId = sessionId,
roomId = roomId,
@ -282,15 +282,15 @@ class MessagesFlowNode(
elementCallEntryPoint.startCall(callType)
}
override fun onViewAllPinnedEvents() {
override fun navigateToPinnedMessagesList() {
backstack.push(NavTarget.PinnedMessagesList)
}
override fun onViewKnockRequests() {
override fun navigateToKnockRequestsList() {
backstack.push(NavTarget.KnockRequestsList)
}
override fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?) {
override fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?) {
backstack.push(NavTarget.Thread(threadRootId, focusedEventId))
}
}
@ -311,13 +311,13 @@ class MessagesFlowNode(
overlay.hide()
}
override fun onViewInTimeline(eventId: EventId) {
viewInTimeline(eventId)
override fun viewInTimeline(eventId: EventId) {
this@MessagesFlowNode.viewInTimeline(eventId)
}
override fun onForwardEvent(eventId: EventId) {
override fun forwardEvent(eventId: EventId) {
// Need to go to the parent because of the overlay
forwardEvent(eventId)
callbacks.forEach { it.forwardEvent(eventId) }
}
}
mediaViewerEntryPoint.nodeBuilder(this, buildContext)
@ -352,7 +352,7 @@ class MessagesFlowNode(
override fun onDone(roomIds: List<RoomId>) {
backstack.pop()
roomIds.singleOrNull()?.let { roomId ->
callbacks.forEach { it.openRoom(roomId) }
callbacks.forEach { it.navigateToRoom(roomId) }
}
}
}
@ -392,30 +392,30 @@ class MessagesFlowNode(
}
NavTarget.PinnedMessagesList -> {
val callback = object : PinnedMessagesListNode.Callback {
override fun onEventClick(event: TimelineItem.Event) {
override fun handleEventClick(event: TimelineItem.Event) {
processEventClick(
timelineMode = Timeline.Mode.PinnedEvents,
event = event,
)
}
override fun onUserDataClick(userId: UserId) {
callbacks.forEach { it.onUserDataClick(userId) }
override fun navigateToRoomMemberDetails(userId: UserId) {
callbacks.forEach { it.navigateToRoomMemberDetails(userId) }
}
override fun onViewInTimelineClick(eventId: EventId) {
viewInTimeline(eventId)
override fun viewInTimeline(eventId: EventId) {
this@MessagesFlowNode.viewInTimeline(eventId)
}
override fun onRoomPermalinkClick(data: PermalinkData.RoomLink) {
callbacks.forEach { it.onPermalinkClick(data, pushToBackstack = !room.matches(data.roomIdOrAlias)) }
override fun handlePermalinkClick(data: PermalinkData.RoomLink) {
callbacks.forEach { it.handlePermalinkClick(data, pushToBackstack = !room.matches(data.roomIdOrAlias)) }
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
backstack.push(NavTarget.EventDebugInfo(eventId, debugInfo))
}
override fun onForwardEventClick(eventId: EventId) {
override fun handleForwardEventClick(eventId: EventId) {
backstack.push(NavTarget.ForwardEvent(eventId = eventId, fromPinnedEvents = true))
}
}
@ -430,14 +430,14 @@ class MessagesFlowNode(
focusedEventId = navTarget.focusedEventId,
)
val callback = object : ThreadedMessagesNode.Callback {
override fun onEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean {
override fun handleEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean {
return processEventClick(
timelineMode = timelineMode,
event = event,
)
}
override fun onPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
override fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
backstack.push(
NavTarget.AttachmentPreview(
attachment = attachments.first(),
@ -447,39 +447,39 @@ class MessagesFlowNode(
)
}
override fun onUserDataClick(userId: UserId) {
callbacks.forEach { it.onUserDataClick(userId) }
override fun navigateToRoomMemberDetails(userId: UserId) {
callbacks.forEach { it.navigateToRoomMemberDetails(userId) }
}
override fun onPermalinkClick(data: PermalinkData) {
callbacks.forEach { it.onPermalinkClick(data, pushToBackstack = true) }
override fun handlePermalinkClick(data: PermalinkData) {
callbacks.forEach { it.handlePermalinkClick(data, pushToBackstack = true) }
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
backstack.push(NavTarget.EventDebugInfo(eventId, debugInfo))
}
override fun onForwardEventClick(eventId: EventId) {
override fun handleForwardEventClick(eventId: EventId) {
backstack.push(NavTarget.ForwardEvent(eventId, fromPinnedEvents = false))
}
override fun onReportMessage(eventId: EventId, senderId: UserId) {
override fun navigateToReportMessage(eventId: EventId, senderId: UserId) {
backstack.push(NavTarget.ReportMessage(eventId, senderId))
}
override fun onSendLocationClick() {
override fun navigateToSendLocation() {
backstack.push(NavTarget.SendLocation(Timeline.Mode.Thread(navTarget.threadRootId)))
}
override fun onCreatePollClick() {
override fun navigateToCreatePoll() {
backstack.push(NavTarget.CreatePoll(Timeline.Mode.Thread(navTarget.threadRootId)))
}
override fun onEditPollClick(eventId: EventId) {
override fun navigateToEditPoll(eventId: EventId) {
backstack.push(NavTarget.EditPoll(Timeline.Mode.Thread(navTarget.threadRootId), eventId))
}
override fun onJoinCallClick(roomId: RoomId) {
override fun navigateToRoomCall(roomId: RoomId) {
val callType = CallType.RoomCall(
sessionId = sessionId,
roomId = roomId,
@ -488,7 +488,7 @@ class MessagesFlowNode(
elementCallEntryPoint.startCall(callType)
}
override fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?) {
override fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?) {
backstack.push(NavTarget.Thread(threadRootId, focusedEventId))
}
}
@ -502,11 +502,7 @@ class MessagesFlowNode(
roomIdOrAlias = room.roomId.toRoomIdOrAlias(),
eventId = eventId,
)
callbacks.forEach { it.onPermalinkClick(permalinkData, pushToBackstack = false) }
}
private fun forwardEvent(eventId: EventId) {
callbacks.forEach { it.forwardEvent(eventId) }
callbacks.forEach { it.handlePermalinkClick(permalinkData, pushToBackstack = false) }
}
private fun processEventClick(

View file

@ -16,12 +16,12 @@ import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugIn
import kotlinx.collections.immutable.ImmutableList
interface MessagesNavigator {
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun onReportContentClick(eventId: EventId, senderId: UserId)
fun onEditPollClick(eventId: EventId)
fun onPreviewAttachment(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun onNavigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>)
fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?)
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun forwardEvent(eventId: EventId)
fun navigateToReportMessage(eventId: EventId, senderId: UserId)
fun navigateToEditPoll(eventId: EventId)
fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun navigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>)
fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?)
fun onNavigateUp()
}

View file

@ -114,21 +114,21 @@ class MessagesNode(
)
interface Callback : Plugin {
fun onEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean
fun onPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun onUserDataClick(userId: UserId)
fun onPermalinkClick(data: PermalinkData)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun onReportMessage(eventId: EventId, senderId: UserId)
fun onSendLocationClick()
fun onCreatePollClick()
fun onEditPollClick(eventId: EventId)
fun onJoinCallClick(roomId: RoomId)
fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?)
fun onRoomDetailsClick()
fun onViewAllPinnedEvents()
fun onViewKnockRequests()
fun handleEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean
fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun navigateToRoomMemberDetails(userId: UserId)
fun handlePermalinkClick(data: PermalinkData)
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun forwardEvent(eventId: EventId)
fun navigateToReportMessage(eventId: EventId, senderId: UserId)
fun navigateToSendLocation()
fun navigateToCreatePoll()
fun navigateToEditPoll(eventId: EventId)
fun navigateToRoomCall(roomId: RoomId)
fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?)
fun navigateToRoomDetails()
fun navigateToPinnedMessagesList()
fun navigateToKnockRequestsList()
}
override fun onBuilt() {
@ -143,16 +143,16 @@ class MessagesNode(
)
}
private fun onRoomDetailsClick() {
callbacks.forEach { it.onRoomDetailsClick() }
private fun navigateToRoomDetails() {
callbacks.forEach { it.navigateToRoomDetails() }
}
private fun onViewAllPinnedMessagesClick() {
callbacks.forEach { it.onViewAllPinnedEvents() }
private fun navigateToPinnedMessagesList() {
callbacks.forEach { it.navigateToPinnedMessagesList() }
}
private fun onViewKnockRequestsClick() {
callbacks.forEach { it.onViewKnockRequests() }
private fun navigateToKnockRequestsList() {
callbacks.forEach { it.navigateToKnockRequestsList() }
}
private fun onEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean {
@ -160,13 +160,13 @@ class MessagesNode(
// - if callbacks is empty, it will return true and we want to return false.
// - if a callback returns false, the other callback will not be invoked.
return callbacks.takeIf { it.isNotEmpty() }
?.map { it.onEventClick(timelineMode, event) }
?.map { it.handleEventClick(timelineMode, event) }
?.all { it }
.orFalse()
}
private fun onUserDataClick(userId: UserId) {
callbacks.forEach { it.onUserDataClick(userId) }
private fun navigateToRoomMemberDetails(userId: UserId) {
callbacks.forEach { it.navigateToRoomMemberDetails(userId) }
}
private fun onLinkClick(
@ -180,7 +180,7 @@ class MessagesNode(
is PermalinkData.UserLink -> {
// Open the room member profile, it will fallback to
// the user profile if the user is not in the room
callbacks.forEach { it.onUserDataClick(permalink.userId) }
callbacks.forEach { it.navigateToRoomMemberDetails(permalink.userId) }
}
is PermalinkData.RoomLink -> {
handleRoomLinkClick(permalink, eventSink)
@ -211,53 +211,53 @@ class MessagesNode(
displaySameRoomToast()
}
} else {
callbacks.forEach { it.onPermalinkClick(roomLink) }
callbacks.forEach { it.handlePermalinkClick(roomLink) }
}
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.onShowEventDebugInfoClick(eventId, debugInfo) }
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.navigateToEventDebugInfo(eventId, debugInfo) }
}
override fun onForwardEventClick(eventId: EventId) {
callbacks.forEach { it.onForwardEventClick(eventId) }
override fun forwardEvent(eventId: EventId) {
callbacks.forEach { it.forwardEvent(eventId) }
}
override fun onReportContentClick(eventId: EventId, senderId: UserId) {
callbacks.forEach { it.onReportMessage(eventId, senderId) }
override fun navigateToReportMessage(eventId: EventId, senderId: UserId) {
callbacks.forEach { it.navigateToReportMessage(eventId, senderId) }
}
override fun onEditPollClick(eventId: EventId) {
callbacks.forEach { it.onEditPollClick(eventId) }
override fun navigateToEditPoll(eventId: EventId) {
callbacks.forEach { it.navigateToEditPoll(eventId) }
}
override fun onPreviewAttachment(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
callbacks.forEach { it.onPreviewAttachments(attachments, inReplyToEventId) }
override fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
callbacks.forEach { it.navigateToPreviewAttachments(attachments, inReplyToEventId) }
}
override fun onNavigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
override fun navigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
if (roomId == room.roomId) {
displaySameRoomToast()
} else {
val permalinkData = PermalinkData.RoomLink(roomId.toRoomIdOrAlias(), eventId, viaParameters = serverNames.toImmutableList())
callbacks.forEach { it.onPermalinkClick(permalinkData) }
callbacks.forEach { it.handlePermalinkClick(permalinkData) }
}
}
override fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?) {
callbacks.forEach { it.onOpenThread(threadRootId, focusedEventId) }
override fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?) {
callbacks.forEach { it.navigateToThread(threadRootId, focusedEventId) }
}
private fun onSendLocationClick() {
callbacks.forEach { it.onSendLocationClick() }
private fun navigateToSendLocation() {
callbacks.forEach { it.navigateToSendLocation() }
}
private fun onCreatePollClick() {
callbacks.forEach { it.onCreatePollClick() }
private fun navigateToCreatePoll() {
callbacks.forEach { it.navigateToCreatePoll() }
}
private fun onJoinCallClick() {
callbacks.forEach { it.onJoinCallClick(room.roomId) }
private fun navigateToRoomCall() {
callbacks.forEach { it.navigateToRoomCall(room.roomId) }
}
private fun displaySameRoomToast() {
@ -288,7 +288,7 @@ class MessagesNode(
MessagesView(
state = state,
onBackClick = { state.eventSink(MessagesEvents.MarkAsFullyReadAndExit) },
onRoomDetailsClick = this::onRoomDetailsClick,
onRoomDetailsClick = ::navigateToRoomDetails,
onEventContentClick = { isLive, event ->
if (isLive) {
onEventClick(timelineController.mainTimelineMode(), event)
@ -301,7 +301,7 @@ class MessagesNode(
}
}
},
onUserDataClick = this::onUserDataClick,
onUserDataClick = ::navigateToRoomMemberDetails,
onLinkClick = { url, customTab ->
onLinkClick(
activity = activity,
@ -311,15 +311,15 @@ class MessagesNode(
customTab = customTab,
)
},
onSendLocationClick = this::onSendLocationClick,
onCreatePollClick = this::onCreatePollClick,
onJoinCallClick = this::onJoinCallClick,
onViewAllPinnedMessagesClick = this::onViewAllPinnedMessagesClick,
onSendLocationClick = ::navigateToSendLocation,
onCreatePollClick = ::navigateToCreatePoll,
onJoinCallClick = ::navigateToRoomCall,
onViewAllPinnedMessagesClick = ::navigateToPinnedMessagesList,
modifier = modifier,
knockRequestsBannerView = {
knockRequestsBannerRenderer.View(
modifier = Modifier,
onViewRequestsClick = this::onViewKnockRequestsClick
onViewRequestsClick = ::navigateToKnockRequestsList,
)
},
)
@ -327,7 +327,7 @@ class MessagesNode(
state = state.roomMemberModerationState,
onSelectAction = { action, target ->
when (action) {
is ModerationAction.DisplayProfile -> onUserDataClick(target.userId)
is ModerationAction.DisplayProfile -> navigateToRoomMemberDetails(target.userId)
else -> state.roomMemberModerationState.eventSink(RoomMemberModerationEvents.ProcessAction(action, target))
}
},

View file

@ -355,7 +355,7 @@ class MessagesPresenter(
is TimelineItemThreadInfo.ThreadResponse -> targetEvent.threadInfo.threadRootId
is TimelineItemThreadInfo.ThreadRoot, null -> targetEvent.eventId?.toThreadId()
} ?: return@launch
navigator.onOpenThread(threadId, null)
navigator.navigateToThread(threadId, null)
} else {
handleActionReply(targetEvent, composerState, timelineProtectionState)
}
@ -463,7 +463,7 @@ class MessagesPresenter(
when (targetEvent.content) {
is TimelineItemPollContent -> {
if (targetEvent.eventId == null) return
navigator.onEditPollClick(targetEvent.eventId)
navigator.navigateToEditPoll(targetEvent.eventId)
}
else -> {
val composerMode = MessageComposerMode.Edit(
@ -528,17 +528,17 @@ class MessagesPresenter(
}
private fun handleShowDebugInfoAction(event: TimelineItem.Event) {
navigator.onShowEventDebugInfoClick(event.eventId, event.debugInfo)
navigator.navigateToEventDebugInfo(event.eventId, event.debugInfo)
}
private fun handleForwardAction(event: TimelineItem.Event) {
if (event.eventId == null) return
navigator.onForwardEventClick(event.eventId)
navigator.forwardEvent(event.eventId)
}
private fun handleReportAction(event: TimelineItem.Event) {
if (event.eventId == null) return
navigator.onReportContentClick(event.eventId, event.senderId)
navigator.navigateToReportMessage(event.eventId, event.senderId)
}
private fun handleEndPollAction(

View file

@ -528,7 +528,7 @@ class MessageComposerPresenter(
)
val mediaAttachment = Attachment.Media(localMedia)
val inReplyToEventId = (messageComposerContext.composerMode as? MessageComposerMode.Reply)?.eventId
navigator.onPreviewAttachment(persistentListOf(mediaAttachment), inReplyToEventId)
navigator.navigateToPreviewAttachments(persistentListOf(mediaAttachment), inReplyToEventId)
// Reset composer since the attachment will be sent in a separate flow
messageComposerContext.composerMode = MessageComposerMode.Normal

View file

@ -11,7 +11,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
interface PinnedMessagesListNavigator {
fun onViewInTimelineClick(eventId: EventId)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun viewInTimeline(eventId: EventId)
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun forwardEvent(eventId: EventId)
}

View file

@ -48,12 +48,12 @@ class PinnedMessagesListNode(
private val permalinkParser: PermalinkParser,
) : Node(buildContext, plugins = plugins), PinnedMessagesListNavigator {
interface Callback : Plugin {
fun onEventClick(event: TimelineItem.Event)
fun onUserDataClick(userId: UserId)
fun onViewInTimelineClick(eventId: EventId)
fun onRoomPermalinkClick(data: PermalinkData.RoomLink)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun handleEventClick(event: TimelineItem.Event)
fun navigateToRoomMemberDetails(userId: UserId)
fun viewInTimeline(eventId: EventId)
fun handlePermalinkClick(data: PermalinkData.RoomLink)
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun handleForwardEventClick(eventId: EventId)
}
private val presenter = presenterFactory.create(
@ -65,12 +65,12 @@ class PinnedMessagesListNode(
)
private val callbacks = plugins<Callback>()
private fun onEventClick(event: TimelineItem.Event) {
return callbacks.forEach { it.onEventClick(event) }
private fun handleEventClick(event: TimelineItem.Event) {
return callbacks.forEach { it.handleEventClick(event) }
}
private fun onUserDataClick(user: MatrixUser) {
callbacks.forEach { it.onUserDataClick(user.userId) }
private fun navigateToRoomMemberDetails(user: MatrixUser) {
callbacks.forEach { it.navigateToRoomMemberDetails(user.userId) }
}
private fun onLinkClick(context: Context, url: String) {
@ -78,10 +78,10 @@ class PinnedMessagesListNode(
is PermalinkData.UserLink -> {
// Open the room member profile, it will fallback to
// the user profile if the user is not in the room
callbacks.forEach { it.onUserDataClick(permalink.userId) }
callbacks.forEach { it.navigateToRoomMemberDetails(permalink.userId) }
}
is PermalinkData.RoomLink -> {
callbacks.forEach { it.onRoomPermalinkClick(permalink) }
callbacks.forEach { it.handlePermalinkClick(permalink) }
}
is PermalinkData.FallbackLink,
is PermalinkData.RoomEmailInviteLink -> {
@ -90,16 +90,16 @@ class PinnedMessagesListNode(
}
}
override fun onViewInTimelineClick(eventId: EventId) {
callbacks.forEach { it.onViewInTimelineClick(eventId) }
override fun viewInTimeline(eventId: EventId) {
callbacks.forEach { it.viewInTimeline(eventId) }
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.onShowEventDebugInfoClick(eventId, debugInfo) }
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.navigateToEventDebugInfo(eventId, debugInfo) }
}
override fun onForwardEventClick(eventId: EventId) {
callbacks.forEach { it.onForwardEventClick(eventId) }
override fun forwardEvent(eventId: EventId) {
callbacks.forEach { it.handleForwardEventClick(eventId) }
}
@Composable
@ -113,8 +113,8 @@ class PinnedMessagesListNode(
PinnedMessagesListView(
state = state,
onBackClick = ::navigateUp,
onEventClick = ::onEventClick,
onUserDataClick = ::onUserDataClick,
onEventClick = ::handleEventClick,
onUserDataClick = ::navigateToRoomMemberDetails,
onLinkClick = { link -> onLinkClick(context, link.url) },
onLinkLongClick = {
view.performHapticFeedback(

View file

@ -153,18 +153,18 @@ class PinnedMessagesListPresenter(
) = launch {
when (action) {
TimelineItemAction.ViewSource -> {
navigator.onShowEventDebugInfoClick(targetEvent.eventId, targetEvent.debugInfo)
navigator.navigateToEventDebugInfo(targetEvent.eventId, targetEvent.debugInfo)
}
TimelineItemAction.Forward -> {
targetEvent.eventId?.let { eventId ->
navigator.onForwardEventClick(eventId)
navigator.forwardEvent(eventId)
}
}
TimelineItemAction.Unpin -> handleUnpinAction(targetEvent)
TimelineItemAction.ViewInTimeline -> {
targetEvent.eventId?.let { eventId ->
analyticsService.captureInteraction(Interaction.Name.PinnedMessageListViewTimeline)
navigator.onViewInTimelineClick(eventId)
navigator.viewInTimeline(eventId)
}
}
else -> Unit

View file

@ -113,18 +113,18 @@ class ThreadedMessagesNode(
)
interface Callback : Plugin {
fun onEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean
fun onPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun onUserDataClick(userId: UserId)
fun onPermalinkClick(data: PermalinkData)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun onReportMessage(eventId: EventId, senderId: UserId)
fun onSendLocationClick()
fun onCreatePollClick()
fun onEditPollClick(eventId: EventId)
fun onJoinCallClick(roomId: RoomId)
fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?)
fun handleEventClick(timelineMode: Timeline.Mode, event: TimelineItem.Event): Boolean
fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?)
fun navigateToRoomMemberDetails(userId: UserId)
fun handlePermalinkClick(data: PermalinkData)
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun handleForwardEventClick(eventId: EventId)
fun navigateToReportMessage(eventId: EventId, senderId: UserId)
fun navigateToSendLocation()
fun navigateToCreatePoll()
fun navigateToEditPoll(eventId: EventId)
fun navigateToRoomCall(roomId: RoomId)
fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?)
}
override fun onBuilt() {
@ -150,13 +150,13 @@ class ThreadedMessagesNode(
// - if callbacks is empty, it will return true and we want to return false.
// - if a callback returns false, the other callback will not be invoked.
return callbacks.takeIf { it.isNotEmpty() }
?.map { it.onEventClick(timelineMode, event) }
?.map { it.handleEventClick(timelineMode, event) }
?.all { it }
.orFalse()
}
private fun onUserDataClick(userId: UserId) {
callbacks.forEach { it.onUserDataClick(userId) }
private fun navigateToRoomMemberDetails(userId: UserId) {
callbacks.forEach { it.navigateToRoomMemberDetails(userId) }
}
private fun onLinkClick(
@ -170,7 +170,7 @@ class ThreadedMessagesNode(
is PermalinkData.UserLink -> {
// Open the room member profile, it will fallback to
// the user profile if the user is not in the room
callbacks.forEach { it.onUserDataClick(permalink.userId) }
callbacks.forEach { it.navigateToRoomMemberDetails(permalink.userId) }
}
is PermalinkData.RoomLink -> {
handleRoomLinkClick(permalink, eventSink)
@ -204,51 +204,51 @@ class ThreadedMessagesNode(
navigateUp()
}
} else {
callbacks.forEach { it.onPermalinkClick(roomLink) }
callbacks.forEach { it.handlePermalinkClick(roomLink) }
}
}
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.onShowEventDebugInfoClick(eventId, debugInfo) }
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callbacks.forEach { it.navigateToEventDebugInfo(eventId, debugInfo) }
}
override fun onForwardEventClick(eventId: EventId) {
callbacks.forEach { it.onForwardEventClick(eventId) }
override fun forwardEvent(eventId: EventId) {
callbacks.forEach { it.handleForwardEventClick(eventId) }
}
override fun onReportContentClick(eventId: EventId, senderId: UserId) {
callbacks.forEach { it.onReportMessage(eventId, senderId) }
override fun navigateToReportMessage(eventId: EventId, senderId: UserId) {
callbacks.forEach { it.navigateToReportMessage(eventId, senderId) }
}
override fun onEditPollClick(eventId: EventId) {
callbacks.forEach { it.onEditPollClick(eventId) }
override fun navigateToEditPoll(eventId: EventId) {
callbacks.forEach { it.navigateToEditPoll(eventId) }
}
override fun onPreviewAttachment(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
callbacks.forEach { it.onPreviewAttachments(attachments, inReplyToEventId) }
override fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
callbacks.forEach { it.navigateToPreviewAttachments(attachments, inReplyToEventId) }
}
override fun onNavigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
override fun navigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
val permalinkData = PermalinkData.RoomLink(roomId.toRoomIdOrAlias(), eventId, viaParameters = serverNames.toImmutableList())
callbacks.forEach { it.onPermalinkClick(permalinkData) }
callbacks.forEach { it.handlePermalinkClick(permalinkData) }
}
override fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?) {
callbacks.forEach { it.onOpenThread(threadRootId, focusedEventId) }
override fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?) {
callbacks.forEach { it.navigateToThread(threadRootId, focusedEventId) }
}
override fun onNavigateUp() = navigateUp()
private fun onSendLocationClick() {
callbacks.forEach { it.onSendLocationClick() }
private fun navigateToSendLocation() {
callbacks.forEach { it.navigateToSendLocation() }
}
private fun onCreatePollClick() {
callbacks.forEach { it.onCreatePollClick() }
private fun navigateToCreatePoll() {
callbacks.forEach { it.navigateToCreatePoll() }
}
private fun onJoinCallClick() {
callbacks.forEach { it.onJoinCallClick(room.roomId) }
private fun navigateToRoomCall() {
callbacks.forEach { it.navigateToRoomCall(room.roomId) }
}
@Composable
@ -281,7 +281,7 @@ class ThreadedMessagesNode(
}
}
},
onUserDataClick = this::onUserDataClick,
onUserDataClick = this::navigateToRoomMemberDetails,
onLinkClick = { url, customTab ->
onLinkClick(
activity = activity,
@ -291,9 +291,9 @@ class ThreadedMessagesNode(
customTab = customTab,
)
},
onSendLocationClick = this::onSendLocationClick,
onCreatePollClick = this::onCreatePollClick,
onJoinCallClick = this::onJoinCallClick,
onSendLocationClick = this::navigateToSendLocation,
onCreatePollClick = this::navigateToCreatePoll,
onJoinCallClick = this::navigateToRoomCall,
onViewAllPinnedMessagesClick = {},
modifier = modifier,
knockRequestsBannerView = {},

View file

@ -185,7 +185,7 @@ class TimelinePresenter(
}
}
is TimelineEvents.EditPoll -> {
navigator.onEditPollClick(event.pollStartId)
navigator.navigateToEditPoll(event.pollStartId)
}
is TimelineEvents.FocusOnEvent -> sessionCoroutineScope.launch {
focusRequestState.value = FocusRequestState.Requested(event.eventId, event.debounce)
@ -210,10 +210,10 @@ class TimelinePresenter(
is TimelineEvents.NavigateToPredecessorOrSuccessorRoom -> {
// Navigate to the predecessor or successor room
val serverNames = calculateServerNamesForRoom(room)
navigator.onNavigateToRoom(event.roomId, null, serverNames)
navigator.navigateToRoom(event.roomId, null, serverNames)
}
is TimelineEvents.OpenThread -> {
navigator.onOpenThread(
navigator.navigateToThread(
threadRootId = event.threadRootEventId,
focusedEventId = event.focusedEvent,
)
@ -314,7 +314,7 @@ class TimelinePresenter(
if (timelineController.mainTimelineMode() is Timeline.Mode.Thread && threadId == null) {
// We are in a thread timeline, and the event isn't part of a thread, we need to navigate back to the room
focusRequestState.value = FocusRequestState.None
navigator.onNavigateToRoom(room.roomId, eventId, calculateServerNamesForRoom(room))
navigator.navigateToRoom(room.roomId, eventId, calculateServerNamesForRoom(room))
} else {
Timber.tag(tag).d("Focusing on event $eventId - thread $threadId")
timelineController.focusOnEvent(eventId, threadId)
@ -331,7 +331,7 @@ class TimelinePresenter(
} else {
focusRequestState.value = FocusRequestState.Success(eventId = result.threadId.asEventId())
// It's part of a thread we're not in, let's open it in another timeline
navigator.onOpenThread(result.threadId, eventId)
navigator.navigateToThread(result.threadId, eventId)
}
}
}

View file

@ -116,11 +116,11 @@ class DefaultMessagesEntryPointTest {
)
}
val callback = object : MessagesEntryPoint.Callback {
override fun onRoomDetailsClick() = lambdaError()
override fun onUserDataClick(userId: UserId) = lambdaError()
override fun onPermalinkClick(data: PermalinkData, pushToBackstack: Boolean) = lambdaError()
override fun navigateToRoomDetails() = lambdaError()
override fun navigateToRoomMemberDetails(userId: UserId) = lambdaError()
override fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) = lambdaError()
override fun forwardEvent(eventId: EventId) = lambdaError()
override fun openRoom(roomId: RoomId) = lambdaError()
override fun navigateToRoom(roomId: RoomId) = lambdaError()
}
val initialTarget = MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID)
val params = MessagesEntryPoint.Params(initialTarget)

View file

@ -26,31 +26,31 @@ class FakeMessagesNavigator(
private val onOpenThreadLambda: (threadRootId: ThreadId, focusedEventId: EventId?) -> Unit = { _, _ -> lambdaError() },
private val onNavigateUpLambda: () -> Unit = { lambdaError() },
) : MessagesNavigator {
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
onShowEventDebugInfoClickLambda(eventId, debugInfo)
}
override fun onForwardEventClick(eventId: EventId) {
override fun forwardEvent(eventId: EventId) {
onForwardEventClickLambda(eventId)
}
override fun onReportContentClick(eventId: EventId, senderId: UserId) {
override fun navigateToReportMessage(eventId: EventId, senderId: UserId) {
onReportContentClickLambda(eventId, senderId)
}
override fun onEditPollClick(eventId: EventId) {
override fun navigateToEditPoll(eventId: EventId) {
onEditPollClickLambda(eventId)
}
override fun onPreviewAttachment(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
override fun navigateToPreviewAttachments(attachments: ImmutableList<Attachment>, inReplyToEventId: EventId?) {
onPreviewAttachmentLambda(attachments, inReplyToEventId)
}
override fun onNavigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
override fun navigateToRoom(roomId: RoomId, eventId: EventId?, serverNames: List<String>) {
onNavigateToRoomLambda(roomId, eventId, serverNames)
}
override fun onOpenThread(threadRootId: ThreadId, focusedEventId: EventId?) {
override fun navigateToThread(threadRootId: ThreadId, focusedEventId: EventId?) {
onOpenThreadLambda(threadRootId, focusedEventId)
}

View file

@ -12,17 +12,17 @@ import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugIn
class FakePinnedMessagesListNavigator : PinnedMessagesListNavigator {
var onViewInTimelineClickLambda: ((EventId) -> Unit)? = null
override fun onViewInTimelineClick(eventId: EventId) {
override fun viewInTimeline(eventId: EventId) {
onViewInTimelineClickLambda?.invoke(eventId)
}
var onShowEventDebugInfoClickLambda: ((EventId?, TimelineItemDebugInfo) -> Unit)? = null
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
onShowEventDebugInfoClickLambda?.invoke(eventId, debugInfo)
}
var onForwardEventClickLambda: ((EventId) -> Unit)? = null
override fun onForwardEventClick(eventId: EventId) {
override fun forwardEvent(eventId: EventId) {
onForwardEventClickLambda?.invoke(eventId)
}
}