mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			215 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			215 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
 |