Skip to content

Commit

Permalink
Add developer option for showing timeline item shields.
Browse files Browse the repository at this point in the history
  • Loading branch information
pixlwave committed Jul 30, 2024
1 parent 0c5888a commit 4f7f64a
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 6 deletions.
4 changes: 4 additions & 0 deletions ElementX/Sources/Application/AppSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ final class AppSettings {
case publicSearchEnabled
case fuzzyRoomListSearchEnabled
case pinningEnabled
case timelineItemShieldsEnabled
}

private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
Expand Down Expand Up @@ -284,6 +285,9 @@ final class AppSettings {

@UserPreference(key: UserDefaultsKeys.pinningEnabled, defaultValue: false, storageType: .userDefaults(store))
var pinningEnabled

@UserPreference(key: UserDefaultsKeys.timelineItemShieldsEnabled, defaultValue: false, storageType: .userDefaults(store))
var timelineItemShieldsEnabled

#endif

Expand Down
2 changes: 2 additions & 0 deletions ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let userID = userSession.clientProxy.userID

let timelineItemFactory = RoomTimelineItemFactory(userID: userID,
shieldsEnabled: appSettings.timelineItemShieldsEnabled,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID))

Expand Down Expand Up @@ -1033,6 +1034,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let userID = userSession.clientProxy.userID

let timelineItemFactory = RoomTimelineItemFactory(userID: userID,
shieldsEnabled: appSettings.timelineItemShieldsEnabled,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
var elementCallBaseURLOverride: URL? { get set }
var fuzzyRoomListSearchEnabled: Bool { get set }
var pinningEnabled: Bool { get set }
var timelineItemShieldsEnabled: Bool { get set }
}

extension AppSettings: DeveloperOptionsProtocol { }
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ struct DeveloperOptionsScreen: View {
Text("Fuzzy searching")
}
}

Section("Encryption") {
Toggle(isOn: $context.timelineItemShieldsEnabled) {
Text("Timeline item shields")
Text("Requires app reboot")
}
}

Section("Element Call") {
TextField(context.viewState.elementCallBaseURL.absoluteString, text: $elementCallBaseURLString)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,14 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {

/// The Matrix ID of the current user.
private let userID: String
private let shieldsEnabled: Bool

init(userID: String,
shieldsEnabled: Bool,
attributedStringBuilder: AttributedStringBuilderProtocol,
stateEventStringBuilder: RoomStateEventStringBuilder) {
self.userID = userID
self.shieldsEnabled = shieldsEnabled
self.attributedStringBuilder = attributedStringBuilder
self.stateEventStringBuilder = stateEventStringBuilder
}
Expand Down Expand Up @@ -157,7 +160,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
properties: RoomTimelineItemProperties(reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildEncryptedTimelineItem(_ eventItemProxy: EventTimelineItemProxy,
Expand Down Expand Up @@ -222,7 +225,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildImageTimelineItem(for eventItemProxy: EventTimelineItemProxy,
Expand All @@ -243,7 +246,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildVideoTimelineItem(for eventItemProxy: EventTimelineItemProxy,
Expand All @@ -264,7 +267,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildAudioTimelineItem(for eventItemProxy: EventTimelineItemProxy,
Expand All @@ -285,7 +288,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildVoiceTimelineItem(for eventItemProxy: EventTimelineItemProxy,
Expand All @@ -306,7 +309,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
reactions: aggregateReactions(eventItemProxy.reactions),
deliveryStatus: eventItemProxy.deliveryStatus,
orderedReadReceipts: orderReadReceipts(eventItemProxy.readReceipts),
shield: eventItemProxy.shield))
shield: shieldsEnabled ? eventItemProxy.shield : nil))
}

private func buildFileTimelineItem(for eventItemProxy: EventTimelineItemProxy,
Expand Down
1 change: 1 addition & 0 deletions ElementX/Sources/UITests/UITestsAppCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,7 @@ class MockScreen: Identifiable {
let timelineController = RoomTimelineController(roomProxy: roomProxy,
initialFocussedEventID: nil,
timelineItemFactory: RoomTimelineItemFactory(userID: "@alice:matrix.org",
shieldsEnabled: true,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
stateEventStringBuilder: RoomStateEventStringBuilder(userID: "@alice:matrix.org")),
appSettings: ServiceLocator.shared.settings)
Expand Down
1 change: 1 addition & 0 deletions UnitTests/Sources/TimelineItemFactoryTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class TimelineItemFactoryTests: XCTestCase {
let senderUserID = "@bob:matrix.org"

let factory = RoomTimelineItemFactory(userID: ownUserID,
shieldsEnabled: true,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
stateEventStringBuilder: RoomStateEventStringBuilder(userID: ownUserID))

Expand Down

0 comments on commit 4f7f64a

Please sign in to comment.