diff --git a/CHANGES.rst b/CHANGES.rst index 48ff4085b..3136b496b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,7 @@ Changes to be released in next version 🙌 Improvements * RoomMemberDetailsVC: Enable / disable "Hide all messages from this user" from settings (#4281). + * RoomVC: Show / Hide More and Report Content contextual menu from settings (#4285). 🐛 Bugfix * RoomVC: Avoid navigation to integration management using integration popup with settings set to integration disabled (#4261). diff --git a/Config/BuildSettings.swift b/Config/BuildSettings.swift index 8e3f081b3..00a7a8123 100644 --- a/Config/BuildSettings.swift +++ b/Config/BuildSettings.swift @@ -268,6 +268,12 @@ final class BuildSettings: NSObject { static let roomScreenAllowMediaLibraryAction: Bool = true static let roomScreenAllowStickerAction: Bool = true static let roomScreenAllowFilesAction: Bool = true + + // MARK: - Room Contextual Menu + + static let roomContextualMenuShowMoreOptionForMessages: Bool = true + static let roomContextualMenuShowMoreOptionForStates: Bool = true + static let roomContextualMenuShowReportContentOption: Bool = true // MARK: - Room Info Screen diff --git a/Riot/Managers/Settings/RiotSettings.swift b/Riot/Managers/Settings/RiotSettings.swift index 1126d178e..9d05078f1 100644 --- a/Riot/Managers/Settings/RiotSettings.swift +++ b/Riot/Managers/Settings/RiotSettings.swift @@ -71,6 +71,9 @@ final class RiotSettings: NSObject { static let roomScreenAllowMediaLibraryAction = "roomScreenAllowMediaLibraryAction" static let roomScreenAllowStickerAction = "roomScreenAllowStickerAction" static let roomScreenAllowFilesAction = "roomScreenAllowFilesAction" + static let roomContextualMenuShowMoreOptionForMessages = "roomContextualMenuShowMoreOptionForMessages" + static let roomContextualMenuShowMoreOptionForStates = "roomContextualMenuShowMoreOptionForStates" + static let roomContextualMenuShowReportContentOption = "roomContextualMenuShowReportContentOption" static let roomInfoScreenShowIntegrations = "roomInfoScreenShowIntegrations" static let roomMemberScreenShowIgnore = "roomMemberScreenShowIgnore" static let unifiedSearchScreenShowPublicDirectory = "unifiedSearchScreenShowPublicDirectory" @@ -323,6 +326,39 @@ final class RiotSettings: NSObject { defaults.set(newValue, forKey: UserDefaultsKeys.roomScreenAllowFilesAction) } } + + // MARK: - Room Contextual Menu + + var roomContextualMenuShowMoreOptionForMessages: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForMessages) != nil else { + return BuildSettings.roomContextualMenuShowMoreOptionForMessages + } + return defaults.bool(forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForMessages) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForMessages) + } + } + var roomContextualMenuShowMoreOptionForStates: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForStates) != nil else { + return BuildSettings.roomContextualMenuShowMoreOptionForStates + } + return defaults.bool(forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForStates) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.roomContextualMenuShowMoreOptionForStates) + } + } + var roomContextualMenuShowReportContentOption: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.roomContextualMenuShowReportContentOption) != nil else { + return BuildSettings.roomContextualMenuShowReportContentOption + } + return defaults.bool(forKey: UserDefaultsKeys.roomContextualMenuShowReportContentOption) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.roomContextualMenuShowReportContentOption) + } + } // MARK: - Room Info Screen diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index fa4be8496..e999b9b9e 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -2987,7 +2987,7 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05; } } - if (![selectedEvent.sender isEqualToString:self.mainSession.myUser.userId]) + if (![selectedEvent.sender isEqualToString:self.mainSession.myUser.userId] && RiotSettings.shared.roomContextualMenuShowReportContentOption) { [currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"room_event_action_report", @"Vector", nil) style:UIAlertActionStyleDefault @@ -5368,12 +5368,25 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05; ]; } - return @[ - [self copyMenuItemWithEvent:event andCell:cell], - [self replyMenuItemWithEvent:event], - [self editMenuItemWithEvent:event], - [self moreMenuItemWithEvent:event andCell:cell] - ]; + BOOL showMoreOption = ([event.wireType isEqual:kMXEventTypeStringRoomMember] && RiotSettings.shared.roomContextualMenuShowMoreOptionForStates) || (![event.wireType isEqual:kMXEventTypeStringRoomMember] && RiotSettings.shared.roomContextualMenuShowMoreOptionForMessages); + + if (showMoreOption) + { + return @[ + [self copyMenuItemWithEvent:event andCell:cell], + [self replyMenuItemWithEvent:event], + [self editMenuItemWithEvent:event], + [self moreMenuItemWithEvent:event andCell:cell] + ]; + } + else + { + return @[ + [self copyMenuItemWithEvent:event andCell:cell], + [self replyMenuItemWithEvent:event], + [self editMenuItemWithEvent:event] + ]; + } } - (void)showContextualMenuForEvent:(MXEvent*)event fromSingleTapGesture:(BOOL)usedSingleTapGesture cell:(id)cell animated:(BOOL)animated