2017-07-04 19:24:25 +02:00
|
|
|
//
|
|
|
|
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "AppUpdateNag.h"
|
2017-07-04 19:38:34 +02:00
|
|
|
#import "RegistrationViewController.h"
|
|
|
|
#import "Signal-Swift.h"
|
2017-07-04 19:24:25 +02:00
|
|
|
#import <ATAppUpdater/ATAppUpdater.h>
|
2017-07-21 17:49:38 +02:00
|
|
|
#import <SignalServiceKit/NSDate+OWS.h>
|
2017-07-04 19:24:25 +02:00
|
|
|
#import <SignalServiceKit/TSStorageManager.h>
|
|
|
|
|
|
|
|
NSString *const TSStorageManagerAppUpgradeNagCollection = @"TSStorageManagerAppUpgradeNagCollection";
|
|
|
|
NSString *const TSStorageManagerAppUpgradeNagDate = @"TSStorageManagerAppUpgradeNagDate";
|
|
|
|
|
|
|
|
@interface AppUpdateNag () <ATAppUpdaterDelegate>
|
|
|
|
|
2017-08-01 18:39:10 +02:00
|
|
|
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
|
2017-07-04 19:24:25 +02:00
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
|
|
|
|
@implementation AppUpdateNag
|
|
|
|
|
|
|
|
+ (instancetype)sharedInstance
|
|
|
|
{
|
|
|
|
static AppUpdateNag *sharedInstance = nil;
|
|
|
|
static dispatch_once_t onceToken;
|
|
|
|
dispatch_once(&onceToken, ^{
|
|
|
|
sharedInstance = [[self alloc] initDefault];
|
|
|
|
});
|
|
|
|
return sharedInstance;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (instancetype)initDefault
|
|
|
|
{
|
|
|
|
TSStorageManager *storageManager = [TSStorageManager sharedManager];
|
|
|
|
|
|
|
|
return [self initWithStorageManager:storageManager];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager
|
|
|
|
{
|
|
|
|
self = [super init];
|
|
|
|
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
OWSAssert(storageManager);
|
|
|
|
|
2017-08-01 18:39:10 +02:00
|
|
|
_dbConnection = storageManager.newDatabaseConnection;
|
2017-07-04 19:24:25 +02:00
|
|
|
|
|
|
|
OWSSingletonAssert();
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)showAppUpgradeNagIfNecessary
|
|
|
|
{
|
2017-07-04 19:38:34 +02:00
|
|
|
// Only show nag if we are "at rest" in the home view or registration view without any
|
|
|
|
// alerts or dialogs showing.
|
|
|
|
UIViewController *frontmostViewController =
|
|
|
|
[UIApplication sharedApplication].frontmostViewController;
|
|
|
|
OWSAssert(frontmostViewController);
|
2017-09-06 19:59:39 +02:00
|
|
|
BOOL canPresent = ([frontmostViewController isKindOfClass:[HomeViewController class]] ||
|
|
|
|
[frontmostViewController isKindOfClass:[RegistrationViewController class]]);
|
2017-07-04 19:38:34 +02:00
|
|
|
if (!canPresent) {
|
|
|
|
return;
|
|
|
|
}
|
2017-08-01 18:39:10 +02:00
|
|
|
|
|
|
|
NSDate *lastNagDate = [self.dbConnection dateForKey:TSStorageManagerAppUpgradeNagDate
|
|
|
|
inCollection:TSStorageManagerAppUpgradeNagCollection];
|
2017-07-21 17:49:38 +02:00
|
|
|
const NSTimeInterval kNagFrequency = kDayInterval * 14;
|
2017-07-04 19:24:25 +02:00
|
|
|
BOOL canNag = (!lastNagDate || fabs(lastNagDate.timeIntervalSinceNow) > kNagFrequency);
|
|
|
|
if (!canNag) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ATAppUpdater *updater = [ATAppUpdater sharedUpdater];
|
|
|
|
[updater setAlertTitle:NSLocalizedString(
|
|
|
|
@"APP_UPDATE_NAG_ALERT_TITLE", @"Title for the 'new app version available' alert.")];
|
|
|
|
[updater setAlertMessage:NSLocalizedString(@"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT",
|
|
|
|
@"Message format for the 'new app version available' alert. Embeds: {{The latest app "
|
|
|
|
@"version number.}}.")];
|
|
|
|
[updater setAlertUpdateButtonTitle:NSLocalizedString(@"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON",
|
|
|
|
@"Label for the 'update' button in the 'new app version available' alert.")];
|
2017-09-01 15:30:16 +02:00
|
|
|
[updater setAlertCancelButtonTitle:CommonStrings.cancelButton];
|
2017-07-04 19:24:25 +02:00
|
|
|
[updater setDelegate:self];
|
|
|
|
[updater showUpdateWithConfirmation];
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - ATAppUpdaterDelegate
|
|
|
|
|
|
|
|
- (void)appUpdaterDidShowUpdateDialog
|
|
|
|
{
|
2017-11-08 20:04:51 +01:00
|
|
|
DDLogInfo(@"%@ %s", self.logTag, __PRETTY_FUNCTION__);
|
2017-07-04 19:24:25 +02:00
|
|
|
|
2017-08-01 18:39:10 +02:00
|
|
|
[self.dbConnection setDate:[NSDate new]
|
|
|
|
forKey:TSStorageManagerAppUpgradeNagDate
|
|
|
|
inCollection:TSStorageManagerAppUpgradeNagCollection];
|
2017-07-04 19:24:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void)appUpdaterUserDidLaunchAppStore
|
|
|
|
{
|
2017-11-08 20:04:51 +01:00
|
|
|
DDLogInfo(@"%@ %s", self.logTag, __PRETTY_FUNCTION__);
|
2017-07-04 19:24:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void)appUpdaterUserDidCancel
|
|
|
|
{
|
2017-11-08 20:04:51 +01:00
|
|
|
DDLogInfo(@"%@ %s", self.logTag, __PRETTY_FUNCTION__);
|
2017-07-04 19:24:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@end
|