From fa07c4cc858eed857456b48afa6cadfec4b7f37e Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 09:33:31 +0100 Subject: [PATCH 1/6] Add key backup recover banner strings --- Riot/Assets/en.lproj/Vector.strings | 5 +++++ Riot/Generated/Strings.swift | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 3f90b3a44..84f0010bf 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -740,3 +740,8 @@ "key_backup_setup_banner_title_part1" = "Set up Secure Message Recovery"; "key_backup_setup_banner_title_part2" = " to never lose encrypted messages"; + +// MARK: Key backup recover banner + +"key_backup_recover_banner_title_part1" = "Run Secure Message Recovery"; +"key_backup_recover_banner_title_part2" = " to read encrypted message history on this device"; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 2b3911452..54e1ba16b 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -662,6 +662,14 @@ internal enum VectorL10n { internal static var join: String { return VectorL10n.tr("Vector", "join") } + /// Run Secure Message Recovery + internal static var keyBackupRecoverBannerTitlePart1: String { + return VectorL10n.tr("Vector", "key_backup_recover_banner_title_part1") + } + /// to read encrypted message history on this device + internal static var keyBackupRecoverBannerTitlePart2: String { + return VectorL10n.tr("Vector", "key_backup_recover_banner_title_part2") + } /// Done internal static var keyBackupRecoverDoneAction: String { return VectorL10n.tr("Vector", "key_backup_recover_done_action") From 5288743bccbdd2ad281656f8105dfcf045c3eb53 Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 09:35:54 +0100 Subject: [PATCH 2/6] Handle key backup recover banner preferences --- .../Banners/KeyBackupBannerPreferences.swift | 77 +++++++++++++++++++ .../Banners/KeyBackupBannersPreferences.swift | 46 ----------- 2 files changed, 77 insertions(+), 46 deletions(-) create mode 100644 Riot/Modules/KeyBackup/Banners/KeyBackupBannerPreferences.swift delete mode 100644 Riot/Modules/KeyBackup/Banners/KeyBackupBannersPreferences.swift diff --git a/Riot/Modules/KeyBackup/Banners/KeyBackupBannerPreferences.swift b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerPreferences.swift new file mode 100644 index 000000000..eb4a2b06b --- /dev/null +++ b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerPreferences.swift @@ -0,0 +1,77 @@ +/* + Copyright 2018 New Vector Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +/// Key backup banner user preferences. +@objcMembers +final class KeyBackupBannerPreferences: NSObject { + + // MARK: - Constants + + private enum UserDefaultsKeys { + static let hideSetupBanner = "KeyBackupBannerPreferencesHideSetupBanner" + static let hiddenRecoverBannerKeyBackupVersions = "KeyBackupBannerPreferencesHiddenRecoverBannerKeyBackupVersions" + } + + static let shared = KeyBackupBannerPreferences() + + // MARK: - Properties + private var hiddenRecoverBannerKeyBackupVersions: [String] { + get { + return UserDefaults.standard.stringArray(forKey: UserDefaultsKeys.hiddenRecoverBannerKeyBackupVersions) ?? [] + } + set { + UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.hiddenRecoverBannerKeyBackupVersions) + } + } + + // MARK: - Public + + /// Remember to hide key backup setup banner. + var hideSetupBanner: Bool { + get { + return UserDefaults.standard.bool(forKey: UserDefaultsKeys.hideSetupBanner) + } + set { + UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.hideSetupBanner) + } + } + + /// Remember to hide key backup recover banner for specific key backup version. + /// + /// - Parameter keyBackupVersion: Key backup version recover banner to hide. + func hideRecoverBanner(for keyBackupVersion: String) { + guard self.hiddenRecoverBannerKeyBackupVersions.contains(keyBackupVersion) == false else { + return + } + self.hiddenRecoverBannerKeyBackupVersions.append(keyBackupVersion) + } + + /// Check if key backup recover banner should be hidden for key backup version. + /// + /// - Parameter keyBackupVersion: Key backup version to check. + /// - Returns: true if recover banner should be hidden. + func isRecoverBannerHidden(for keyBackupVersion: String) -> Bool { + return self.hiddenRecoverBannerKeyBackupVersions.contains(keyBackupVersion) + } + + /// Reset key backup banner preferences to default values + func reset() { + self.hideSetupBanner = false + self.hiddenRecoverBannerKeyBackupVersions = [] + } +} diff --git a/Riot/Modules/KeyBackup/Banners/KeyBackupBannersPreferences.swift b/Riot/Modules/KeyBackup/Banners/KeyBackupBannersPreferences.swift deleted file mode 100644 index 106997d28..000000000 --- a/Riot/Modules/KeyBackup/Banners/KeyBackupBannersPreferences.swift +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2018 New Vector Ltd - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import Foundation - -/// Key backup banner user preferences. -@objcMembers -final class KeyBackupBannerPreferences: NSObject { - - // MARK: - Constants - - private enum UserDefaultsKeys { - static let hideSetupBanner = "KeyBackupBannersManagerHideSetupBanner" - } - - static let shared = KeyBackupBannerPreferences() - - // MARK: - Public - - /// Indicate to show key backup setup if needed. - var hideSetupBanner: Bool { - get { - return UserDefaults.standard.bool(forKey: UserDefaultsKeys.hideSetupBanner) - } - set { - UserDefaults.standard.set(newValue, forKey: UserDefaultsKeys.hideSetupBanner) - } - } - - func reset() { - self.hideSetupBanner = false - } -} From 3850d9a523a1d9f072d2534ede6e3c8c20478c09 Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 09:51:01 +0100 Subject: [PATCH 3/6] Use one key backup banner for recover and setup cases --- Riot.xcodeproj/project.pbxproj | 32 +++++++------------ ...erCell.swift => KeyBackupBannerCell.swift} | 32 ++++++++++++++++--- ...BannerCell.xib => KeyBackupBannerCell.xib} | 6 +--- Riot/SupportingFiles/Riot-Bridging-Header.h | 1 + 4 files changed, 41 insertions(+), 30 deletions(-) rename Riot/Modules/KeyBackup/Banners/{Setup/KeyBackupSetupBannerCell.swift => KeyBackupBannerCell.swift} (60%) rename Riot/Modules/KeyBackup/Banners/{Setup/KeyBackupSetupBannerCell.xib => KeyBackupBannerCell.xib} (96%) diff --git a/Riot.xcodeproj/project.pbxproj b/Riot.xcodeproj/project.pbxproj index d67a06dfb..e09eab269 100644 --- a/Riot.xcodeproj/project.pbxproj +++ b/Riot.xcodeproj/project.pbxproj @@ -39,7 +39,7 @@ 92726A471F58737A004AD26F /* IntentHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 92726A461F58737A004AD26F /* IntentHandler.m */; }; 92726A4B1F58737A004AD26F /* SiriIntents.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 92726A431F58737A004AD26F /* SiriIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 92726A511F587410004AD26F /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92726A501F587410004AD26F /* Intents.framework */; }; - B104C2942203773C00D9F496 /* KeyBackupBannersPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = B104C2932203773B00D9F496 /* KeyBackupBannersPreferences.swift */; }; + B104C2942203773C00D9F496 /* KeyBackupBannerPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */; }; B1098BDF21ECE09F000DDA48 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDA21ECE09E000DDA48 /* Strings.swift */; }; B1098BE121ECE09F000DDA48 /* Images.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDC21ECE09E000DDA48 /* Images.swift */; }; B1098BE321ECE09F000DDA48 /* RiotDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */; }; @@ -60,8 +60,8 @@ B1098C0D21ED07E4000DDA48 /* NavigationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098C0821ED07E4000DDA48 /* NavigationRouter.swift */; }; B1098C1021ED07E4000DDA48 /* Presentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098C0B21ED07E4000DDA48 /* Presentable.swift */; }; B1098C1121ED07E4000DDA48 /* NavigationRouterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098C0C21ED07E4000DDA48 /* NavigationRouterType.swift */; }; - B10B3B5B2201DD740072C76B /* KeyBackupSetupBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10B3B592201DD740072C76B /* KeyBackupSetupBannerCell.swift */; }; - B10B3B5C2201DD740072C76B /* KeyBackupSetupBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B10B3B5A2201DD740072C76B /* KeyBackupSetupBannerCell.xib */; }; + B10B3B5B2201DD740072C76B /* KeyBackupBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */; }; + B10B3B5C2201DD740072C76B /* KeyBackupBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */; }; B1107EC82200B0720038014B /* KeyBackupRecoverSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1107EC72200B0720038014B /* KeyBackupRecoverSuccessViewController.swift */; }; B1107ECA2200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1107EC92200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard */; }; B110871921EF8077003554A5 /* KeyBackupSetupRecoveryKeyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B110871821EF8077003554A5 /* KeyBackupSetupRecoveryKeyViewController.swift */; }; @@ -511,7 +511,7 @@ 92726A481F58737A004AD26F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92726A4F1F587393004AD26F /* SiriIntents.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = SiriIntents.entitlements; sourceTree = ""; }; 92726A501F587410004AD26F /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; - B104C2932203773B00D9F496 /* KeyBackupBannersPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyBackupBannersPreferences.swift; sourceTree = ""; }; + B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerPreferences.swift; sourceTree = ""; }; B1098BDA21ECE09E000DDA48 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = ""; }; B1098BDC21ECE09E000DDA48 /* Images.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = ""; }; B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RiotDefaults.swift; sourceTree = ""; }; @@ -532,8 +532,8 @@ B1098C0821ED07E4000DDA48 /* NavigationRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationRouter.swift; sourceTree = ""; }; B1098C0B21ED07E4000DDA48 /* Presentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Presentable.swift; sourceTree = ""; }; B1098C0C21ED07E4000DDA48 /* NavigationRouterType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationRouterType.swift; sourceTree = ""; }; - B10B3B592201DD740072C76B /* KeyBackupSetupBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupBannerCell.swift; sourceTree = ""; }; - B10B3B5A2201DD740072C76B /* KeyBackupSetupBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyBackupSetupBannerCell.xib; sourceTree = ""; }; + B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerCell.swift; sourceTree = ""; }; + B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyBackupBannerCell.xib; sourceTree = ""; }; B1107EC72200B0720038014B /* KeyBackupRecoverSuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupRecoverSuccessViewController.swift; sourceTree = ""; }; B1107EC92200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyBackupRecoverSuccessViewController.storyboard; sourceTree = ""; }; B110871821EF8077003554A5 /* KeyBackupSetupRecoveryKeyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupRecoveryKeyViewController.swift; sourceTree = ""; }; @@ -1330,21 +1330,13 @@ B1107ECB2201BE800038014B /* Banners */ = { isa = PBXGroup; children = ( - B104C2932203773B00D9F496 /* KeyBackupBannersPreferences.swift */, - B1107ECC2201BEAF0038014B /* Setup */, + B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */, + B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */, + B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */, ); path = Banners; sourceTree = ""; }; - B1107ECC2201BEAF0038014B /* Setup */ = { - isa = PBXGroup; - children = ( - B10B3B592201DD740072C76B /* KeyBackupSetupBannerCell.swift */, - B10B3B5A2201DD740072C76B /* KeyBackupSetupBannerCell.xib */, - ); - path = Setup; - sourceTree = ""; - }; B110871E21F098EF003554A5 /* ActivityIndicator */ = { isa = PBXGroup; children = ( @@ -3231,7 +3223,7 @@ 3284A35120A07C210044F922 /* postMessageAPI.js in Resources */, B1B557A220EF58AD00210D55 /* ContactTableViewCell.xib in Resources */, B1B558EB20EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleBubbleCell.xib in Resources */, - B10B3B5C2201DD740072C76B /* KeyBackupSetupBannerCell.xib in Resources */, + B10B3B5C2201DD740072C76B /* KeyBackupBannerCell.xib in Resources */, B1B5581820EF625800210D55 /* PreviewRoomTitleView.xib in Resources */, B1B5583020EF66BA00210D55 /* RoomIdOrAliasTableViewCell.xib in Resources */, B1B558BF20EF768F00210D55 /* RoomOutgoingEncryptedTextMsgWithoutSenderNameBubbleCell.xib in Resources */, @@ -3567,7 +3559,7 @@ B1B5574120EE6C4D00210D55 /* RecentsViewController.m in Sources */, B1D250D82118AA0A000F4E93 /* RoomPredecessorBubbleCell.m in Sources */, B1B5577120EE702800210D55 /* StickerPickerViewController.m in Sources */, - B104C2942203773C00D9F496 /* KeyBackupBannersPreferences.swift in Sources */, + B104C2942203773C00D9F496 /* KeyBackupBannerPreferences.swift in Sources */, B1B5572020EE6C4D00210D55 /* ContactsTableViewController.m in Sources */, B1B5581920EF625800210D55 /* RoomTitleView.m in Sources */, B1098BE321ECE09F000DDA48 /* RiotDefaults.swift in Sources */, @@ -3579,7 +3571,7 @@ B1B5571E20EE6C4D00210D55 /* ContactDetailsViewController.m in Sources */, B1798302211B13B3001FD722 /* OnBoardingManager.swift in Sources */, B1B5573520EE6C4D00210D55 /* GroupDetailsViewController.m in Sources */, - B10B3B5B2201DD740072C76B /* KeyBackupSetupBannerCell.swift in Sources */, + B10B3B5B2201DD740072C76B /* KeyBackupBannerCell.swift in Sources */, B1098BFA21ECFE65000DDA48 /* KeyBackupSetupPassphraseViewModel.swift in Sources */, B1B5575220EE6C4D00210D55 /* RoomKeyRequestViewController.m in Sources */, F083BD1E1E7009ED00A9B29C /* AppDelegate.m in Sources */, diff --git a/Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.swift b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.swift similarity index 60% rename from Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.swift rename to Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.swift index aaca7c2c3..e0f2ca6ab 100644 --- a/Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.swift +++ b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.swift @@ -16,12 +16,12 @@ import UIKit -@objc protocol KeyBackupSetupBannerCellDelegate: class { - func keyBackupSetupBannerCellDidTapCloseAction(_ cell: KeyBackupSetupBannerCell) +@objc protocol KeyBackupBannerCellDelegate: class { + func keyBackupBannerCellDidTapCloseAction(_ cell: KeyBackupBannerCell) } @objcMembers -final class KeyBackupSetupBannerCell: MXKTableViewCell { +final class KeyBackupBannerCell: MXKTableViewCell { // MARK: - Properties @@ -33,7 +33,7 @@ final class KeyBackupSetupBannerCell: MXKTableViewCell { // MARK: Public - weak var delegate: KeyBackupSetupBannerCellDelegate? + weak var delegate: KeyBackupBannerCellDelegate? // MARK: - Overrides @@ -70,9 +70,31 @@ final class KeyBackupSetupBannerCell: MXKTableViewCell { self.closeButton.setImage(closeImage, for: .normal) } + // MARK: - Public + + func configure(for banner: KeyBackupBanner) { + let attributedTitle: NSAttributedString? + let theme = ThemeService.shared().theme + + switch banner { + case .setup: + let setupAttributedTitle = NSMutableAttributedString(string: VectorL10n.keyBackupSetupBannerTitlePart1, attributes: [.foregroundColor: theme.tintColor]) + setupAttributedTitle.append(NSAttributedString(string: VectorL10n.keyBackupSetupBannerTitlePart2, attributes: [.foregroundColor: theme.textPrimaryColor])) + attributedTitle = setupAttributedTitle + case .recover: + let recoverAttributedTitle = NSMutableAttributedString(string: VectorL10n.keyBackupRecoverBannerTitlePart1, attributes: [.foregroundColor: theme.tintColor]) + recoverAttributedTitle.append(NSAttributedString(string: VectorL10n.keyBackupRecoverBannerTitlePart2, attributes: [.foregroundColor: theme.textPrimaryColor])) + attributedTitle = recoverAttributedTitle + case .none: + attributedTitle = nil + } + + self.informationLabel.attributedText = attributedTitle + } + // MARK: - Actions @IBAction private func closeButtonAction(_ sender: Any) { - self.delegate?.keyBackupSetupBannerCellDidTapCloseAction(self) + self.delegate?.keyBackupBannerCellDidTapCloseAction(self) } } diff --git a/Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.xib b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.xib similarity index 96% rename from Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.xib rename to Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.xib index e2eb36af0..fa630ec0a 100644 --- a/Riot/Modules/KeyBackup/Banners/Setup/KeyBackupSetupBannerCell.xib +++ b/Riot/Modules/KeyBackup/Banners/KeyBackupBannerCell.xib @@ -1,17 +1,13 @@ - - - - - + diff --git a/Riot/SupportingFiles/Riot-Bridging-Header.h b/Riot/SupportingFiles/Riot-Bridging-Header.h index 37a5b6f37..3d91a54f2 100644 --- a/Riot/SupportingFiles/Riot-Bridging-Header.h +++ b/Riot/SupportingFiles/Riot-Bridging-Header.h @@ -9,3 +9,4 @@ #import "RiotNavigationController.h" #import "ThemeService.h" #import "TableViewCellWithCheckBoxAndLabel.h" +#import "RecentsDataSource.h" From 898809d8812b6cfec846ff7ae66c9ec939a212fc Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 09:51:57 +0100 Subject: [PATCH 4/6] Handle key backup recover banner display --- .../Recents/DataSources/RecentsDataSource.m | 73 ++++++++++++++----- Riot/Modules/Home/HomeViewController.m | 67 ++++++++++------- 2 files changed, 95 insertions(+), 45 deletions(-) diff --git a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m index d0f5b3bdd..597560053 100644 --- a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m +++ b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m @@ -40,7 +40,7 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSourceTapOnDirectoryServerChange"; -@interface RecentsDataSource() +@interface RecentsDataSource() { NSMutableArray* invitesCellDataArray; NSMutableArray* favoriteCellDataArray; @@ -173,6 +173,8 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou { KeyBackupBannerPreferences *keyBackupBannersPreferences = KeyBackupBannerPreferences.shared; + NSString *keyBackupVersion = self.mxSession.crypto.backup.keyBackupVersion.version; + switch (self.mxSession.crypto.backup.state) { case MXKeyBackupStateDisabled: // Show key backup setup banner only if user has not hidden it once. @@ -187,8 +189,15 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou break; case MXKeyBackupStateNotTrusted: case MXKeyBackupStateWrongBackUpVersion: - // TODO: Show key backup recover banner. - keyBackupBanner = KeyBackupBannerNone; + // Show key backup recover banner only if user has not hidden it for the gieven versiopn. + if (keyBackupVersion && [keyBackupBannersPreferences isRecoverBannerHiddenFor:keyBackupVersion]) + { + keyBackupBanner = KeyBackupBannerNone; + } + else + { + keyBackupBanner = KeyBackupBannerRecover; + } break; default: keyBackupBanner = KeyBackupBannerNone; @@ -208,7 +217,13 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou keyBackupBannersPreferences.hideSetupBanner = YES; break; case KeyBackupBannerRecover: - // TODO: Hide key backup recover banner. + { + NSString *keyBackupVersion = self.mxSession.crypto.backup.keyBackupVersion.version; + if (keyBackupVersion) + { + [keyBackupBannersPreferences hideRecoverBannerFor:keyBackupVersion]; + } + } break; default: break; @@ -901,6 +916,36 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou return sectionHeader; } +//- (void)configureKeyBackupBannerCell:(KeyBackupBannerCell*)keyBackupBannerCell forKeyBackupBanner:(KeyBackupBanner)keyBackupBanner { +// +// NSAttributedString *attributedTitle; +// +// id theme = ThemeService.shared.theme; +// +// switch (keyBackupBanner) { +// case KeyBackupBannerSetup: +// { +// NSMutableAttributedString *setupAttributedTitle = [[NSMutableAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_setup_banner_title_part1", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.tintColor}]; +// [setupAttributedTitle appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_setup_banner_title_part2", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.textPrimaryColor }]]; +// +// attributedTitle = setupAttributedTitle; +// } +// break; +// case KeyBackupBannerRecover: +// { +// NSMutableAttributedString *setupAttributedTitle = [[NSMutableAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_recover_banner_title_part1", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.tintColor}]; +// [setupAttributedTitle appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_recover_banner_title_part2", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.textPrimaryColor }]]; +// +// attributedTitle = setupAttributedTitle; +// } +// break; +// default: +// break; +// } +// +// [keyBackupBannerCell fillWith:attributedTitle]; +//} + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Sanity check @@ -913,20 +958,10 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou if (indexPath.section == self.keyBackupBannerSection) { - UITableViewCell* cell; - - switch (self.keyBackupBanner) { - case KeyBackupBannerSetup: { - KeyBackupSetupBannerCell* keyBackupSetupBannerCell = [tableView dequeueReusableCellWithIdentifier:KeyBackupSetupBannerCell.defaultReuseIdentifier forIndexPath:indexPath]; - keyBackupSetupBannerCell.delegate = self; - cell = keyBackupSetupBannerCell; - } - break; - default: - break; - } - - return cell; + KeyBackupBannerCell* keyBackupBannerCell = [tableView dequeueReusableCellWithIdentifier:KeyBackupBannerCell.defaultReuseIdentifier forIndexPath:indexPath]; + [keyBackupBannerCell configureFor:self.keyBackupBanner]; + keyBackupBannerCell.delegate = self; + return keyBackupBannerCell; } else if (indexPath.section == directorySection) { @@ -1717,7 +1752,7 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou #pragma mark - KeyBackupSetupBannerCellDelegate -- (void)keyBackupSetupBannerCellDidTapCloseAction:(KeyBackupSetupBannerCell * _Nonnull)cell +- (void)keyBackupBannerCellDidTapCloseAction:(KeyBackupBannerCell * _Nonnull)cell { [self hideKeyBackupBanner:self.keyBackupBanner]; } diff --git a/Riot/Modules/Home/HomeViewController.m b/Riot/Modules/Home/HomeViewController.m index 51145c258..2d47f630c 100644 --- a/Riot/Modules/Home/HomeViewController.m +++ b/Riot/Modules/Home/HomeViewController.m @@ -27,7 +27,7 @@ #import "MXRoom+Riot.h" -@interface HomeViewController () +@interface HomeViewController () { RecentsDataSource *recentsDataSource; @@ -42,7 +42,8 @@ } @property (nonatomic, strong) KeyBackupSetupCoordinatorBridgePresenter *keyBackupSetupCoordinatorBridgePresenter; -@property (nonatomic, strong) KeyBackupSetupBannerCell *keyBackupSetupBannerPrototypeCell; +@property (nonatomic, strong) KeyBackupRecoverCoordinatorBridgePresenter *keyBackupRecoverCoordinatorBridgePresenter; +@property (nonatomic, strong) KeyBackupBannerCell *keyBackupBannerPrototypeCell; @end @@ -77,7 +78,7 @@ [self.recentsTableView registerClass:TableViewCellWithCollectionView.class forCellReuseIdentifier:TableViewCellWithCollectionView.defaultReuseIdentifier]; // Register key backup banner cells - [self.recentsTableView registerNib:KeyBackupSetupBannerCell.nib forCellReuseIdentifier:KeyBackupSetupBannerCell.defaultReuseIdentifier]; + [self.recentsTableView registerNib:KeyBackupBannerCell.nib forCellReuseIdentifier:KeyBackupBannerCell.defaultReuseIdentifier]; // Change the table data source. It must be the home view controller itself. self.recentsTableView.dataSource = self; @@ -144,13 +145,13 @@ } } -- (KeyBackupSetupBannerCell *)keyBackupSetupBannerPrototypeCell +- (KeyBackupBannerCell *)keyBackupBannerPrototypeCell { - if (!_keyBackupSetupBannerPrototypeCell) + if (!_keyBackupBannerPrototypeCell) { - _keyBackupSetupBannerPrototypeCell = [self.recentsTableView dequeueReusableCellWithIdentifier:KeyBackupSetupBannerCell.defaultReuseIdentifier]; + _keyBackupBannerPrototypeCell = [self.recentsTableView dequeueReusableCellWithIdentifier:KeyBackupBannerCell.defaultReuseIdentifier]; } - return _keyBackupSetupBannerPrototypeCell; + return _keyBackupBannerPrototypeCell; } - (void)presentKeyBackupSetup @@ -163,6 +164,19 @@ self.keyBackupSetupCoordinatorBridgePresenter = keyBackupSetupCoordinatorBridgePresenter; } +- (void)presentKeyBackupRecover +{ + MXKeyBackupVersion *keyBackupVersion = self.mainSession.crypto.backup.keyBackupVersion; + if (keyBackupVersion) + { + KeyBackupRecoverCoordinatorBridgePresenter *keyBackupRecoverCoordinatorBridgePresenter = [[KeyBackupRecoverCoordinatorBridgePresenter alloc] initWithSession:self.mainSession keyBackupVersion:keyBackupVersion]; + keyBackupRecoverCoordinatorBridgePresenter.delegate = self; + + [keyBackupRecoverCoordinatorBridgePresenter presentFrom:self animated:YES]; + + self.keyBackupRecoverCoordinatorBridgePresenter = keyBackupRecoverCoordinatorBridgePresenter; + } +} #pragma mark - Override RecentsViewController @@ -369,27 +383,17 @@ else if (indexPath.section == recentsDataSource.keyBackupBannerSection) { CGFloat height = 0.0; - UITableViewCell *sizingCell; + KeyBackupBannerCell *sizingCell = self.keyBackupBannerPrototypeCell; - switch (recentsDataSource.keyBackupBanner) { - case KeyBackupBannerSetup: - { - sizingCell = self.keyBackupSetupBannerPrototypeCell; - } - break; - default: - break; - } + [sizingCell configureFor:recentsDataSource.keyBackupBanner]; + + [sizingCell layoutIfNeeded]; + + CGSize fittingSize = UILayoutFittingCompressedSize; + fittingSize.width = CGRectGetWidth(tableView.frame); + + height = [sizingCell systemLayoutSizeFittingSize:fittingSize withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel].height; - if (sizingCell) - { - [sizingCell layoutIfNeeded]; - - CGSize fittingSize = UILayoutFittingCompressedSize; - fittingSize.width = CGRectGetWidth(tableView.frame); - - height = [sizingCell systemLayoutSizeFittingSize:fittingSize withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel].height; - } return height; } @@ -429,6 +433,7 @@ [self presentKeyBackupSetup]; break; default: + [self presentKeyBackupRecover]; break; } } @@ -693,4 +698,14 @@ self.keyBackupSetupCoordinatorBridgePresenter = nil; } +- (void)keyBackupRecoverCoordinatorBridgePresenterDidCancel:(KeyBackupRecoverCoordinatorBridgePresenter * _Nonnull)keyBackupRecoverCoordinatorBridgePresenter { + [keyBackupRecoverCoordinatorBridgePresenter dismissWithAnimated:YES]; + self.keyBackupRecoverCoordinatorBridgePresenter = nil; +} + +- (void)keyBackupRecoverCoordinatorBridgePresenterDidRecover:(KeyBackupRecoverCoordinatorBridgePresenter * _Nonnull)keyBackupRecoverCoordinatorBridgePresenter { + [keyBackupRecoverCoordinatorBridgePresenter dismissWithAnimated:YES]; + self.keyBackupRecoverCoordinatorBridgePresenter = nil; +} + @end From 210eb3159bbcb7ac3dc5d3d5e62c4c719b318ebd Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 09:58:36 +0100 Subject: [PATCH 5/6] Update changes --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index 40f773e6f..68d3c8604 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -11,6 +11,7 @@ Improvements: * Key backup: Implement recover screen (#2196). * Key backup: Add a dedicated section to settings (#2193). * Key backup: Implement setup reminder (#2211). + * Key backup: Implement recover reminder (#2206). Bug fix: * Use white scroll bar on dark themes (#2158). From 4173bf8dc60e3ea45ae2d3df63ab73fd3472dc5c Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 1 Feb 2019 10:15:39 +0100 Subject: [PATCH 6/6] Fix Manu's comments --- .../Recents/DataSources/RecentsDataSource.m | 32 +------------------ Riot/Modules/Home/HomeViewController.m | 4 ++- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m index 597560053..fe15bcfaa 100644 --- a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m +++ b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m @@ -189,7 +189,7 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou break; case MXKeyBackupStateNotTrusted: case MXKeyBackupStateWrongBackUpVersion: - // Show key backup recover banner only if user has not hidden it for the gieven versiopn. + // Show key backup recover banner only if user has not hidden it for the given version. if (keyBackupVersion && [keyBackupBannersPreferences isRecoverBannerHiddenFor:keyBackupVersion]) { keyBackupBanner = KeyBackupBannerNone; @@ -916,36 +916,6 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou return sectionHeader; } -//- (void)configureKeyBackupBannerCell:(KeyBackupBannerCell*)keyBackupBannerCell forKeyBackupBanner:(KeyBackupBanner)keyBackupBanner { -// -// NSAttributedString *attributedTitle; -// -// id theme = ThemeService.shared.theme; -// -// switch (keyBackupBanner) { -// case KeyBackupBannerSetup: -// { -// NSMutableAttributedString *setupAttributedTitle = [[NSMutableAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_setup_banner_title_part1", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.tintColor}]; -// [setupAttributedTitle appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_setup_banner_title_part2", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.textPrimaryColor }]]; -// -// attributedTitle = setupAttributedTitle; -// } -// break; -// case KeyBackupBannerRecover: -// { -// NSMutableAttributedString *setupAttributedTitle = [[NSMutableAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_recover_banner_title_part1", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.tintColor}]; -// [setupAttributedTitle appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"key_backup_recover_banner_title_part2", @"Vector", nil) attributes:@{ NSForegroundColorAttributeName: theme.textPrimaryColor }]]; -// -// attributedTitle = setupAttributedTitle; -// } -// break; -// default: -// break; -// } -// -// [keyBackupBannerCell fillWith:attributedTitle]; -//} - - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Sanity check diff --git a/Riot/Modules/Home/HomeViewController.m b/Riot/Modules/Home/HomeViewController.m index 2d47f630c..5d7230044 100644 --- a/Riot/Modules/Home/HomeViewController.m +++ b/Riot/Modules/Home/HomeViewController.m @@ -432,9 +432,11 @@ case KeyBackupBannerSetup: [self presentKeyBackupSetup]; break; - default: + case KeyBackupBannerRecover: [self presentKeyBackupRecover]; break; + default: + break; } } }