Skip to content

Commit 4b16ec6

Browse files
committed
knock requests : branch banner in room
1 parent e744ff0 commit 4b16ec6

File tree

10 files changed

+104
-1
lines changed

10 files changed

+104
-1
lines changed

features/knockrequests/api/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
plugins {
9-
id("io.element.android-library")
9+
id("io.element.android-compose-library")
1010
}
1111

1212
android {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.knockrequests.api.banner
9+
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
13+
interface KnockRequestsBannerRenderer {
14+
@Composable
15+
fun View(modifier: Modifier, onViewRequestsClick: () -> Unit)
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.knockrequests.impl.banner
9+
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import com.squareup.anvil.annotations.ContributesBinding
13+
import io.element.android.features.knockrequests.api.banner.KnockRequestsBannerRenderer
14+
import io.element.android.libraries.di.RoomScope
15+
import javax.inject.Inject
16+
17+
@ContributesBinding(RoomScope::class)
18+
class DefaultKnockRequestsBannerRenderer @Inject constructor(
19+
private val presenter: KnockRequestsBannerPresenter,
20+
): KnockRequestsBannerRenderer {
21+
22+
@Composable
23+
override fun View(modifier: Modifier, onViewRequestsClick: () -> Unit) {
24+
val state = presenter.present()
25+
KnockRequestsBannerView(
26+
state = state,
27+
onDismissClick = {},
28+
onViewRequestsClick = onViewRequestsClick,
29+
)
30+
}
31+
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.knockrequests.impl.banner
9+
10+
import androidx.compose.runtime.Composable
11+
import io.element.android.libraries.architecture.Presenter
12+
import javax.inject.Inject
13+
14+
class KnockRequestsBannerPresenter @Inject constructor(): Presenter<KnockRequestsBannerState> {
15+
@Composable
16+
override fun present(): KnockRequestsBannerState {
17+
return KnockRequestsBannerState.Hidden
18+
}
19+
}

features/messages/impl/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ dependencies {
6565
implementation(libs.vanniktech.blurhash)
6666
implementation(libs.telephoto.zoomableimage)
6767
implementation(libs.matrix.emojibase.bindings)
68+
implementation(projects.features.knockrequests.api)
6869

6970
testImplementation(libs.test.junit)
7071
testImplementation(libs.coroutines.test)

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import im.vector.app.features.analytics.plan.Interaction
2626
import io.element.android.anvilannotations.ContributesNode
2727
import io.element.android.features.call.api.CallType
2828
import io.element.android.features.call.api.ElementCallEntryPoint
29+
import io.element.android.features.knockrequests.api.list.KnockRequestsListEntryPoint
2930
import io.element.android.features.location.api.Location
3031
import io.element.android.features.location.api.SendLocationEntryPoint
3132
import io.element.android.features.location.api.ShowLocationEntryPoint
@@ -95,6 +96,7 @@ class MessagesFlowNode @AssistedInject constructor(
9596
private val mentionSpanTheme: MentionSpanTheme,
9697
private val pinnedEventsTimelineProvider: PinnedEventsTimelineProvider,
9798
private val timelineController: TimelineController,
99+
private val knockRequestsListEntryPoint: KnockRequestsListEntryPoint,
98100
) : BaseFlowNode<MessagesFlowNode.NavTarget>(
99101
backstack = BackStack(
100102
initialElement = plugins.filterIsInstance<MessagesEntryPoint.Params>().first().initialTarget.toNavTarget(),
@@ -146,6 +148,9 @@ class MessagesFlowNode @AssistedInject constructor(
146148

147149
@Parcelize
148150
data object PinnedMessagesList : NavTarget
151+
152+
@Parcelize
153+
data object KnockRequestsList : NavTarget
149154
}
150155

151156
private val callbacks = plugins<MessagesEntryPoint.Callback>()
@@ -226,6 +231,10 @@ class MessagesFlowNode @AssistedInject constructor(
226231
override fun onViewAllPinnedEvents() {
227232
backstack.push(NavTarget.PinnedMessagesList)
228233
}
234+
235+
override fun onViewKnockRequests() {
236+
backstack.push(NavTarget.KnockRequestsList)
237+
}
229238
}
230239
val inputs = MessagesNode.Inputs(focusedEventId = navTarget.focusedEventId)
231240
createNode<MessagesNode>(buildContext, listOf(callback, inputs))
@@ -326,6 +335,9 @@ class MessagesFlowNode @AssistedInject constructor(
326335
NavTarget.Empty -> {
327336
node(buildContext) {}
328337
}
338+
NavTarget.KnockRequestsList -> {
339+
knockRequestsListEntryPoint.createNode(this, buildContext)
340+
}
329341
}
330342
}
331343

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import dagger.assisted.Assisted
2828
import dagger.assisted.AssistedInject
2929
import io.element.android.anvilannotations.ContributesNode
3030
import io.element.android.compound.theme.ElementTheme
31+
import io.element.android.features.knockrequests.api.banner.KnockRequestsBannerRenderer
3132
import io.element.android.features.messages.impl.actionlist.ActionListPresenter
3233
import io.element.android.features.messages.impl.actionlist.model.TimelineItemActionPostProcessor
3334
import io.element.android.features.messages.impl.attachments.Attachment
@@ -71,6 +72,7 @@ class MessagesNode @AssistedInject constructor(
7172
private val timelineItemPresenterFactories: TimelineItemPresenterFactories,
7273
private val mediaPlayer: MediaPlayer,
7374
private val permalinkParser: PermalinkParser,
75+
private val knockRequestsBannerRenderer: KnockRequestsBannerRenderer
7476
) : Node(buildContext, plugins = plugins), MessagesNavigator {
7577
private val presenter = presenterFactory.create(
7678
navigator = this,
@@ -98,6 +100,7 @@ class MessagesNode @AssistedInject constructor(
98100
fun onEditPollClick(eventId: EventId)
99101
fun onJoinCallClick(roomId: RoomId)
100102
fun onViewAllPinnedEvents()
103+
fun onViewKnockRequests()
101104
}
102105

103106
override fun onBuilt() {
@@ -206,6 +209,10 @@ class MessagesNode @AssistedInject constructor(
206209
callbacks.forEach { it.onJoinCallClick(room.roomId) }
207210
}
208211

212+
private fun onViewKnockRequestsClick() {
213+
callbacks.forEach { it.onViewKnockRequests() }
214+
}
215+
209216
@Composable
210217
override fun View(modifier: Modifier) {
211218
val activity = LocalContext.current as Activity
@@ -231,6 +238,12 @@ class MessagesNode @AssistedInject constructor(
231238
onCreatePollClick = this::onCreatePollClick,
232239
onJoinCallClick = this::onJoinCallClick,
233240
onViewAllPinnedMessagesClick = this::onViewAllPinnedMessagesClick,
241+
knockRequestsBanner = { modifier ->
242+
knockRequestsBannerRenderer.View(
243+
modifier = modifier,
244+
onViewRequestsClick = this::onViewKnockRequestsClick
245+
)
246+
},
234247
modifier = modifier,
235248
)
236249

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ fun MessagesView(
118118
onViewAllPinnedMessagesClick: () -> Unit,
119119
modifier: Modifier = Modifier,
120120
forceJumpToBottomVisibility: Boolean = false,
121+
knockRequestsBanner: @Composable (Modifier) -> Unit,
121122
) {
122123
OnLifecycleEvent { _, event ->
123124
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event))
@@ -215,6 +216,7 @@ fun MessagesView(
215216
forceJumpToBottomVisibility = forceJumpToBottomVisibility,
216217
onJoinCallClick = onJoinCallClick,
217218
onViewAllPinnedMessagesClick = onViewAllPinnedMessagesClick,
219+
knockRequestsBanner = knockRequestsBanner,
218220
)
219221
},
220222
snackbarHost = {
@@ -284,6 +286,7 @@ private fun MessagesViewContent(
284286
forceJumpToBottomVisibility: Boolean,
285287
onSwipeToReply: (TimelineItem.Event) -> Unit,
286288
modifier: Modifier = Modifier,
289+
knockRequestsBanner: @Composable (Modifier) -> Unit,
287290
) {
288291
Box(
289292
modifier = modifier
@@ -372,6 +375,9 @@ private fun MessagesViewContent(
372375
onViewAllClick = onViewAllPinnedMessagesClick,
373376
)
374377
}
378+
Box(modifier = Modifier.padding(all = 16.dp)) {
379+
knockRequestsBanner(Modifier)
380+
}
375381
}
376382
},
377383
sheetContent = { subcomposing: Boolean ->
@@ -539,5 +545,6 @@ internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class)
539545
onJoinCallClick = {},
540546
onViewAllPinnedMessagesClick = { },
541547
forceJumpToBottomVisibility = true,
548+
knockRequestsBanner = {},
542549
)
543550
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,7 @@ internal fun MessagesViewWithIdentityChangePreview(
4040
onCreatePollClick = {},
4141
onJoinCallClick = {},
4242
onViewAllPinnedMessagesClick = {},
43+
knockRequestsBanner = {}
44+
4345
)
4446
}

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setMessa
533533
onCreatePollClick = onCreatePollClick,
534534
onJoinCallClick = onJoinCallClick,
535535
onViewAllPinnedMessagesClick = onViewAllPinnedMessagesClick,
536+
knockRequestsBanner = {}
536537
)
537538
}
538539
}

0 commit comments

Comments
 (0)