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.
		
		
		
		
		
			
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "LockInteractionController.h"
 | 
						|
#import "Environment.h"
 | 
						|
#import <SignalServiceKit/AppContext.h>
 | 
						|
 | 
						|
@interface LockInteractionController ()
 | 
						|
 | 
						|
@property (nonatomic) UIAlertController *alertController;
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
#pragma mark -
 | 
						|
 | 
						|
@implementation LockInteractionController
 | 
						|
 | 
						|
+ (instancetype)sharedController
 | 
						|
{
 | 
						|
    OWSAssertDebug(Environment.shared.lockInteractionController);
 | 
						|
 | 
						|
    return Environment.shared.lockInteractionController;
 | 
						|
}
 | 
						|
 | 
						|
- (instancetype)initDefault {
 | 
						|
    self = [super init];
 | 
						|
 | 
						|
    if (!self) {
 | 
						|
        return self;
 | 
						|
    }
 | 
						|
 | 
						|
    OWSAssertIsOnMainThread();
 | 
						|
    OWSSingletonAssert();
 | 
						|
 | 
						|
    return self;
 | 
						|
}
 | 
						|
 | 
						|
+ (void)performBlock:(LIControllerBlockingOperation)blockingOperation
 | 
						|
     completionBlock:(LIControllerCompletionBlock)completionBlock
 | 
						|
          retryBlock:(LIControllerRetryBlock)retryBlock
 | 
						|
         usesNetwork:(BOOL)networkFlag
 | 
						|
 | 
						|
{
 | 
						|
    if (networkFlag) {
 | 
						|
        [CurrentAppContext() setNetworkActivityIndicatorVisible:networkFlag];
 | 
						|
    }
 | 
						|
 | 
						|
    LockInteractionController *sharedController = [LockInteractionController sharedController];
 | 
						|
    sharedController.alertController =
 | 
						|
        [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Upgrading Signal ...", nil)
 | 
						|
                                            message:nil
 | 
						|
                                     preferredStyle:UIAlertControllerStyleAlert];
 | 
						|
 | 
						|
    [CurrentAppContext().frontmostViewController presentViewController:sharedController.alertController
 | 
						|
                                                              animated:YES
 | 
						|
                                                            completion:nil];
 | 
						|
 | 
						|
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 | 
						|
        BOOL success = blockingOperation();
 | 
						|
 | 
						|
        dispatch_async(dispatch_get_main_queue(), ^{
 | 
						|
            [sharedController.alertController
 | 
						|
                dismissViewControllerAnimated:YES
 | 
						|
                                   completion:^{
 | 
						|
                                       if (networkFlag) {
 | 
						|
                                           [CurrentAppContext() setNetworkActivityIndicatorVisible:NO];
 | 
						|
                                       }
 | 
						|
 | 
						|
                                       if (!success) {
 | 
						|
                                           retryBlock(blockingOperation, completionBlock);
 | 
						|
                                       } else {
 | 
						|
                                           completionBlock();
 | 
						|
                                       }
 | 
						|
                                   }];
 | 
						|
        });
 | 
						|
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
+ (LIControllerRetryBlock)defaultNetworkRetry
 | 
						|
{
 | 
						|
    LIControllerRetryBlock retryBlock = ^void(
 | 
						|
        LIControllerBlockingOperation blockingOperation, LIControllerCompletionBlock completionBlock) {
 | 
						|
        UIAlertController *retryController =
 | 
						|
            [UIAlertController alertControllerWithTitle:@"Upgrading Signal failed"
 | 
						|
                                                message:@"An network error occured while upgrading, please check "
 | 
						|
                                                        @"your connectivity and try again."
 | 
						|
                                         preferredStyle:UIAlertControllerStyleAlert];
 | 
						|
 | 
						|
        [retryController
 | 
						|
            addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"REGISTER_FAILED_TRY_AGAIN", nil)
 | 
						|
                                               style:UIAlertActionStyleDefault
 | 
						|
                                             handler:^(UIAlertAction *action) {
 | 
						|
                                                 [self performBlock:blockingOperation
 | 
						|
                                                     completionBlock:completionBlock
 | 
						|
                                                          retryBlock:[LockInteractionController defaultNetworkRetry]
 | 
						|
                                                         usesNetwork:YES];
 | 
						|
                                             }]];
 | 
						|
 | 
						|
        [CurrentAppContext().frontmostViewController presentViewController:retryController animated:YES completion:nil];
 | 
						|
    };
 | 
						|
 | 
						|
    return retryBlock;
 | 
						|
}
 | 
						|
 | 
						|
@end
 |