mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-22 07:32:14 +02:00
Merge pull request #2212 from vector-im/keybackup_recover_banner
Key backup: recover reminder
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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 = "<group>"; };
|
||||
92726A4F1F587393004AD26F /* SiriIntents.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = SiriIntents.entitlements; sourceTree = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerPreferences.swift; sourceTree = "<group>"; };
|
||||
B1098BDA21ECE09E000DDA48 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
|
||||
B1098BDC21ECE09E000DDA48 /* Images.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = "<group>"; };
|
||||
B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RiotDefaults.swift; sourceTree = "<group>"; };
|
||||
@@ -532,8 +532,8 @@
|
||||
B1098C0821ED07E4000DDA48 /* NavigationRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationRouter.swift; sourceTree = "<group>"; };
|
||||
B1098C0B21ED07E4000DDA48 /* Presentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Presentable.swift; sourceTree = "<group>"; };
|
||||
B1098C0C21ED07E4000DDA48 /* NavigationRouterType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationRouterType.swift; sourceTree = "<group>"; };
|
||||
B10B3B592201DD740072C76B /* KeyBackupSetupBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupBannerCell.swift; sourceTree = "<group>"; };
|
||||
B10B3B5A2201DD740072C76B /* KeyBackupSetupBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyBackupSetupBannerCell.xib; sourceTree = "<group>"; };
|
||||
B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerCell.swift; sourceTree = "<group>"; };
|
||||
B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyBackupBannerCell.xib; sourceTree = "<group>"; };
|
||||
B1107EC72200B0720038014B /* KeyBackupRecoverSuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupRecoverSuccessViewController.swift; sourceTree = "<group>"; };
|
||||
B1107EC92200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyBackupRecoverSuccessViewController.storyboard; sourceTree = "<group>"; };
|
||||
B110871821EF8077003554A5 /* KeyBackupSetupRecoveryKeyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupRecoveryKeyViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -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 = "<group>";
|
||||
};
|
||||
B1107ECC2201BEAF0038014B /* Setup */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B10B3B592201DD740072C76B /* KeyBackupSetupBannerCell.swift */,
|
||||
B10B3B5A2201DD740072C76B /* KeyBackupSetupBannerCell.xib */,
|
||||
);
|
||||
path = Setup;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
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 */,
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSourceTapOnDirectoryServerChange";
|
||||
|
||||
@interface RecentsDataSource() <KeyBackupSetupBannerCellDelegate>
|
||||
@interface RecentsDataSource() <KeyBackupBannerCellDelegate>
|
||||
{
|
||||
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 given version.
|
||||
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;
|
||||
@@ -913,20 +928,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 +1722,7 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou
|
||||
|
||||
#pragma mark - KeyBackupSetupBannerCellDelegate
|
||||
|
||||
- (void)keyBackupSetupBannerCellDidTapCloseAction:(KeyBackupSetupBannerCell * _Nonnull)cell
|
||||
- (void)keyBackupBannerCellDidTapCloseAction:(KeyBackupBannerCell * _Nonnull)cell
|
||||
{
|
||||
[self hideKeyBackupBanner:self.keyBackupBanner];
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#import "MXRoom+Riot.h"
|
||||
|
||||
@interface HomeViewController () <KeyBackupSetupCoordinatorBridgePresenterDelegate>
|
||||
@interface HomeViewController () <KeyBackupSetupCoordinatorBridgePresenterDelegate, KeyBackupRecoverCoordinatorBridgePresenterDelegate>
|
||||
{
|
||||
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;
|
||||
}
|
||||
@@ -428,6 +432,9 @@
|
||||
case KeyBackupBannerSetup:
|
||||
[self presentKeyBackupSetup];
|
||||
break;
|
||||
case KeyBackupBannerRecover:
|
||||
[self presentKeyBackupRecover];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -693,4 +700,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
|
||||
|
||||
+27
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
+1
-5
@@ -1,17 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="KGk-i7-Jjw" customClass="KeyBackupSetupBannerCell" customModule="Riot" customModuleProvider="target">
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="KGk-i7-Jjw" customClass="KeyBackupBannerCell" customModule="Riot" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="641" height="96"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
|
||||
@@ -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 = []
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -9,3 +9,4 @@
|
||||
#import "RiotNavigationController.h"
|
||||
#import "ThemeService.h"
|
||||
#import "TableViewCellWithCheckBoxAndLabel.h"
|
||||
#import "RecentsDataSource.h"
|
||||
|
||||
Reference in New Issue
Block a user