diff --git a/CHANGES.rst b/CHANGES.rst index aad6c9142..e2a7b5a12 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,7 @@ Changes to be released in next version 🙌 Improvements * MasterTabBarController: Show/Hide Home Screen tabs (#4234). + * RoomVC: Enable / Disable VoIP feature in Rooms (#4236). 🐛 Bugfix * diff --git a/Config/BuildSettings.swift b/Config/BuildSettings.swift index 62625a5e9..e884bd349 100644 --- a/Config/BuildSettings.swift +++ b/Config/BuildSettings.swift @@ -256,6 +256,11 @@ final class BuildSettings: NSObject { static let roomCreationScreenRoomIsEncrypted: Bool = true static let roomCreationScreenAllowRoomTypeConfiguration: Bool = true static let roomCreationScreenRoomIsPublic: Bool = false + + // MARK: - Room Screen + + static let roomScreenAllowVoIPForDirectRoom: Bool = true + static let roomScreenAllowVoIPForNonDirectRoom: Bool = true // MARK: - Room Settings Screen diff --git a/Riot/Managers/Settings/RiotSettings.swift b/Riot/Managers/Settings/RiotSettings.swift index ef3d0594d..04bae3392 100644 --- a/Riot/Managers/Settings/RiotSettings.swift +++ b/Riot/Managers/Settings/RiotSettings.swift @@ -56,6 +56,8 @@ final class RiotSettings: NSObject { static let homeScreenShowPeopleTab = "homeScreenShowPeopleTab" static let homeScreenShowRoomsTab = "homeScreenShowRoomsTab" static let homeScreenShowCommunitiesTab = "homeScreenShowCommunitiesTab" + static let roomScreenAllowVoIPForDirectRoom = "roomScreenAllowVoIPForDirectRoom" + static let roomScreenAllowVoIPForNonDirectRoom = "roomScreenAllowVoIPForNonDirectRoom" } static let shared = RiotSettings() @@ -246,6 +248,29 @@ final class RiotSettings: NSObject { } } + // MARK: - Room Screen + + var roomScreenAllowVoIPForDirectRoom: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.roomScreenAllowVoIPForDirectRoom) != nil else { + return BuildSettings.roomScreenAllowVoIPForDirectRoom + } + return defaults.bool(forKey: UserDefaultsKeys.roomScreenAllowVoIPForDirectRoom) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.roomScreenAllowVoIPForDirectRoom) + } + } + var roomScreenAllowVoIPForNonDirectRoom: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.roomScreenAllowVoIPForNonDirectRoom) != nil else { + return BuildSettings.roomScreenAllowVoIPForNonDirectRoom + } + return defaults.bool(forKey: UserDefaultsKeys.roomScreenAllowVoIPForNonDirectRoom) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.roomScreenAllowVoIPForNonDirectRoom) + } + } + // MARK: - Room Creation Screen var roomCreationScreenAllowEncryptionConfiguration: Bool { diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index e7941a69d..10eabeb65 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -1400,7 +1400,8 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05; - (BOOL)supportCallOption { - return BuildSettings.allowVoIPUsage && self.roomDataSource.mxSession.callManager && self.roomDataSource.room.summary.membersCount.joined >= 2; + BOOL callOptionAllowed = (self.roomDataSource.room.isDirect && RiotSettings.shared.roomScreenAllowVoIPForDirectRoom) || (!self.roomDataSource.room.isDirect && RiotSettings.shared.roomScreenAllowVoIPForNonDirectRoom); + return callOptionAllowed && BuildSettings.allowVoIPUsage && self.roomDataSource.mxSession.callManager && self.roomDataSource.room.summary.membersCount.joined >= 2; } - (BOOL)isCallActive