@@ -36,6 +36,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
3636import io.element.android.libraries.matrix.api.room.RoomMember
3737import io.element.android.libraries.matrix.api.room.StateEventType
3838import io.element.android.libraries.matrix.api.room.isDm
39+ import io.element.android.libraries.matrix.api.room.join.JoinRule
3940import io.element.android.libraries.matrix.api.room.powerlevels.canInvite
4041import io.element.android.libraries.matrix.api.room.powerlevels.canSendState
4142import io.element.android.libraries.matrix.api.room.roomNotificationSettings
@@ -47,7 +48,9 @@ import io.element.android.services.analytics.api.AnalyticsService
4748import io.element.android.services.analyticsproviders.api.trackers.captureInteraction
4849import kotlinx.collections.immutable.toPersistentList
4950import kotlinx.coroutines.CoroutineScope
51+ import kotlinx.coroutines.flow.collect
5052import kotlinx.coroutines.flow.launchIn
53+ import kotlinx.coroutines.flow.map
5154import kotlinx.coroutines.flow.onEach
5255import kotlinx.coroutines.launch
5356import 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