Skip to content

Commit 00169c7

Browse files
committed
knock requests : makes knock can be handled and is enabled
1 parent 5715f60 commit 00169c7

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

features/knockrequests/impl/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ dependencies {
2626
implementation(projects.libraries.matrixui)
2727
implementation(projects.libraries.uiStrings)
2828
implementation(projects.libraries.designsystem)
29+
implementation(projects.libraries.featureflag.api)
2930

3031
testImplementation(libs.test.junit)
3132
testImplementation(libs.coroutines.test)

features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import io.element.android.features.knockrequests.impl.data.KnockRequestsService
1919
import io.element.android.libraries.architecture.Presenter
2020
import io.element.android.libraries.core.coroutine.mapState
2121
import io.element.android.libraries.core.extensions.firstIfSingle
22+
import io.element.android.libraries.featureflag.api.FeatureFlagService
23+
import io.element.android.libraries.featureflag.api.FeatureFlags
2224
import io.element.android.libraries.matrix.api.room.MatrixRoom
25+
import io.element.android.libraries.matrix.ui.room.canHandleKnockRequestsAsState
2326
import io.element.android.libraries.matrix.ui.room.canInviteAsState
2427
import kotlinx.collections.immutable.toImmutableList
2528
import kotlinx.coroutines.CoroutineScope
@@ -33,6 +36,7 @@ class KnockRequestsBannerPresenter @Inject constructor(
3336
private val room: MatrixRoom,
3437
private val knockRequestsService: KnockRequestsService,
3538
private val appCoroutineScope: CoroutineScope,
39+
private val featureFlagService: FeatureFlagService,
3640
) : Presenter<KnockRequestsBannerState> {
3741
@Composable
3842
override fun present(): KnockRequestsBannerState {
@@ -46,11 +50,13 @@ class KnockRequestsBannerPresenter @Inject constructor(
4650

4751
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
4852
val canAccept by room.canInviteAsState(syncUpdateFlow.value)
53+
val canHandleKnockRequests by room.canHandleKnockRequestsAsState(syncUpdateFlow.value)
4954
val showAcceptError = remember { mutableStateOf(false) }
55+
val isKnockRequestsEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock).collectAsState(false)
5056

5157
val shouldShowBanner by remember {
5258
derivedStateOf {
53-
knockRequests.isNotEmpty()
59+
isKnockRequestsEnabled && canHandleKnockRequests && knockRequests.isNotEmpty()
5460
}
5561
}
5662

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
3636
import io.element.android.libraries.matrix.api.room.RoomMember
3737
import io.element.android.libraries.matrix.api.room.StateEventType
3838
import io.element.android.libraries.matrix.api.room.isDm
39+
import io.element.android.libraries.matrix.api.room.join.JoinRule
3940
import io.element.android.libraries.matrix.api.room.powerlevels.canInvite
4041
import io.element.android.libraries.matrix.api.room.powerlevels.canSendState
4142
import io.element.android.libraries.matrix.api.room.roomNotificationSettings
@@ -47,7 +48,9 @@ import io.element.android.services.analytics.api.AnalyticsService
4748
import io.element.android.services.analyticsproviders.api.trackers.captureInteraction
4849
import kotlinx.collections.immutable.toPersistentList
4950
import kotlinx.coroutines.CoroutineScope
51+
import kotlinx.coroutines.flow.collect
5052
import kotlinx.coroutines.flow.launchIn
53+
import kotlinx.coroutines.flow.map
5154
import kotlinx.coroutines.flow.onEach
5255
import kotlinx.coroutines.launch
5356
import javax.inject.Inject
@@ -77,7 +80,7 @@ class RoomDetailsPresenter @Inject constructor(
7780
val roomName by remember { derivedStateOf { (roomInfo?.name ?: room.displayName).trim() } }
7881
val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } }
7982
val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } }
80-
val isPublic by remember { derivedStateOf { roomInfo?.isPublic.orFalse() } }
83+
val joinRule by remember { derivedStateOf { roomInfo?.joinRule } }
8184

8285
val canShowPinnedMessages = isPinnedMessagesFeatureEnabled()
8386
var canShowMediaGallery by remember { mutableStateOf(false) }
@@ -106,22 +109,23 @@ class RoomDetailsPresenter @Inject constructor(
106109
val roomType by getRoomType(dmMember, currentMember)
107110
val roomCallState = roomCallStatePresenter.present()
108111

109-
val canHandleKnockRequests by room.canHandleKnockRequestsAsState(syncUpdateFlow.value)
110112

111113
val topicState = remember(canEditTopic, roomTopic, roomType) {
112114
val topic = roomTopic
113-
114115
when {
115116
!topic.isNullOrBlank() -> RoomTopicState.ExistingTopic(topic)
116117
canEditTopic && roomType is RoomDetailsType.Room -> RoomTopicState.CanAddTopic
117118
else -> RoomTopicState.Hidden
118119
}
119120
}
120121

122+
val canHandleKnockRequests by room.canHandleKnockRequestsAsState(syncUpdateFlow.value)
121123
val isKnockRequestsEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock).collectAsState(false)
122-
val knockRequestsCount by remember { mutableStateOf(null) }
124+
val knockRequestsCount by produceState<Int?>(null) {
125+
room.knockRequestsFlow.collect { value = it.size }
126+
}
123127
val canShowKnockRequests by remember {
124-
derivedStateOf { isKnockRequestsEnabled && canHandleKnockRequests }
128+
derivedStateOf { isKnockRequestsEnabled && canHandleKnockRequests && joinRule == JoinRule.Knock }
125129
}
126130

127131
val roomNotificationSettingsState by room.roomNotificationSettingsStateFlow.collectAsState()
@@ -164,7 +168,7 @@ class RoomDetailsPresenter @Inject constructor(
164168
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
165169
isFavorite = isFavorite,
166170
displayRolesAndPermissionsSettings = !room.isDm && isUserAdmin,
167-
isPublic = isPublic,
171+
isPublic = joinRule == JoinRule.Public,
168172
heroes = roomInfo?.heroes.orEmpty().toPersistentList(),
169173
canShowPinnedMessages = canShowPinnedMessages,
170174
canShowMediaGallery = canShowMediaGallery,

0 commit comments

Comments
 (0)