Skip to content

Commit 2fb7f65

Browse files
authored
Add a feature flag for Simplified Sliding Sync. (#3057)
* Disable SSS when logging out. * Bump the SDK.
1 parent 288d2c2 commit 2fb7f65

File tree

15 files changed

+171
-44
lines changed

15 files changed

+171
-44
lines changed

ElementX.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7449,7 +7449,7 @@
74497449
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
74507450
requirement = {
74517451
kind = exactVersion;
7452-
version = 1.0.25;
7452+
version = 1.0.26;
74537453
};
74547454
};
74557455
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {

ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ElementX/Sources/Application/AppCoordinator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
102102

103103
let keychainController = KeychainController(service: .sessions,
104104
accessGroup: InfoPlistReader.main.keychainAccessGroupIdentifier)
105-
userSessionStore = UserSessionStore(keychainController: keychainController, appHooks: appHooks)
105+
userSessionStore = UserSessionStore(keychainController: keychainController, appSettings: appSettings, appHooks: appHooks)
106106

107107
let appLockService = AppLockService(keychainController: keychainController, appSettings: appSettings)
108108
let appLockNavigationCoordinator = NavigationRootCoordinator()

ElementX/Sources/Application/AppSettings.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ final class AppSettings {
4343
case elementCallEncryptionEnabled
4444

4545
// Feature flags
46+
case simplifiedSlidingSyncEnabled
4647
case publicSearchEnabled
4748
case fuzzyRoomListSearchEnabled
4849
}
@@ -62,6 +63,7 @@ final class AppSettings {
6263
static func resetSessionSpecificSettings() {
6364
MXLog.warning("Resetting the user session specific AppSettings.")
6465
store.removeObject(forKey: UserDefaultsKeys.hasRunIdentityConfirmationOnboarding.rawValue)
66+
store.removeObject(forKey: UserDefaultsKeys.simplifiedSlidingSyncEnabled.rawValue)
6567
}
6668

6769
static func configureWithSuiteName(_ name: String) {
@@ -286,4 +288,9 @@ final class AppSettings {
286288

287289
@UserPreference(key: UserDefaultsKeys.logLevel, defaultValue: TracingConfiguration.LogLevel.info, storageType: .userDefaults(store))
288290
var logLevel
291+
292+
// MARK: Shared Feature Flags
293+
294+
@UserPreference(key: UserDefaultsKeys.simplifiedSlidingSyncEnabled, defaultValue: false, storageType: .userDefaults(store))
295+
var simplifiedSlidingSyncEnabled
289296
}

ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift

Lines changed: 136 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4041,6 +4041,71 @@ open class ClientBuilderSDKMock: MatrixRustSDK.ClientBuilder {
40414041
}
40424042
}
40434043

4044+
//MARK: - disableBuiltInRootCertificates
4045+
4046+
var disableBuiltInRootCertificatesUnderlyingCallsCount = 0
4047+
open var disableBuiltInRootCertificatesCallsCount: Int {
4048+
get {
4049+
if Thread.isMainThread {
4050+
return disableBuiltInRootCertificatesUnderlyingCallsCount
4051+
} else {
4052+
var returnValue: Int? = nil
4053+
DispatchQueue.main.sync {
4054+
returnValue = disableBuiltInRootCertificatesUnderlyingCallsCount
4055+
}
4056+
4057+
return returnValue!
4058+
}
4059+
}
4060+
set {
4061+
if Thread.isMainThread {
4062+
disableBuiltInRootCertificatesUnderlyingCallsCount = newValue
4063+
} else {
4064+
DispatchQueue.main.sync {
4065+
disableBuiltInRootCertificatesUnderlyingCallsCount = newValue
4066+
}
4067+
}
4068+
}
4069+
}
4070+
open var disableBuiltInRootCertificatesCalled: Bool {
4071+
return disableBuiltInRootCertificatesCallsCount > 0
4072+
}
4073+
4074+
var disableBuiltInRootCertificatesUnderlyingReturnValue: ClientBuilder!
4075+
open var disableBuiltInRootCertificatesReturnValue: ClientBuilder! {
4076+
get {
4077+
if Thread.isMainThread {
4078+
return disableBuiltInRootCertificatesUnderlyingReturnValue
4079+
} else {
4080+
var returnValue: ClientBuilder? = nil
4081+
DispatchQueue.main.sync {
4082+
returnValue = disableBuiltInRootCertificatesUnderlyingReturnValue
4083+
}
4084+
4085+
return returnValue!
4086+
}
4087+
}
4088+
set {
4089+
if Thread.isMainThread {
4090+
disableBuiltInRootCertificatesUnderlyingReturnValue = newValue
4091+
} else {
4092+
DispatchQueue.main.sync {
4093+
disableBuiltInRootCertificatesUnderlyingReturnValue = newValue
4094+
}
4095+
}
4096+
}
4097+
}
4098+
open var disableBuiltInRootCertificatesClosure: (() -> ClientBuilder)?
4099+
4100+
open override func disableBuiltInRootCertificates() -> ClientBuilder {
4101+
disableBuiltInRootCertificatesCallsCount += 1
4102+
if let disableBuiltInRootCertificatesClosure = disableBuiltInRootCertificatesClosure {
4103+
return disableBuiltInRootCertificatesClosure()
4104+
} else {
4105+
return disableBuiltInRootCertificatesReturnValue
4106+
}
4107+
}
4108+
40444109
//MARK: - disableSslVerification
40454110

40464111
var disableSslVerificationUnderlyingCallsCount = 0
@@ -4739,6 +4804,77 @@ open class ClientBuilderSDKMock: MatrixRustSDK.ClientBuilder {
47394804
}
47404805
}
47414806

4807+
//MARK: - simplifiedSlidingSync
4808+
4809+
var simplifiedSlidingSyncEnableUnderlyingCallsCount = 0
4810+
open var simplifiedSlidingSyncEnableCallsCount: Int {
4811+
get {
4812+
if Thread.isMainThread {
4813+
return simplifiedSlidingSyncEnableUnderlyingCallsCount
4814+
} else {
4815+
var returnValue: Int? = nil
4816+
DispatchQueue.main.sync {
4817+
returnValue = simplifiedSlidingSyncEnableUnderlyingCallsCount
4818+
}
4819+
4820+
return returnValue!
4821+
}
4822+
}
4823+
set {
4824+
if Thread.isMainThread {
4825+
simplifiedSlidingSyncEnableUnderlyingCallsCount = newValue
4826+
} else {
4827+
DispatchQueue.main.sync {
4828+
simplifiedSlidingSyncEnableUnderlyingCallsCount = newValue
4829+
}
4830+
}
4831+
}
4832+
}
4833+
open var simplifiedSlidingSyncEnableCalled: Bool {
4834+
return simplifiedSlidingSyncEnableCallsCount > 0
4835+
}
4836+
open var simplifiedSlidingSyncEnableReceivedEnable: Bool?
4837+
open var simplifiedSlidingSyncEnableReceivedInvocations: [Bool] = []
4838+
4839+
var simplifiedSlidingSyncEnableUnderlyingReturnValue: ClientBuilder!
4840+
open var simplifiedSlidingSyncEnableReturnValue: ClientBuilder! {
4841+
get {
4842+
if Thread.isMainThread {
4843+
return simplifiedSlidingSyncEnableUnderlyingReturnValue
4844+
} else {
4845+
var returnValue: ClientBuilder? = nil
4846+
DispatchQueue.main.sync {
4847+
returnValue = simplifiedSlidingSyncEnableUnderlyingReturnValue
4848+
}
4849+
4850+
return returnValue!
4851+
}
4852+
}
4853+
set {
4854+
if Thread.isMainThread {
4855+
simplifiedSlidingSyncEnableUnderlyingReturnValue = newValue
4856+
} else {
4857+
DispatchQueue.main.sync {
4858+
simplifiedSlidingSyncEnableUnderlyingReturnValue = newValue
4859+
}
4860+
}
4861+
}
4862+
}
4863+
open var simplifiedSlidingSyncEnableClosure: ((Bool) -> ClientBuilder)?
4864+
4865+
open override func simplifiedSlidingSync(enable: Bool) -> ClientBuilder {
4866+
simplifiedSlidingSyncEnableCallsCount += 1
4867+
simplifiedSlidingSyncEnableReceivedEnable = enable
4868+
DispatchQueue.main.async {
4869+
self.simplifiedSlidingSyncEnableReceivedInvocations.append(enable)
4870+
}
4871+
if let simplifiedSlidingSyncEnableClosure = simplifiedSlidingSyncEnableClosure {
4872+
return simplifiedSlidingSyncEnableClosure(enable)
4873+
} else {
4874+
return simplifiedSlidingSyncEnableReturnValue
4875+
}
4876+
}
4877+
47424878
//MARK: - slidingSyncProxy
47434879

47444880
var slidingSyncProxySlidingSyncProxyUnderlyingCallsCount = 0
@@ -15494,42 +15630,6 @@ open class RoomListItemSDKMock: MatrixRustSDK.RoomListItem {
1549415630
}
1549515631
subscribeSettingsClosure?(settings)
1549615632
}
15497-
15498-
//MARK: - unsubscribe
15499-
15500-
var unsubscribeUnderlyingCallsCount = 0
15501-
open var unsubscribeCallsCount: Int {
15502-
get {
15503-
if Thread.isMainThread {
15504-
return unsubscribeUnderlyingCallsCount
15505-
} else {
15506-
var returnValue: Int? = nil
15507-
DispatchQueue.main.sync {
15508-
returnValue = unsubscribeUnderlyingCallsCount
15509-
}
15510-
15511-
return returnValue!
15512-
}
15513-
}
15514-
set {
15515-
if Thread.isMainThread {
15516-
unsubscribeUnderlyingCallsCount = newValue
15517-
} else {
15518-
DispatchQueue.main.sync {
15519-
unsubscribeUnderlyingCallsCount = newValue
15520-
}
15521-
}
15522-
}
15523-
}
15524-
open var unsubscribeCalled: Bool {
15525-
return unsubscribeCallsCount > 0
15526-
}
15527-
open var unsubscribeClosure: (() -> Void)?
15528-
15529-
open override func unsubscribe() {
15530-
unsubscribeCallsCount += 1
15531-
unsubscribeClosure?()
15532-
}
1553315633
}
1553415634
open class RoomListServiceSDKMock: MatrixRustSDK.RoomListService {
1553515635
init() {

ElementX/Sources/Other/Extensions/ClientBuilder.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ extension ClientBuilder {
2323
httpProxy: String? = nil,
2424
slidingSyncProxy: URL? = nil,
2525
sessionDelegate: ClientSessionDelegate,
26+
simplifiedSlidingSyncEnabled: Bool,
2627
appHooks: AppHooks) -> ClientBuilder {
2728
var builder = ClientBuilder()
2829
.slidingSyncProxy(slidingSyncProxy: slidingSyncProxy?.absoluteString)
2930
.enableCrossProcessRefreshLock(processId: InfoPlistReader.main.bundleIdentifier, sessionDelegate: sessionDelegate)
3031
.userAgent(userAgent: UserAgentBuilder.makeASCIIUserAgent())
32+
.simplifiedSlidingSync(enable: simplifiedSlidingSyncEnabled)
3133

3234
if setupEncryption {
3335
builder = builder

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ enum DeveloperOptionsScreenViewAction {
4646

4747
protocol DeveloperOptionsProtocol: AnyObject {
4848
var logLevel: TracingConfiguration.LogLevel { get set }
49+
var simplifiedSlidingSyncEnabled: Bool { get set }
4950
var hideUnreadMessagesBadge: Bool { get set }
5051
var elementCallBaseURLOverride: URL? { get set }
5152
var fuzzyRoomListSearchEnabled: Bool { get set }

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ struct DeveloperOptionsScreen: View {
2727
LogLevelConfigurationView(logLevel: $context.logLevel)
2828
}
2929

30+
Section("Sliding Sync") {
31+
Toggle(isOn: $context.simplifiedSlidingSyncEnabled) {
32+
Text("Simplified Sliding Sync")
33+
Text("Requires app reboot")
34+
}
35+
}
36+
3037
Section("Room List") {
3138
Toggle(isOn: $context.hideUnreadMessagesBadge) {
3239
Text("Hide grey dots")

ElementX/Sources/Services/Authentication/AuthenticationService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ class AuthenticationService: AuthenticationServiceProtocol {
143143
.baseBuilder(httpProxy: appSettings.websiteURL.globalProxy,
144144
slidingSyncProxy: appSettings.slidingSyncProxyURL,
145145
sessionDelegate: userSessionStore.clientSessionDelegate,
146+
simplifiedSlidingSyncEnabled: appSettings.simplifiedSlidingSyncEnabled,
146147
appHooks: appHooks)
147148
.sessionPath(path: sessionDirectory.path(percentEncoded: false))
148149
.passphrase(passphrase: passphrase)

ElementX/Sources/Services/QRCode/QRCodeLoginService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ final class QRCodeLoginService: QRCodeLoginServiceProtocol {
6161
.baseBuilder(httpProxy: appSettings.websiteURL.globalProxy,
6262
slidingSyncProxy: appSettings.slidingSyncProxyURL,
6363
sessionDelegate: userSessionStore.clientSessionDelegate,
64+
simplifiedSlidingSyncEnabled: appSettings.simplifiedSlidingSyncEnabled,
6465
appHooks: appHooks)
6566
.sessionPath(path: sessionDirectory.path(percentEncoded: false))
6667
.passphrase(passphrase: passphrase)

0 commit comments

Comments
 (0)