limit knock FF only room creation and access type changes

# Conflicts:
#	ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift
This commit is contained in:
Mauro Romito
2026-04-30 15:08:55 +02:00
committed by Stefan Ceriu
parent 272c8ca764
commit d02459d9b8
12 changed files with 10 additions and 41 deletions
@@ -238,7 +238,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
case .invite:
state.mode = .inviteRequired
case .knock, .knockRestricted:
state.mode = appSettings.knockingEnabled ? .knockable : .joinable
state.mode = .knockable
case .restricted(let rules):
state.mode = clientProxy.canJoinRoom(with: rules) ? .joinable : .restricted
default:
@@ -261,7 +261,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
case .invite:
state.mode = .inviteRequired
case .knock, .knockRestricted:
state.mode = appSettings.knockingEnabled ? .knockable : .joinable
state.mode = .knockable
case .restricted(let rules):
state.mode = clientProxy.canJoinRoom(with: rules) ? .joinable : .restricted
default:
@@ -404,8 +404,7 @@ struct JoinRoomScreenPreviewWrapper: Identifiable {
self.customPreviewName = customPreviewName
let appSettings = AppSettings()
appSettings.knockingEnabled = true
let clientProxy = ClientProxyMock(.init(hideInviteAvatars: hideInviteAvatars))
clientProxy.canJoinRoomWithReturnValue = canJoinRoom
@@ -64,14 +64,13 @@ struct RoomDetailsScreenViewState: BindableState {
var canJoinCall = false
var pinnedEventsActionState = RoomDetailsScreenPinnedEventsActionState.loading
var knockingEnabled = false
var isKnockableRoom = false
var knockRequestsCount = 0
var reportRoomEnabled = false
var canSeeKnockingRequests: Bool {
knockingEnabled && dmRecipientInfo == nil && isKnockableRoom && (canInviteUsers || canKickUsers || canBanUsers)
dmRecipientInfo == nil && isKnockableRoom && (canInviteUsers || canKickUsers || canBanUsers)
}
var canSeeSecurityAndPrivacy: Bool {
@@ -71,10 +71,6 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
bindings: .init()),
mediaProvider: userSession.mediaProvider)
appSettings.$knockingEnabled
.weakAssign(to: \.state.knockingEnabled, on: self)
.store(in: &cancellables)
Task {
state.reportRoomEnabled = await userSession.clientProxy.isReportRoomSupported
}
@@ -374,7 +374,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
}
private static func makeGenericRoomViewModel(historyVisibility: RoomHistoryVisibility) -> RoomDetailsScreenViewModel {
ServiceLocator.shared.settings.knockingEnabled = true
let knockRequests: [KnockRequestProxyMock] = [.init()]
let members: [RoomMemberProxyMock] = [
@@ -417,7 +416,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
}
private static func makeSimpleRoomViewModel() -> RoomDetailsScreenViewModel {
ServiceLocator.shared.settings.knockingEnabled = true
let knockRequests: [KnockRequestProxyMock] = [.init()]
let members: [RoomMemberProxyMock] = [
@@ -73,7 +73,6 @@ struct RoomScreenViewState: BindableState {
var isDirectOneToOneRoom: Bool
var roomThreadListEnabled = false
var isKnockingEnabled = false
var isKnockableRoom = false
var canAcceptKnocks = false
var canDeclineKnocks = false
@@ -88,8 +87,7 @@ struct RoomScreenViewState: BindableState {
}
var shouldSeeKnockRequests: Bool {
isKnockingEnabled &&
isKnockableRoom &&
isKnockableRoom &&
!displayedKnockRequests.isEmpty &&
(canAcceptKnocks || canDeclineKnocks || canBan)
}
@@ -167,10 +167,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
.weakAssign(to: \.state.roomThreadListEnabled, on: self)
.store(in: &cancellables)
appSettings.$knockingEnabled
.weakAssign(to: \.state.isKnockingEnabled, on: self)
.store(in: &cancellables)
appSettings.$liveLocationSharingSessionsByRoomID
.receive(on: DispatchQueue.main)
.sink { [weak self] sessionsByRoomID in