Fix Threads not tappable in pinned messages list (#6535)
This commit is contained in:
parent
c5b19292e7
commit
060592b39c
7 changed files with 28 additions and 1 deletions
|
|
@ -432,6 +432,10 @@ class MessagesFlowNode(
|
||||||
override fun handleForwardEventClick(eventId: EventId) {
|
override fun handleForwardEventClick(eventId: EventId) {
|
||||||
backstack.push(NavTarget.ForwardEvent(eventId = eventId, fromPinnedEvents = true))
|
backstack.push(NavTarget.ForwardEvent(eventId = eventId, fromPinnedEvents = true))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun navigateToThread(threadRootId: ThreadId) {
|
||||||
|
backstack.push(NavTarget.Thread(threadRootId, null))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
createNode<PinnedMessagesListNode>(buildContext, plugins = listOf(callback))
|
createNode<PinnedMessagesListNode>(buildContext, plugins = listOf(callback))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,9 @@ package io.element.android.features.messages.impl.pinned.list
|
||||||
|
|
||||||
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
||||||
import io.element.android.features.messages.impl.timeline.model.TimelineItem
|
import io.element.android.features.messages.impl.timeline.model.TimelineItem
|
||||||
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
|
|
||||||
sealed interface PinnedMessagesListEvent {
|
sealed interface PinnedMessagesListEvent {
|
||||||
data class HandleAction(val action: TimelineItemAction, val event: TimelineItem.Event) : PinnedMessagesListEvent
|
data class HandleAction(val action: TimelineItemAction, val event: TimelineItem.Event) : PinnedMessagesListEvent
|
||||||
|
data class OpenThread(val threadRootId: ThreadId) : PinnedMessagesListEvent
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,12 @@
|
||||||
package io.element.android.features.messages.impl.pinned.list
|
package io.element.android.features.messages.impl.pinned.list
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
|
|
||||||
interface PinnedMessagesListNavigator {
|
interface PinnedMessagesListNavigator {
|
||||||
fun viewInTimeline(eventId: EventId)
|
fun viewInTimeline(eventId: EventId)
|
||||||
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
|
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
|
||||||
fun forwardEvent(eventId: EventId)
|
fun forwardEvent(eventId: EventId)
|
||||||
|
fun navigateToThread(threadRootId: ThreadId)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import io.element.android.libraries.androidutils.system.openUrlInExternalApp
|
||||||
import io.element.android.libraries.architecture.callback
|
import io.element.android.libraries.architecture.callback
|
||||||
import io.element.android.libraries.di.RoomScope
|
import io.element.android.libraries.di.RoomScope
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||||
|
|
@ -55,6 +56,7 @@ class PinnedMessagesListNode(
|
||||||
fun handlePermalinkClick(data: PermalinkData.RoomLink)
|
fun handlePermalinkClick(data: PermalinkData.RoomLink)
|
||||||
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
|
fun navigateToEventDebugInfo(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
|
||||||
fun handleForwardEventClick(eventId: EventId)
|
fun handleForwardEventClick(eventId: EventId)
|
||||||
|
fun navigateToThread(threadRootId: ThreadId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val callback: Callback = callback()
|
private val callback: Callback = callback()
|
||||||
|
|
@ -95,6 +97,10 @@ class PinnedMessagesListNode(
|
||||||
callback.handleForwardEventClick(eventId)
|
callback.handleForwardEventClick(eventId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun navigateToThread(threadRootId: ThreadId) {
|
||||||
|
callback.navigateToThread(threadRootId)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun View(modifier: Modifier) {
|
override fun View(modifier: Modifier) {
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ class PinnedMessagesListPresenter(
|
||||||
fun handleEvent(event: PinnedMessagesListEvent) {
|
fun handleEvent(event: PinnedMessagesListEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is PinnedMessagesListEvent.HandleAction -> sessionCoroutineScope.handleTimelineAction(event.action, event.event)
|
is PinnedMessagesListEvent.HandleAction -> sessionCoroutineScope.handleTimelineAction(event.action, event.event)
|
||||||
|
is PinnedMessagesListEvent.OpenThread -> navigator.navigateToThread(event.threadRootId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import io.element.android.features.messages.impl.actionlist.ActionListView
|
||||||
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
||||||
import io.element.android.features.messages.impl.link.LinkEvent
|
import io.element.android.features.messages.impl.link.LinkEvent
|
||||||
import io.element.android.features.messages.impl.link.LinkView
|
import io.element.android.features.messages.impl.link.LinkView
|
||||||
|
import io.element.android.features.messages.impl.timeline.TimelineEvent
|
||||||
import io.element.android.features.messages.impl.timeline.components.TimelineItemRow
|
import io.element.android.features.messages.impl.timeline.components.TimelineItemRow
|
||||||
import io.element.android.features.messages.impl.timeline.components.event.TimelineItemEventContentView
|
import io.element.android.features.messages.impl.timeline.components.event.TimelineItemEventContentView
|
||||||
import io.element.android.features.messages.impl.timeline.components.layout.ContentAvoidingLayoutData
|
import io.element.android.features.messages.impl.timeline.components.layout.ContentAvoidingLayoutData
|
||||||
|
|
@ -235,7 +236,12 @@ private fun PinnedMessagesListLoaded(
|
||||||
onReadReceiptClick = {},
|
onReadReceiptClick = {},
|
||||||
onSwipeToReply = {},
|
onSwipeToReply = {},
|
||||||
onJoinCallClick = {},
|
onJoinCallClick = {},
|
||||||
eventSink = {},
|
eventSink = { timelineItemEvent ->
|
||||||
|
when (timelineItemEvent) {
|
||||||
|
is TimelineEvent.OpenThread -> state.eventSink(PinnedMessagesListEvent.OpenThread(timelineItemEvent.threadRootEventId))
|
||||||
|
else -> Unit
|
||||||
|
}
|
||||||
|
},
|
||||||
eventContentView = { event, contentModifier, onContentLayoutChange ->
|
eventContentView = { event, contentModifier, onContentLayoutChange ->
|
||||||
TimelineItemEventContentViewWrapper(
|
TimelineItemEventContentViewWrapper(
|
||||||
event = event,
|
event = event,
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
package io.element.android.features.messages.impl.pinned.list
|
package io.element.android.features.messages.impl.pinned.list
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
|
|
||||||
class FakePinnedMessagesListNavigator : PinnedMessagesListNavigator {
|
class FakePinnedMessagesListNavigator : PinnedMessagesListNavigator {
|
||||||
|
|
@ -26,4 +27,9 @@ class FakePinnedMessagesListNavigator : PinnedMessagesListNavigator {
|
||||||
override fun forwardEvent(eventId: EventId) {
|
override fun forwardEvent(eventId: EventId) {
|
||||||
onForwardEventClickLambda?.invoke(eventId)
|
onForwardEventClickLambda?.invoke(eventId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var onOpenThreadLambda: ((ThreadId) -> Unit)? = null
|
||||||
|
override fun navigateToThread(threadRootId: ThreadId) {
|
||||||
|
onOpenThreadLambda?.invoke(threadRootId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue