Add Forward action to MediaDetailsBottomSheet. Closes #5454

Improve API of Callback when forwarding Event.
This commit is contained in:
Benoit Marty
2025-10-28 16:02:37 +01:00
committed by Benoit Marty
parent e9cfce915a
commit 21bae4aee2
35 changed files with 190 additions and 36 deletions

View File

@@ -24,7 +24,7 @@ interface ForwardEntryPoint : FeatureEntryPoint {
}
interface Callback : Plugin {
fun onForwardedToSingleRoom(roomId: RoomId)
fun onForwardDone(roomIds: List<RoomId>)
}
data class Params(

View File

@@ -13,9 +13,9 @@ import com.bumble.appyx.core.plugin.Plugin
import dev.zacsweers.metro.ContributesBinding
import io.element.android.features.forward.api.ForwardEntryPoint
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SessionScope
@ContributesBinding(RoomScope::class)
@ContributesBinding(SessionScope::class)
class DefaultForwardEntryPoint : ForwardEntryPoint {
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ForwardEntryPoint.NodeBuilder {
val plugins = ArrayList<Plugin>()

View File

@@ -23,7 +23,7 @@ import io.element.android.annotations.ContributesNode
import io.element.android.features.forward.api.ForwardEntryPoint
import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.timeline.TimelineProvider
@@ -31,7 +31,7 @@ import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint
import io.element.android.libraries.roomselect.api.RoomSelectMode
import kotlinx.parcelize.Parcelize
@ContributesNode(RoomScope::class)
@ContributesNode(SessionScope::class)
@AssistedInject
class ForwardMessagesNode(
@Assisted buildContext: BuildContext,
@@ -65,7 +65,7 @@ class ForwardMessagesNode(
}
override fun onCancel() {
navigateUp()
onForwardDone(emptyList())
}
}
@@ -86,16 +86,12 @@ class ForwardMessagesNode(
val state = presenter.present()
ForwardMessagesView(
state = state,
onForwardSuccess = ::onForwardSuccess,
onForwardSuccess = ::onForwardDone,
)
}
}
private fun onForwardSuccess(roomIds: List<RoomId>) {
navigateUp()
if (roomIds.size == 1) {
val targetRoomId = roomIds.first()
callbacks.forEach { it.onForwardedToSingleRoom(targetRoomId) }
}
private fun onForwardDone(roomIds: List<RoomId>) {
callbacks.forEach { it.onForwardDone(roomIds) }
}
}

View File

@@ -46,7 +46,7 @@ class DefaultForwardEntryPointTest {
)
}
val callback = object : ForwardEntryPoint.Callback {
override fun onForwardedToSingleRoom(roomId: RoomId) = lambdaError()
override fun onForwardDone(roomIds: List<RoomId>) = lambdaError()
}
val params = ForwardEntryPoint.Params(
eventId = AN_EVENT_ID,