Sketch out incremental backup manager and settings view.

This commit is contained in:
Matthew Chen 2018-03-05 14:36:29 -03:00
parent b296cfb893
commit d06ad25d77
8 changed files with 127 additions and 34 deletions

View File

@ -24,7 +24,7 @@
340FC8B1204DAC8D007AEB0F /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC887204DAC8C007AEB0F /* BlockListViewController.m */; }; 340FC8B1204DAC8D007AEB0F /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC887204DAC8C007AEB0F /* BlockListViewController.m */; };
340FC8B2204DAC8D007AEB0F /* AdvancedSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88C204DAC8C007AEB0F /* AdvancedSettingsTableViewController.m */; }; 340FC8B2204DAC8D007AEB0F /* AdvancedSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88C204DAC8C007AEB0F /* AdvancedSettingsTableViewController.m */; };
340FC8B3204DAC8D007AEB0F /* AppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88D204DAC8C007AEB0F /* AppSettingsViewController.m */; }; 340FC8B3204DAC8D007AEB0F /* AppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88D204DAC8C007AEB0F /* AppSettingsViewController.m */; };
340FC8B4204DAC8D007AEB0F /* OWSBackupExportViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88E204DAC8C007AEB0F /* OWSBackupExportViewController.m */; }; 340FC8B4204DAC8D007AEB0F /* OWSBackupSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC88E204DAC8C007AEB0F /* OWSBackupSettingsViewController.m */; };
340FC8B5204DAC8D007AEB0F /* AboutTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC893204DAC8C007AEB0F /* AboutTableViewController.m */; }; 340FC8B5204DAC8D007AEB0F /* AboutTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC893204DAC8C007AEB0F /* AboutTableViewController.m */; };
340FC8B6204DAC8D007AEB0F /* OWSQRCodeScanningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC896204DAC8C007AEB0F /* OWSQRCodeScanningViewController.m */; }; 340FC8B6204DAC8D007AEB0F /* OWSQRCodeScanningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC896204DAC8C007AEB0F /* OWSQRCodeScanningViewController.m */; };
340FC8B7204DAC8D007AEB0F /* OWSConversationSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC89A204DAC8D007AEB0F /* OWSConversationSettingsViewController.m */; }; 340FC8B7204DAC8D007AEB0F /* OWSConversationSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC89A204DAC8D007AEB0F /* OWSConversationSettingsViewController.m */; };
@ -543,7 +543,7 @@
340FC88B204DAC8C007AEB0F /* NotificationSettingsOptionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationSettingsOptionsViewController.h; sourceTree = "<group>"; }; 340FC88B204DAC8C007AEB0F /* NotificationSettingsOptionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationSettingsOptionsViewController.h; sourceTree = "<group>"; };
340FC88C204DAC8C007AEB0F /* AdvancedSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdvancedSettingsTableViewController.m; sourceTree = "<group>"; }; 340FC88C204DAC8C007AEB0F /* AdvancedSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdvancedSettingsTableViewController.m; sourceTree = "<group>"; };
340FC88D204DAC8C007AEB0F /* AppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppSettingsViewController.m; sourceTree = "<group>"; }; 340FC88D204DAC8C007AEB0F /* AppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppSettingsViewController.m; sourceTree = "<group>"; };
340FC88E204DAC8C007AEB0F /* OWSBackupExportViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSBackupExportViewController.m; sourceTree = "<group>"; }; 340FC88E204DAC8C007AEB0F /* OWSBackupSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSBackupSettingsViewController.m; sourceTree = "<group>"; };
340FC88F204DAC8C007AEB0F /* PrivacySettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivacySettingsTableViewController.h; sourceTree = "<group>"; }; 340FC88F204DAC8C007AEB0F /* PrivacySettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivacySettingsTableViewController.h; sourceTree = "<group>"; };
340FC890204DAC8C007AEB0F /* BlockListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockListViewController.h; sourceTree = "<group>"; }; 340FC890204DAC8C007AEB0F /* BlockListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockListViewController.h; sourceTree = "<group>"; };
340FC891204DAC8C007AEB0F /* OWSLinkDeviceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSLinkDeviceViewController.h; sourceTree = "<group>"; }; 340FC891204DAC8C007AEB0F /* OWSLinkDeviceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSLinkDeviceViewController.h; sourceTree = "<group>"; };
@ -1240,7 +1240,7 @@
340FC88A204DAC8C007AEB0F /* NotificationSettingsViewController.h */, 340FC88A204DAC8C007AEB0F /* NotificationSettingsViewController.h */,
340FC87C204DAC8C007AEB0F /* NotificationSettingsViewController.m */, 340FC87C204DAC8C007AEB0F /* NotificationSettingsViewController.m */,
340FC87F204DAC8C007AEB0F /* OWSBackupSettingsViewController.h */, 340FC87F204DAC8C007AEB0F /* OWSBackupSettingsViewController.h */,
340FC88E204DAC8C007AEB0F /* OWSBackupExportViewController.m */, 340FC88E204DAC8C007AEB0F /* OWSBackupSettingsViewController.m */,
340FC891204DAC8C007AEB0F /* OWSLinkDeviceViewController.h */, 340FC891204DAC8C007AEB0F /* OWSLinkDeviceViewController.h */,
340FC885204DAC8C007AEB0F /* OWSLinkDeviceViewController.m */, 340FC885204DAC8C007AEB0F /* OWSLinkDeviceViewController.m */,
340FC895204DAC8C007AEB0F /* OWSLinkedDevicesTableViewController.h */, 340FC895204DAC8C007AEB0F /* OWSLinkedDevicesTableViewController.h */,
@ -3059,7 +3059,7 @@
341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */, 341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */,
340FC8AF204DAC8D007AEB0F /* OWSLinkDeviceViewController.m in Sources */, 340FC8AF204DAC8D007AEB0F /* OWSLinkDeviceViewController.m in Sources */,
34E3EF0D1EFC235B007F6822 /* DebugUIDiskUsage.m in Sources */, 34E3EF0D1EFC235B007F6822 /* DebugUIDiskUsage.m in Sources */,
340FC8B4204DAC8D007AEB0F /* OWSBackupExportViewController.m in Sources */, 340FC8B4204DAC8D007AEB0F /* OWSBackupSettingsViewController.m in Sources */,
34D1F0871F8678AA0066283D /* ConversationViewItem.m in Sources */, 34D1F0871F8678AA0066283D /* ConversationViewItem.m in Sources */,
B6DA6B071B8A2F9A00CA6F98 /* AppStoreRating.m in Sources */, B6DA6B071B8A2F9A00CA6F98 /* AppStoreRating.m in Sources */,
451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */, 451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */,

View File

@ -90,6 +90,10 @@
self.title = NSLocalizedString(@"SETTINGS_NAV_BAR_TITLE", @"Title for settings activity"); self.title = NSLocalizedString(@"SETTINGS_NAV_BAR_TITLE", @"Title for settings activity");
[self updateTableContents]; [self updateTableContents];
dispatch_async(dispatch_get_main_queue(), ^{
[self showBackup];
});
} }
- (void)viewWillAppear:(BOOL)animated - (void)viewWillAppear:(BOOL)animated
@ -365,7 +369,6 @@
{ {
OWSBackupSettingsViewController *vc = [OWSBackupSettingsViewController new]; OWSBackupSettingsViewController *vc = [OWSBackupSettingsViewController new];
[self.navigationController pushViewController:vc animated:YES]; [self.navigationController pushViewController:vc animated:YES];
}]];
} }
- (void)showDebugUI - (void)showDebugUI

View File

@ -2,17 +2,11 @@
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
#import <SignalMessaging/OWSViewController.h> #import <SignalMessaging/OWSTableViewController.h>
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
//@class TSThread; @interface OWSBackupSettingsViewController : OWSTableViewController
@interface OWSBackupSettingsViewController : OWSViewController
//// If currentThread is non-nil, we should offer to let users send the
//// backup in that thread.
//- (void)exportBackup:(TSThread *_Nullable)currentThread skipPassword:(BOOL)skipPassword;
@end @end

View File

@ -2,8 +2,8 @@
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
#import "OWSBackup.h"
#import "OWSBackupSettingsViewController.h" #import "OWSBackupSettingsViewController.h"
#import "OWSBackup.h"
#import "OWSProgressView.h" #import "OWSProgressView.h"
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import "ThreadUtil.h" #import "ThreadUtil.h"
@ -30,6 +30,66 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSBackupSettingsViewController @implementation OWSBackupSettingsViewController
- (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];
[self updateTableContents];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewDidAppear:(BOOL)animated
{
[self updateTableContents];
}
#pragma mark - Table Contents
- (void)updateTableContents
{
OWSTableContents *contents = [OWSTableContents new];
BOOL isBackupEnabled = [OWSBackup.sharedManager isBackupEnabled];
// 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.")
isOn:isBackupEnabled
target:self
selector:@selector(isBackupEnabledDidChange:)]];
[contents addSection:enableSection];
self.contents = contents;
}
- (void)isBackupEnabledDidChange:(UISwitch *)sender
{
[OWSBackup.sharedManager setIsBackupEnabled:sender.isOn];
}
#pragma mark - Events
- (void)backupStateDidChange:(NSNotification *)notification
{
[self updateTableContents];
}
//- (void)loadView //- (void)loadView
//{ //{
// [super loadView]; // [super loadView];

View File

@ -426,6 +426,10 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
} }
[self checkIfEmptyView]; [self checkIfEmptyView];
dispatch_async(dispatch_get_main_queue(), ^{
[self settingsButtonPressed:nil];
});
} }
- (void)viewWillDisappear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated

View File

@ -46,6 +46,9 @@ typedef NS_ENUM(NSUInteger, OWSBackupState) {
+ (instancetype)sharedManager; + (instancetype)sharedManager;
- (BOOL)isBackupEnabled;
- (void)setIsBackupEnabled:(BOOL)value;
//- (void)exportBackup:(nullable TSThread *)currentThread skipPassword:(BOOL)skipPassword; //- (void)exportBackup:(nullable TSThread *)currentThread skipPassword:(BOOL)skipPassword;
// //
//- (void)importBackup:(NSString *)backupZipPath password:(NSString *_Nullable)password; //- (void)importBackup:(NSString *)backupZipPath password:(NSString *_Nullable)password;

View File

@ -18,9 +18,13 @@
//#import <SignalServiceKit/OWSPrimaryStorage.h> //#import <SignalServiceKit/OWSPrimaryStorage.h>
#import "NSNotificationCenter+OWS.h" #import "NSNotificationCenter+OWS.h"
#import <SignalServiceKit/OWSBackupStorage.h> #import <SignalServiceKit/OWSBackupStorage.h>
#import <SignalServiceKit/YapDatabaseConnection+OWS.h>
NSString *const NSNotificationNameBackupStateDidChange = @"NSNotificationNameBackupStateDidChange"; NSString *const NSNotificationNameBackupStateDidChange = @"NSNotificationNameBackupStateDidChange";
NSString *const OWSPrimaryStorage_OWSBackupCollection = @"OWSPrimaryStorage_OWSBackupCollection";
NSString *const OWSBackup_IsBackupEnabledKey = @"OWSBackup_IsBackupEnabledKey";
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
//// Hide the "import" directories from exports, etc. by prefixing their name with a period. //// Hide the "import" directories from exports, etc. by prefixing their name with a period.
@ -42,7 +46,9 @@ NS_ASSUME_NONNULL_BEGIN
// NSString *const Keychain_ImportBackupService = @"OWSKeychainService"; // NSString *const Keychain_ImportBackupService = @"OWSKeychainService";
// NSString *const Keychain_ImportBackupKey = @"ImportBackupKey"; // NSString *const Keychain_ImportBackupKey = @"ImportBackupKey";
@interface OWSStorage (OWSBackup) @interface OWSBackup ()
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
//- (NSData *)databasePassword; //- (NSData *)databasePassword;
// //
@ -73,6 +79,8 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSBackup @implementation OWSBackup
@synthesize dbConnection = _dbConnection;
+ (instancetype)sharedManager + (instancetype)sharedManager
{ {
static OWSBackup *sharedMyManager = nil; static OWSBackup *sharedMyManager = nil;
@ -85,26 +93,22 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initDefault - (instancetype)initDefault
{ {
// OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager]; OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
// OWSMessageSender *messageSender = [TextSecureKitEnv sharedEnv].messageSender;
// return [self initWithPrimaryStorage:primaryStorage];
// return [self initWithPrimaryStorage:primaryStorage messageSender:messageSender]; }
//}
// - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
//- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage {
// messageSender:(OWSMessageSender *)messageSender
//{
self = [super init]; self = [super init];
if (!self) { if (!self) {
return self; return self;
} }
// OWSAssert(primaryStorage); OWSAssert(primaryStorage);
// OWSAssert(messageSender);
// _dbConnection = primaryStorage.newDatabaseConnection;
// _dbConnection = primaryStorage.newDatabaseConnection;
// _messageSender = messageSender;
_backupExportState = OWSBackupState_AtRest; _backupExportState = OWSBackupState_AtRest;
@ -145,6 +149,24 @@ NS_ASSUME_NONNULL_BEGIN
userInfo:nil]; userInfo:nil];
} }
- (BOOL)isBackupEnabled
{
return [self.dbConnection boolForKey:OWSBackup_IsBackupEnabledKey
inCollection:OWSPrimaryStorage_OWSBackupCollection
defaultValue:NO];
}
- (void)setIsBackupEnabled:(BOOL)value
{
[self.dbConnection setBool:value
forKey:OWSBackup_IsBackupEnabledKey
inCollection:OWSPrimaryStorage_OWSBackupCollection];
[[NSNotificationCenter defaultCenter] postNotificationNameAsync:NSNotificationNameBackupStateDidChange
object:nil
userInfo:nil];
}
//- (void)setBackupProgress:(CGFloat)backupProgress //- (void)setBackupProgress:(CGFloat)backupProgress
//{ //{
// _backupProgress = backupProgress; // _backupProgress = backupProgress;

View File

@ -163,7 +163,8 @@
/* Message indicating that backup export is complete. */ /* Message indicating that backup export is complete. */
"BACKUP_EXPORT_COMPLETE_MESSAGE" = "Backup complete."; "BACKUP_EXPORT_COMPLETE_MESSAGE" = "Backup complete.";
/* Label for button that copies backup password to the pasteboard. */ /* Label for button that copies backup password to the
// pasteboard. */
"BACKUP_EXPORT_COPY_PASSWORD_BUTTON" = "Copy Password"; "BACKUP_EXPORT_COPY_PASSWORD_BUTTON" = "Copy Password";
/* Message indicating that backup export failed. */ /* Message indicating that backup export failed. */
@ -175,10 +176,12 @@
/* Format for message indicating that backup export is complete. Embeds: {{the backup password}}. */ /* Format for message indicating that backup export is complete. Embeds: {{the backup password}}. */
"BACKUP_EXPORT_PASSWORD_MESSAGE_FORMAT" = "Your backup password is: %@. Make sure to keep a copy of this password or you won't be able to restore from this backup."; "BACKUP_EXPORT_PASSWORD_MESSAGE_FORMAT" = "Your backup password is: %@. Make sure to keep a copy of this password or you won't be able to restore from this backup.";
/* Label for button that 'send backup' in the current conversation. */ /* Label for button that 'send backup' in the current
// conversation. */
"BACKUP_EXPORT_SEND_BACKUP_BUTTON" = "Send Backup as Message"; "BACKUP_EXPORT_SEND_BACKUP_BUTTON" = "Send Backup as Message";
/* Message indicating that sending the backup failed. */ /* Message indicating that sending
// the backup failed. */
"BACKUP_EXPORT_SEND_BACKUP_FAILED" = "Sending Backup Failed."; "BACKUP_EXPORT_SEND_BACKUP_FAILED" = "Sending Backup Failed.";
/* Message indicating that sending the backup succeeded. */ /* Message indicating that sending the backup succeeded. */
@ -187,7 +190,8 @@
/* Label for button that opens share UI for backup. */ /* Label for button that opens share UI for backup. */
"BACKUP_EXPORT_SHARE_BACKUP_BUTTON" = "Share Backup"; "BACKUP_EXPORT_SHARE_BACKUP_BUTTON" = "Share Backup";
/* Title for the 'backup export' view. */ /* Title for the 'backup export'
// view. */
"BACKUP_EXPORT_VIEW_TITLE" = "Backup"; "BACKUP_EXPORT_VIEW_TITLE" = "Backup";
/* Format for backup filenames. Embeds: {{the date and time of the backup}}. Should not include characters like slash (/ or \\) or colon (:). */ /* Format for backup filenames. Embeds: {{the date and time of the backup}}. Should not include characters like slash (/ or \\) or colon (:). */
@ -1580,7 +1584,10 @@
"SETTINGS_AUDIO_DEFAULT_TONE_LABEL_FORMAT" = "%@ (default)"; "SETTINGS_AUDIO_DEFAULT_TONE_LABEL_FORMAT" = "%@ (default)";
/* Label for the backup view in app settings. */ /* Label for the backup view in app settings. */
"SETTINGS_BACKUP" = "SETTINGS_BACKUP"; "SETTINGS_BACKUP" = "Backup";
/* Label for switch in settings that controls whether or not backup is enabled. */
"SETTINGS_BACKUP_ENABLING_SWITCH" = "Backup Enabled";
/* A label for the 'add phone number' button in the block list table. */ /* A label for the 'add phone number' button in the block list table. */
"SETTINGS_BLOCK_LIST_ADD_BUTTON" = "Add…"; "SETTINGS_BLOCK_LIST_ADD_BUTTON" = "Add…";