mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
214 lines
8.2 KiB
Objective-C
214 lines
8.2 KiB
Objective-C
//
|
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
|
//
|
|
|
|
#import "OWSBackupSettingsViewController.h"
|
|
#import "OWSBackup.h"
|
|
#import "Session-Swift.h"
|
|
|
|
#import <PromiseKit/AnyPromise.h>
|
|
#import <SignalUtilitiesKit/AttachmentSharing.h>
|
|
#import <SessionMessagingKit/Environment.h>
|
|
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
|
|
#import <SignalUtilitiesKit/UIColor+OWS.h>
|
|
#import <SignalUtilitiesKit/UIFont+OWS.h>
|
|
#import <SessionUtilitiesKit/UIView+OWS.h>
|
|
#import <SessionUtilitiesKit/MIMETypeUtil.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface OWSBackupSettingsViewController ()
|
|
|
|
@property (nonatomic, nullable) NSError *iCloudError;
|
|
|
|
@end
|
|
|
|
#pragma mark -
|
|
|
|
@implementation OWSBackupSettingsViewController
|
|
|
|
#pragma mark - Dependencies
|
|
|
|
- (OWSBackup *)backup
|
|
{
|
|
OWSAssertDebug(AppEnvironment.shared.backup);
|
|
|
|
return AppEnvironment.shared.backup;
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
- (void)viewDidLoad
|
|
{
|
|
[super viewDidLoad];
|
|
|
|
self.title = NSLocalizedString(@"SETTINGS_BACKUP", @"Label for the backup view in app settings.");
|
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(backupStateDidChange:)
|
|
name:NSNotificationNameBackupStateDidChange
|
|
object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(applicationDidBecomeActive:)
|
|
name:OWSApplicationDidBecomeActiveNotification
|
|
object:nil];
|
|
|
|
[self updateTableContents];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
}
|
|
|
|
- (void)viewDidAppear:(BOOL)animated
|
|
{
|
|
[super viewDidAppear:animated];
|
|
|
|
[self updateTableContents];
|
|
[self updateICloudStatus];
|
|
}
|
|
|
|
- (void)updateICloudStatus
|
|
{
|
|
__weak OWSBackupSettingsViewController *weakSelf = self;
|
|
[[self.backup ensureCloudKitAccess]
|
|
.then(^{
|
|
OWSAssertIsOnMainThread();
|
|
|
|
weakSelf.iCloudError = nil;
|
|
[weakSelf updateTableContents];
|
|
})
|
|
.catch(^(NSError *error) {
|
|
OWSAssertIsOnMainThread();
|
|
|
|
weakSelf.iCloudError = error;
|
|
[weakSelf updateTableContents];
|
|
}) retainUntilComplete];
|
|
}
|
|
|
|
#pragma mark - Table Contents
|
|
|
|
- (void)updateTableContents
|
|
{
|
|
OWSTableContents *contents = [OWSTableContents new];
|
|
|
|
BOOL isBackupEnabled = [OWSBackup.sharedManager isBackupEnabled];
|
|
|
|
if (self.iCloudError) {
|
|
OWSTableSection *iCloudSection = [OWSTableSection new];
|
|
iCloudSection.headerTitle = NSLocalizedString(
|
|
@"SETTINGS_BACKUP_ICLOUD_STATUS", @"Label for iCloud status row in the in the backup settings view.");
|
|
[iCloudSection
|
|
addItem:[OWSTableItem
|
|
longDisclosureItemWithText:[OWSBackupAPI errorMessageForCloudKitAccessError:self.iCloudError]
|
|
actionBlock:^{
|
|
[[UIApplication sharedApplication]
|
|
openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
|
|
}]];
|
|
[contents addSection:iCloudSection];
|
|
}
|
|
|
|
// TODO: This UI is temporary.
|
|
// Enabling backup will involve entering and registering a PIN.
|
|
OWSTableSection *enableSection = [OWSTableSection new];
|
|
enableSection.headerTitle = NSLocalizedString(@"SETTINGS_BACKUP", @"Label for the backup view in app settings.");
|
|
[enableSection
|
|
addItem:[OWSTableItem switchItemWithText:
|
|
NSLocalizedString(@"SETTINGS_BACKUP_ENABLING_SWITCH",
|
|
@"Label for switch in settings that controls whether or not backup is enabled.")
|
|
isOnBlock:^{
|
|
return [OWSBackup.sharedManager isBackupEnabled];
|
|
}
|
|
target:self
|
|
selector:@selector(isBackupEnabledDidChange:)]];
|
|
[contents addSection:enableSection];
|
|
|
|
if (isBackupEnabled) {
|
|
// TODO: This UI is temporary.
|
|
// Enabling backup will involve entering and registering a PIN.
|
|
OWSTableSection *progressSection = [OWSTableSection new];
|
|
[progressSection
|
|
addItem:[OWSTableItem
|
|
labelItemWithText:NSLocalizedString(@"SETTINGS_BACKUP_STATUS",
|
|
@"Label for backup status row in the in the backup settings view.")
|
|
accessoryText:NSStringForBackupExportState(OWSBackup.sharedManager.backupExportState)]];
|
|
if (OWSBackup.sharedManager.backupExportState == OWSBackupState_InProgress) {
|
|
if (OWSBackup.sharedManager.backupExportDescription) {
|
|
[progressSection
|
|
addItem:[OWSTableItem
|
|
labelItemWithText:NSLocalizedString(@"SETTINGS_BACKUP_PHASE",
|
|
@"Label for phase row in the in the backup settings view.")
|
|
accessoryText:OWSBackup.sharedManager.backupExportDescription]];
|
|
if (OWSBackup.sharedManager.backupExportProgress) {
|
|
NSUInteger progressPercent
|
|
= (NSUInteger)round(OWSBackup.sharedManager.backupExportProgress.floatValue * 100);
|
|
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
|
|
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
|
|
[numberFormatter setMaximumFractionDigits:0];
|
|
[numberFormatter setMultiplier:@1];
|
|
NSString *progressString = [numberFormatter stringFromNumber:@(progressPercent)];
|
|
[progressSection
|
|
addItem:[OWSTableItem
|
|
labelItemWithText:NSLocalizedString(@"SETTINGS_BACKUP_PROGRESS",
|
|
@"Label for phase row in the in the backup settings view.")
|
|
accessoryText:progressString]];
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (OWSBackup.sharedManager.backupExportState) {
|
|
case OWSBackupState_Idle:
|
|
case OWSBackupState_Failed:
|
|
case OWSBackupState_Succeeded:
|
|
[progressSection
|
|
addItem:[OWSTableItem disclosureItemWithText:
|
|
NSLocalizedString(@"SETTINGS_BACKUP_BACKUP_NOW",
|
|
@"Label for 'backup now' button in the backup settings view.")
|
|
actionBlock:^{
|
|
[OWSBackup.sharedManager tryToExportBackup];
|
|
}]];
|
|
break;
|
|
case OWSBackupState_InProgress:
|
|
[progressSection
|
|
addItem:[OWSTableItem disclosureItemWithText:
|
|
NSLocalizedString(@"SETTINGS_BACKUP_CANCEL_BACKUP",
|
|
@"Label for 'cancel backup' button in the backup settings view.")
|
|
actionBlock:^{
|
|
[OWSBackup.sharedManager cancelExportBackup];
|
|
}]];
|
|
break;
|
|
}
|
|
|
|
[contents addSection:progressSection];
|
|
}
|
|
|
|
self.contents = contents;
|
|
}
|
|
|
|
- (void)isBackupEnabledDidChange:(UISwitch *)sender
|
|
{
|
|
[OWSBackup.sharedManager setIsBackupEnabled:sender.isOn];
|
|
|
|
[self updateTableContents];
|
|
}
|
|
|
|
#pragma mark - Events
|
|
|
|
- (void)backupStateDidChange:(NSNotification *)notification
|
|
{
|
|
OWSAssertIsOnMainThread();
|
|
|
|
[self updateTableContents];
|
|
}
|
|
|
|
- (void)applicationDidBecomeActive:(NSNotification *)notification
|
|
{
|
|
OWSAssertIsOnMainThread();
|
|
|
|
[self updateICloudStatus];
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|