Skip to content

Commit 75a2c4b

Browse files
Respond to QR code backend feature flag and turn QR code feature on / off according to flag setting
Removed forced unwrapped. qrButton.isHidden initialized with !user.isSelfUser Fix SonarCloud issues. SwiftFormat issue
1 parent 587c6c8 commit 75a2c4b

File tree

28 files changed

+396
-21
lines changed

28 files changed

+396
-21
lines changed

WireDomain/Sources/WireDomain/Repositories/FeatureConfig/FeatureConfigRepository.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,12 @@ public final class FeatureConfigRepository: FeatureConfigRepositoryProtocol {
224224
isEnabled: config.status == .enabled
225225
)
226226

227+
case let .simplifiedUserConnectionRequestQRCode(config):
228+
return FeatureState(
229+
name: .simplifiedUserConnectionRequestQRCode,
230+
isEnabled: config.status == .enabled
231+
)
232+
227233
case let .cells(cellsConfig):
228234
return FeatureState(
229235
name: .cells,

WireDomain/Sources/WireDomain/Synchronization/PullAllFeatureConfigsSync.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ extension FeatureConfigLocalStoreProtocol {
137137
isEnabled: config.status == .enabled,
138138
config: nil
139139
)
140+
case let .simplifiedUserConnectionRequestQRCode(config):
141+
await storeFeature(
142+
name: .simplifiedUserConnectionRequestQRCode,
143+
isEnabled: config.status == .enabled,
144+
config: nil
145+
)
140146
case let .cells(config):
141147
await storeFeature(
142148
name: .cells,

WireDomain/Sources/WireDomain/Utilities/Journal/JournalKey.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public extension JournalKey where Value == Bool {
4545
defaultValue: false
4646
)
4747

48+
static let isSimplifiedUserConnectionRequestQRCode = Self(
49+
"isSimplifiedUserConnectionRequestQRCode",
50+
defaultValue: false
51+
)
52+
4853
/// Whether new sync mechanism (initial sync, incremental
4954
/// sync, live sync) is used.
5055

WireDomain/Sources/WireUpdateEventCoding/Models/FeatureConfigEvent/StorableFeatureConfigUpdateEvent.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,14 @@ struct StorableFeatureConfigUpdateEvent: Equatable, Codable, Sendable {
139139
)
140140
)
141141
)
142+
case let .simplifiedUserConnectionRequestQRCode(config):
143+
.consumableNotifications(
144+
StorableBasicFeatureConfig(
145+
status: StorableFeatureConfigStatus(
146+
config.status
147+
)
148+
)
149+
)
142150
case let .cells(config):
143151
.cells(
144152
StorableBasicFeatureConfig(
@@ -268,6 +276,12 @@ struct StorableFeatureConfigUpdateEvent: Equatable, Codable, Sendable {
268276
status: config.status.toAPIModel()
269277
)
270278
)
279+
case let .simplifiedUserConnectionRequestQRCode(config):
280+
.simplifiedUserConnectionRequestQRCode(
281+
SimplifiedUserConnectionRequestQRCodeConfig(
282+
status: config.status.toAPIModel()
283+
)
284+
)
271285
case let .cells(config):
272286
.cells(
273287
.init(status: config.status.toAPIModel())
@@ -310,6 +324,7 @@ enum StorableFeatureConfig: Equatable, Codable, Sendable {
310324
case channels(StorableChannelsFeatureConfig)
311325
case allowedGlobalOperations(StorableAllowedGlobalOperationsFeatureConfig)
312326
case consumableNotifications(StorableBasicFeatureConfig)
327+
case simplifiedUserConnectionRequestQRCode(StorableBasicFeatureConfig)
313328
case cells(StorableBasicFeatureConfig)
314329
case cellsInternal(StorableCellsInternalFeatureConfig)
315330
case unknown(featureName: String)

WireDomain/Sources/WireUpdateEventCoding/Models/UserEvent/StorableUserClientAddEvent.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,16 @@ private enum StorableUserClientCapability: String, Codable, Sendable {
139139

140140
case legalholdConsent
141141
case consumableNotifications
142+
case simplifiedUserConnectionRequestQRCode
142143

143144
init(_ value: WireNetwork.UserClientCapability) {
144145
switch value {
145146
case .legalholdConsent:
146147
self = .legalholdConsent
147148
case .consumableNotifications:
148149
self = .consumableNotifications
150+
case .simplifiedUserConnectionRequestQRCode:
151+
self = .simplifiedUserConnectionRequestQRCode
149152
}
150153
}
151154

@@ -155,6 +158,8 @@ private enum StorableUserClientCapability: String, Codable, Sendable {
155158
.legalholdConsent
156159
case .consumableNotifications:
157160
.consumableNotifications
161+
case .simplifiedUserConnectionRequestQRCode:
162+
.simplifiedUserConnectionRequestQRCode
158163
}
159164
}
160165

WireDomain/Tests/WireDomainTests/Repositories/FeatureConfigRepositoryTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,11 @@ final class FeatureConfigRepositoryTests: XCTestCase {
277277
status: .enabled
278278
)
279279
),
280+
.simplifiedUserConnectionRequestQRCode(
281+
SimplifiedUserConnectionRequestQRCodeConfig(
282+
status: .disabled
283+
)
284+
),
280285
.cells(
281286
.init(status: .enabled)
282287
),

WireDomain/Tests/WireDomainTests/Synchronization/PullAllFeatureConfigsSyncTests.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ final class PullAllFeatureConfigsSyncTests: XCTestCase {
5454
XCTAssertEqual(api.getFeatureConfigs_Invocations.count, 1)
5555

5656
let storeInvocations = store.storeFeatureNameIsEnabledConfig_Invocations
57-
try XCTAssertCount(storeInvocations, count: 14)
57+
try XCTAssertCount(storeInvocations, count: 15)
5858

5959
XCTAssertEqual(storeInvocations[0].name, .appLock)
6060
XCTAssertEqual(storeInvocations[0].isEnabled, true)
@@ -131,6 +131,9 @@ final class PullAllFeatureConfigsSyncTests: XCTestCase {
131131
storeInvocations[13].config as? Feature.SelfDeletingMessages.Config,
132132
Scaffolding.selfDeletingMessagesFeatureConfig.toDomainModel()
133133
)
134+
XCTAssertEqual(storeInvocations[14].name, .simplifiedUserConnectionRequestQRCode)
135+
XCTAssertFalse(storeInvocations[14].isEnabled)
136+
XCTAssertNil(storeInvocations[14].config)
134137
}
135138

136139
}
@@ -151,7 +154,8 @@ private enum Scaffolding {
151154
.fileSharing(fileSharingFeatureConfig),
152155
.mls(mlsFeatureConfig),
153156
.mlsMigration(mlsMigrationFeatureConfig),
154-
.selfDeletingMessages(selfDeletingMessagesFeatureConfig)
157+
.selfDeletingMessages(selfDeletingMessagesFeatureConfig),
158+
.simplifiedUserConnectionRequestQRCode(simplifiedUserConnectionRequestQRCodeConfig)
155159
]
156160

157161
static let appLockFeatureConfig = AppLockFeatureConfig(
@@ -222,6 +226,10 @@ private enum Scaffolding {
222226
status: .enabled
223227
)
224228

229+
static let simplifiedUserConnectionRequestQRCodeConfig = SimplifiedUserConnectionRequestQRCodeConfig(
230+
status: .disabled
231+
)
232+
225233
static let cellsFeatureConfig = CellsFeatureConfig(
226234
status: .enabled
227235
)

WireNetwork/Sources/WireNetwork/APIs/Rest/FeatureConfigsAPI/FeatureConfigsAPIV14.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct FeatureConfigsResponseAPIV14: Decodable, ToAPIModelConvertible {
6060
let allowedGlobalOperations: FeatureWithConfig<FeatureConfigResponse.AllowedGlobalOperationsV10>
6161
let consumableNotifications: FeatureWithoutConfig
6262
let assetAuditLog: FeatureWithoutConfig
63+
let simplifiedUserConnectionRequestQRCode: FeatureWithoutConfig
6364

6465
// added in v14
6566
let cellsInternal: FeatureWithConfig<FeatureConfigResponse.CellsInternalV14>
@@ -146,6 +147,12 @@ struct FeatureConfigsResponseAPIV14: Decodable, ToAPIModelConvertible {
146147
)
147148
featureConfigs.append(.consumableNotifications(consumableNotifications))
148149

150+
let simplifiedUserConnectionRequestQRCode = SimplifiedUserConnectionRequestQRCodeConfig(
151+
status: simplifiedUserConnectionRequestQRCode.status
152+
.toAPIModel()
153+
)
154+
featureConfigs.append(.simplifiedUserConnectionRequestQRCode(simplifiedUserConnectionRequestQRCode))
155+
149156
featureConfigs.append(.assetAuditLog(AssetAuditLogFeatureConfig(
150157
status: assetAuditLog.status.toAPIModel()
151158
)))

WireNetwork/Sources/WireNetwork/Models/FeatureConfig/FeatureConfig.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public enum FeatureConfig: Equatable, Sendable {
5656

5757
case consumableNotifications(ConsumableNotificationsFeatureConfig)
5858

59+
case simplifiedUserConnectionRequestQRCode(SimplifiedUserConnectionRequestQRCodeConfig)
60+
5961
/// Config for the *Conversation Guest Links* feature.`
6062
///
6163
/// *Conversation Guest Links* enable a group admin to create
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// Wire
3+
// Copyright (C) 2026 Wire Swiss GmbH
4+
//
5+
// This program is free software: you can redistribute it and/or modify
6+
// it under the terms of the GNU General Public License as published by
7+
// the Free Software Foundation, either version 3 of the License, or
8+
// (at your option) any later version.
9+
//
10+
// This program is distributed in the hope that it will be useful,
11+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
// GNU General Public License for more details.
14+
//
15+
// You should have received a copy of the GNU General Public License
16+
// along with this program. If not, see http://www.gnu.org/licenses/.
17+
//
18+
19+
import Foundation
20+
21+
/// A configuration for the *File Sharing* feature.
22+
23+
public struct SimplifiedUserConnectionRequestQRCodeConfig: Equatable, Sendable {
24+
25+
/// The feature's status.
26+
27+
public let status: FeatureConfigStatus
28+
29+
public init(
30+
status: FeatureConfigStatus
31+
) {
32+
self.status = status
33+
}
34+
35+
}

0 commit comments

Comments
 (0)