diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 4266432f6..0117d6693 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -458,6 +458,8 @@ "settings_labs_room_members_lazy_loading_error_message" = "Your homeserver does not support lazy loading of room members yet. Try later."; "settings_labs_create_conference_with_jitsi" = "Create conference calls with jitsi"; "settings_labs_message_reaction" = "React to messages with emoji"; +"settings_labs_dm_key_verification" = "Key verification by direct message"; +"settings_labs_cross_signing" = "Cross-Signing"; "settings_version" = "Version %@"; "settings_olm_version" = "Olm Version %@"; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 65f8cc1cc..305d37a19 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -2970,6 +2970,14 @@ internal enum VectorL10n { internal static var settingsLabsCreateConferenceWithJitsi: String { return VectorL10n.tr("Vector", "settings_labs_create_conference_with_jitsi") } + /// Cross-Signing + internal static var settingsLabsCrossSigning: String { + return VectorL10n.tr("Vector", "settings_labs_cross_signing") + } + /// Key verification by direct message + internal static var settingsLabsDmKeyVerification: String { + return VectorL10n.tr("Vector", "settings_labs_dm_key_verification") + } /// End-to-End Encryption internal static var settingsLabsE2eEncryption: String { return VectorL10n.tr("Vector", "settings_labs_e2e_encryption") diff --git a/Riot/Managers/Settings/RiotSettings.swift b/Riot/Managers/Settings/RiotSettings.swift index 59c45e6ab..b98096849 100644 --- a/Riot/Managers/Settings/RiotSettings.swift +++ b/Riot/Managers/Settings/RiotSettings.swift @@ -32,6 +32,8 @@ final class RiotSettings: NSObject { static let pinRoomsWithUnreadMessages = "pinRoomsWithUnread" static let allowStunServerFallback = "allowStunServerFallback" static let stunServerFallback = "stunServerFallback" + static let enableCrossSigning = "enableCrossSigning" + static let enableDMKeyVerification = "enableDMKeyVerification" } /// Riot Standard Room Member Power Level @@ -121,7 +123,22 @@ final class RiotSettings: NSObject { UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.createConferenceCallsWithJitsi) } } + + var enableDMKeyVerification: Bool { + get { + return UserDefaults.standard.bool(forKey: UserDefaultsKeys.enableDMKeyVerification) + } set { + UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.enableDMKeyVerification) + } + } + var enableCrossSigning: Bool { + get { + return UserDefaults.standard.bool(forKey: UserDefaultsKeys.enableCrossSigning) + } set { + UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.enableCrossSigning) + } + } // MARK: Calls diff --git a/Riot/Modules/Settings/SettingsViewController.m b/Riot/Modules/Settings/SettingsViewController.m index 75c8203bc..976bf81ea 100644 --- a/Riot/Modules/Settings/SettingsViewController.m +++ b/Riot/Modules/Settings/SettingsViewController.m @@ -137,6 +137,8 @@ enum LABS_USE_ROOM_MEMBERS_LAZY_LOADING_INDEX = 0, LABS_USE_JITSI_WIDGET_INDEX, LABS_CRYPTO_INDEX, + LABS_DM_KEY_VERIFICATION_INDEX, + LABS_CROSS_SIGNING_INDEX, LABS_COUNT }; @@ -2445,6 +2447,30 @@ SettingsIdentityServerCoordinatorBridgePresenterDelegate> labelAndSwitchCell.mxkSwitch.enabled = NO; } + cell = labelAndSwitchCell; + } + else if (row == LABS_DM_KEY_VERIFICATION_INDEX) + { + MXKTableViewCellWithLabelAndSwitch* labelAndSwitchCell = [self getLabelAndSwitchCell:tableView forIndexPath:indexPath]; + + labelAndSwitchCell.mxkLabel.text = NSLocalizedStringFromTable(@"settings_labs_dm_key_verification", @"Vector", nil); + labelAndSwitchCell.mxkSwitch.on = RiotSettings.shared.enableDMKeyVerification; + labelAndSwitchCell.mxkSwitch.onTintColor = ThemeService.shared.theme.tintColor; + + [labelAndSwitchCell.mxkSwitch addTarget:self action:@selector(toggleLabsDMKeyVerification:) forControlEvents:UIControlEventTouchUpInside]; + + cell = labelAndSwitchCell; + } + else if (row == LABS_CROSS_SIGNING_INDEX) + { + MXKTableViewCellWithLabelAndSwitch* labelAndSwitchCell = [self getLabelAndSwitchCell:tableView forIndexPath:indexPath]; + + labelAndSwitchCell.mxkLabel.text = NSLocalizedStringFromTable(@"settings_labs_cross_signing", @"Vector", nil); + labelAndSwitchCell.mxkSwitch.on = RiotSettings.shared.enableCrossSigning; + labelAndSwitchCell.mxkSwitch.onTintColor = ThemeService.shared.theme.tintColor; + + [labelAndSwitchCell.mxkSwitch addTarget:self action:@selector(toggleLabsCrossSigning:) forControlEvents:UIControlEventTouchUpInside]; + cell = labelAndSwitchCell; } } @@ -3497,6 +3523,20 @@ SettingsIdentityServerCoordinatorBridgePresenterDelegate> } } } + +- (void)toggleLabsDMKeyVerification:(id)sender +{ + UISwitch *switchButton = (UISwitch*)sender; + + RiotSettings.shared.enableDMKeyVerification = switchButton.isOn; +} + +- (void)toggleLabsCrossSigning:(id)sender +{ + UISwitch *switchButton = (UISwitch*)sender; + + RiotSettings.shared.enableCrossSigning = switchButton.isOn; +} - (void)toggleBlacklistUnverifiedDevices:(id)sender {