diff --git a/Config/BuildSettings.swift b/Config/BuildSettings.swift index df69674d0..5612061e0 100644 --- a/Config/BuildSettings.swift +++ b/Config/BuildSettings.swift @@ -227,7 +227,17 @@ final class BuildSettings: NSObject { static let settingsScreenAllowChangingCrashUsageDataSettings: Bool = true static let settingsScreenAllowBugReportingManually: Bool = true static let settingsScreenAllowDeactivatingAccount: Bool = true - + static let settingsScreenShowChangePassword:Bool = true + static let settingsScreenShowInviteFriends:Bool = true + static let settingsScreenShowEnableStunServerFallback: Bool = true + static let settingsSecurityScreenShowSessions:Bool = true + static let settingsSecurityScreenShowSetupBackup:Bool = true + static let settingsSecurityScreenShowRestoreBackup:Bool = true + static let settingsSecurityScreenShowDeleteBackup:Bool = true + static let settingsSecurityScreenShowCryptographyInfo:Bool = true + static let settingsSecurityScreenShowCryptographyExport:Bool = true + static let settingsSecurityScreenShowAdvancedUnverifiedDevices:Bool = true + // MARK: - Timeline settings static let roomInputToolbarCompressionMode = MXKRoomInputToolbarCompressionModePrompt diff --git a/Riot/Managers/Settings/RiotSettings.swift b/Riot/Managers/Settings/RiotSettings.swift index 7dbbc84d7..014f4502d 100644 --- a/Riot/Managers/Settings/RiotSettings.swift +++ b/Riot/Managers/Settings/RiotSettings.swift @@ -37,9 +37,16 @@ final class RiotSettings: NSObject { static let hideReviewSessionsAlert = "hideReviewSessionsAlert" static let matrixApps = "matrixApps" static let showNSFWPublicRooms = "showNSFWPublicRooms" - static let accountManagedExternally = "accountManagedExternally" - static let inviteFriendsNotAllowed = "inviteFriendsNotAllowed" - static let callsSettingsManagedExternally = "callsSettingsManagedExternally" + static let settingsScreenShowChangePassword = "settingsScreenShowChangePassword" + static let settingsScreenShowInviteFriends = "settingsScreenShowInviteFriends" + static let settingsScreenShowEnableStunServerFallback = "settingsScreenShowEnableStunServerFallback" + static let settingsSecurityScreenShowSessions = "settingsSecurityScreenShowSessions" + static let settingsSecurityScreenShowSetupBackup = "settingsSecurityScreenShowSetupBackup" + static let settingsSecurityScreenShowRestoreBackup = "settingsSecurityScreenShowRestoreBackup" + static let settingsSecurityScreenShowDeleteBackup = "settingsSecurityScreenShowDeleteBackup" + static let settingsSecurityScreenShowCryptographyInfo = "settingsSecurityScreenShowCryptographyInfo" + static let settingsSecurityScreenShowCryptographyExport = "settingsSecurityScreenShowCryptographyExport" + static let settingsSecurityScreenShowAdvancedUnverifiedDevices = "settingsSecurityScreenShowAdvancedBlacklistUnverifiedDevices" } static let shared = RiotSettings() @@ -54,6 +61,19 @@ final class RiotSettings: NSObject { // MARK: - Public + func reset() { + defaults.removeObject(forKey: UserDefaultsKeys.settingsScreenShowChangePassword) + defaults.removeObject(forKey: UserDefaultsKeys.settingsScreenShowInviteFriends) + defaults.removeObject(forKey: UserDefaultsKeys.settingsScreenShowEnableStunServerFallback) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowSessions) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowSetupBackup) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowRestoreBackup) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowDeleteBackup) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyInfo) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyExport) + defaults.removeObject(forKey: UserDefaultsKeys.settingsSecurityScreenShowAdvancedUnverifiedDevices) + } + // MARK: Servers var homeserverUrlString: String { @@ -216,27 +236,106 @@ final class RiotSettings: NSObject { } } - var inviteFriendsNotAllowed: Bool { + // MARK: General Settings + + var settingsScreenShowChangePassword: Bool { get { - return defaults.bool(forKey: UserDefaultsKeys.inviteFriendsNotAllowed) + guard defaults.object(forKey: UserDefaultsKeys.settingsScreenShowChangePassword) != nil else { + return BuildSettings.settingsScreenShowChangePassword + } + return defaults.bool(forKey: UserDefaultsKeys.settingsScreenShowChangePassword) } set { - defaults.set(newValue, forKey: UserDefaultsKeys.inviteFriendsNotAllowed) + defaults.set(newValue, forKey: UserDefaultsKeys.settingsScreenShowChangePassword) } } - - var accountManagedExternally: Bool { + var settingsScreenShowInviteFriends: Bool { get { - return defaults.bool(forKey: UserDefaultsKeys.accountManagedExternally) + guard defaults.object(forKey: UserDefaultsKeys.settingsScreenShowInviteFriends) != nil else { + return BuildSettings.settingsScreenShowInviteFriends + } + return defaults.bool(forKey: UserDefaultsKeys.settingsScreenShowInviteFriends) } set { - defaults.set(newValue, forKey: UserDefaultsKeys.accountManagedExternally) + defaults.set(newValue, forKey: UserDefaultsKeys.settingsScreenShowInviteFriends) } } - - var callsSettingsManagedExternally: Bool { + var settingsScreenShowEnableStunServerFallback: Bool { get { - return defaults.bool(forKey: UserDefaultsKeys.callsSettingsManagedExternally) + guard defaults.object(forKey: UserDefaultsKeys.settingsScreenShowInviteFriends) != nil else { + return BuildSettings.settingsScreenShowEnableStunServerFallback + } + return defaults.bool(forKey: UserDefaultsKeys.settingsScreenShowEnableStunServerFallback) } set { - defaults.set(newValue, forKey: UserDefaultsKeys.callsSettingsManagedExternally) + defaults.set(newValue, forKey: UserDefaultsKeys.settingsScreenShowEnableStunServerFallback) + } + } + var settingsSecurityScreenShowSessions: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowSessions) != nil else { + return BuildSettings.settingsSecurityScreenShowSessions + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowSessions) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowSessions) + } + } + var settingsSecurityScreenShowSetupBackup: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowSetupBackup) != nil else { + return BuildSettings.settingsSecurityScreenShowSetupBackup + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowSetupBackup) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowSetupBackup) + } + } + var settingsSecurityScreenShowRestoreBackup: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowRestoreBackup) != nil else { + return BuildSettings.settingsSecurityScreenShowRestoreBackup + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowRestoreBackup) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowRestoreBackup) + } + } + var settingsSecurityScreenShowDeleteBackup: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowDeleteBackup) != nil else { + return BuildSettings.settingsSecurityScreenShowDeleteBackup + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowDeleteBackup) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowDeleteBackup) + } + } + var settingsSecurityScreenShowCryptographyInfo: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyInfo) != nil else { + return BuildSettings.settingsSecurityScreenShowCryptographyInfo + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyInfo) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyInfo) + } + } + var settingsSecurityScreenShowCryptographyExport: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyExport) != nil else { + return BuildSettings.settingsSecurityScreenShowCryptographyExport + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyExport) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowCryptographyExport) + } + } + var settingsSecurityScreenShowAdvancedUnverifiedDevices: Bool { + get { + guard defaults.object(forKey: UserDefaultsKeys.settingsSecurityScreenShowAdvancedUnverifiedDevices) != nil else { + return BuildSettings.settingsSecurityScreenShowAdvancedUnverifiedDevices + } + return defaults.bool(forKey: UserDefaultsKeys.settingsSecurityScreenShowAdvancedUnverifiedDevices) + } set { + defaults.set(newValue, forKey: UserDefaultsKeys.settingsSecurityScreenShowAdvancedUnverifiedDevices) } } } diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index 4c4ff28f3..501021ddc 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -2136,6 +2136,10 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni [self logoutSendingRequestServer:YES completion:^(BOOL isLoggedOut) { if (completion) { + if (isLoggedOut) + { + [RiotSettings.shared reset]; + } completion (YES); } }]; diff --git a/Riot/Modules/Settings/Security/SecurityViewController.m b/Riot/Modules/Settings/Security/SecurityViewController.m index 48dfc2e87..c087bdfb6 100644 --- a/Riot/Modules/Settings/Security/SecurityViewController.m +++ b/Riot/Modules/Settings/Security/SecurityViewController.m @@ -329,7 +329,7 @@ TableViewSectionsDelegate> // Crypto sessions section - if (!RiotSettings.shared.accountManagedExternally) + if (RiotSettings.shared.settingsSecurityScreenShowSessions) { Section *sessionsSection = [Section sectionWithTag:SECTION_CRYPTO_SESSIONS]; @@ -353,30 +353,36 @@ TableViewSectionsDelegate> // Secure backup - if (!RiotSettings.shared.accountManagedExternally) + Section *secureBackupSection = [Section sectionWithTag:SECTION_SECURE_BACKUP]; + secureBackupSection.headerTitle = NSLocalizedStringFromTable(@"security_settings_secure_backup", @"Vector", nil); + + [secureBackupSection addRowsWithCount:[self numberOfRowsInSecureBackupSection]]; + + if (secureBackupSection.rows.count) { - Section *secureBackupSection = [Section sectionWithTag:SECTION_SECURE_BACKUP]; - secureBackupSection.headerTitle = NSLocalizedStringFromTable(@"security_settings_secure_backup", @"Vector", nil); - - [secureBackupSection addRowsWithCount:[self numberOfRowsInSecureBackupSection]]; - [sections addObject:secureBackupSection]; } // Cryptograhpy - if (!RiotSettings.shared.accountManagedExternally) + Section *cryptograhpySection = [Section sectionWithTag:SECTION_CRYPTOGRAPHY]; + cryptograhpySection.headerTitle = NSLocalizedStringFromTable(@"security_settings_cryptography", @"Vector", nil); + + if (RiotSettings.shared.settingsSecurityScreenShowCryptographyInfo) { - Section *cryptograhpySection = [Section sectionWithTag:SECTION_CRYPTOGRAPHY]; - cryptograhpySection.headerTitle = NSLocalizedStringFromTable(@"security_settings_cryptography", @"Vector", nil); - [cryptograhpySection addRowWithTag:CRYPTOGRAPHY_INFO]; - - [cryptograhpySection addRowWithTag:CRYPTOGRAPHY_EXPORT]; - - [sections addObject:cryptograhpySection]; } + if (RiotSettings.shared.settingsSecurityScreenShowCryptographyExport) + { + [cryptograhpySection addRowWithTag:CRYPTOGRAPHY_EXPORT]; + } + + if (cryptograhpySection.rows.count) + { + [sections addObject:cryptograhpySection]; + } + #ifdef CROSS_SIGNING_AND_BACKUP_DEV // Cross-Signing @@ -401,17 +407,20 @@ TableViewSectionsDelegate> // Advanced - if (!RiotSettings.shared.accountManagedExternally) + Section *advancedSection = [Section sectionWithTag:SECTION_ADVANCED]; + advancedSection.headerTitle = NSLocalizedStringFromTable(@"security_settings_advanced", @"Vector", nil); + + if (RiotSettings.shared.settingsSecurityScreenShowAdvancedUnverifiedDevices) { - Section *advancedSection = [Section sectionWithTag:SECTION_ADVANCED]; - advancedSection.headerTitle = NSLocalizedStringFromTable(@"security_settings_advanced", @"Vector", nil); - [advancedSection addRowWithTag:ADVANCED_BLACKLIST_UNVERIFIED_DEVICES]; [advancedSection addRowWithTag:ADVANCED_BLACKLIST_UNVERIFIED_DEVICES_DESCRIPTION]; - + } + + if (advancedSection.rows.count) + { [sections addObject:advancedSection]; } - + // Update sections self.tableViewSections.sections = sections; @@ -868,28 +877,36 @@ TableViewSectionsDelegate> - (void)refreshSecureBackupSectionData { MXRecoveryService *recoveryService = self.mainSession.crypto.recoveryService; + NSMutableArray *secureBackupSectionState = [NSMutableArray new]; if (recoveryService.hasRecovery) { - secureBackupSectionState = @[ - @(SECURE_BACKUP_RESTORE), - @(SECURE_BACKUP_DELETE), - @(SECURE_BACKUP_DESCRIPTION), - //@(SECURE_BACKUP_MANAGE_MANUALLY), - ]; + if (RiotSettings.shared.settingsSecurityScreenShowRestoreBackup) + { + [secureBackupSectionState addObject:@(SECURE_BACKUP_RESTORE)]; + } + if (RiotSettings.shared.settingsSecurityScreenShowDeleteBackup) + { + [secureBackupSectionState addObject:@(SECURE_BACKUP_DELETE)]; + } } else { - secureBackupSectionState = @[ - @(SECURE_BACKUP_SETUP), - @(SECURE_BACKUP_DESCRIPTION), - //@(SECURE_BACKUP_MANAGE_MANUALLY), - ]; + if (RiotSettings.shared.settingsSecurityScreenShowSetupBackup) + { + [secureBackupSectionState addObject:@(SECURE_BACKUP_SETUP)]; + } } + if (secureBackupSectionState.count) + { + [secureBackupSectionState addObject:@(SECURE_BACKUP_DESCRIPTION)]; + } + #ifdef CROSS_SIGNING_AND_BACKUP_DEV - secureBackupSectionState = [@[@(SECURE_BACKUP_INFO)] arrayByAddingObjectsFromArray:secureBackupSectionState]; + [secureBackupSectionState addObject:@(SECURE_BACKUP_INFO)]; #endif + self->secureBackupSectionState = secureBackupSectionState; } - (NSUInteger)secureBackupSectionEnumForRow:(NSUInteger)row diff --git a/Riot/Modules/Settings/SettingsViewController.m b/Riot/Modules/Settings/SettingsViewController.m index 923c6717d..12adb0364 100644 --- a/Riot/Modules/Settings/SettingsViewController.m +++ b/Riot/Modules/Settings/SettingsViewController.m @@ -300,7 +300,7 @@ TableViewSectionsDelegate> Section *sectionUserSettings = [Section sectionWithTag:SECTION_TAG_USER_SETTINGS]; [sectionUserSettings addRowWithTag:USER_SETTINGS_PROFILE_PICTURE_INDEX]; [sectionUserSettings addRowWithTag:USER_SETTINGS_DISPLAYNAME_INDEX]; - if (!RiotSettings.shared.accountManagedExternally) + if (RiotSettings.shared.settingsScreenShowChangePassword) { [sectionUserSettings addRowWithTag:USER_SETTINGS_CHANGE_PASSWORD_INDEX]; } @@ -335,7 +335,7 @@ TableViewSectionsDelegate> { [sectionUserSettings addRowWithTag:USER_SETTINGS_THREEPIDS_INFORMATION_INDEX]; } - if (!RiotSettings.shared.inviteFriendsNotAllowed) + if (RiotSettings.shared.settingsScreenShowInviteFriends) { [sectionUserSettings addRowWithTag:USER_SETTINGS_INVITE_FRIENDS_INDEX]; } @@ -357,14 +357,21 @@ TableViewSectionsDelegate> sectionNotificationSettings.headerTitle = NSLocalizedStringFromTable(@"settings_notifications_settings", @"Vector", nil); [tmpSections addObject:sectionNotificationSettings]; - if (BuildSettings.allowVoIPUsage && BuildSettings.stunServerFallbackUrlString - && !RiotSettings.shared.callsSettingsManagedExternally) + if (BuildSettings.allowVoIPUsage && BuildSettings.stunServerFallbackUrlString) { Section *sectionCalls = [Section sectionWithTag:SECTION_TAG_CALLS]; - [sectionCalls addRowWithTag:CALLS_ENABLE_STUN_SERVER_FALLBACK_INDEX]; - [sectionCalls addRowWithTag:CALLS_STUN_SERVER_FALLBACK_DESCRIPTION_INDEX]; sectionCalls.headerTitle = NSLocalizedStringFromTable(@"settings_calls_settings", @"Vector", nil); - [tmpSections addObject:sectionCalls]; + + if (RiotSettings.shared.settingsScreenShowEnableStunServerFallback) + { + [sectionCalls addRowWithTag:CALLS_ENABLE_STUN_SERVER_FALLBACK_INDEX]; + [sectionCalls addRowWithTag:CALLS_STUN_SERVER_FALLBACK_DESCRIPTION_INDEX]; + } + + if (sectionCalls.rows.count) + { + [tmpSections addObject:sectionCalls]; + } } if (BuildSettings.settingsScreenShowDiscoverySettings)