From 5091c53aa3e441f6a7fb2bccf9488e298d94ccd3 Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Thu, 30 Oct 2014 18:45:14 +0100 Subject: [PATCH] More advanced fixes for push notifications on iOS7 --- Signal/src/AppDelegate.m | 9 ---- Signal/src/network/PushManager.m | 5 +- .../view controllers/RegisterViewController.m | 51 +++++++++---------- 3 files changed, 26 insertions(+), 39 deletions(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 6140a0b49..ebafbd432 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -20,17 +20,8 @@ #import "Util.h" #import "VersionMigrations.h" - - - - - #import - - - - #define kSignalVersionKey @"SignalUpdateVersionKey" #ifdef __APPLE__ diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index ce0a31c79..f168b5984 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -111,6 +111,9 @@ if (SYSTEM_VERSION_LESS_THAN(_iOS_8_0)) { [UIApplication.sharedApplication registerForRemoteNotificationTypes:(UIRemoteNotificationType)self.mandatoryNotificationTypes]; + if ([self isMissingMandatoryNotificationTypes]) { + [self.pushNotificationFutureSource trySetFailure:@"Missing Types"]; + } } else { [UIApplication.sharedApplication registerForRemoteNotifications]; } @@ -175,8 +178,6 @@ } else{ return self.wantRemoteNotifications && (!UIApplication.sharedApplication.isRegisteredForRemoteNotifications); } - - } -(BOOL) wantRemoteNotifications { diff --git a/Signal/src/view controllers/RegisterViewController.m b/Signal/src/view controllers/RegisterViewController.m index 1f0f4b014..3a5459500 100644 --- a/Signal/src/view controllers/RegisterViewController.m +++ b/Signal/src/view controllers/RegisterViewController.m @@ -42,14 +42,14 @@ [self localizeButtonText]; DDLogInfo(@"Opened Registration View"); - + [self populateDefaultCountryNameAndCode]; _scrollView.contentSize = _containerView.bounds.size; - + BOOL isRegisteredAlready = Environment.isRegistered; _registerCancelButton.hidden = !isRegisteredAlready; - + [self initializeKeyboardHandlers]; [self setPlaceholderTextColor:[UIColor lightGrayColor]]; } @@ -58,7 +58,7 @@ RegisterViewController *viewController = [RegisterViewController new]; viewController->life = [TOCCancelTokenSource new]; viewController->registered = [TOCFutureSource futureSourceUntil:viewController->life.token]; - + return viewController; } @@ -122,7 +122,7 @@ if(localNumber==nil){ return; } [_phoneNumberTextField resignFirstResponder]; - + [_registerActivityIndicator startAnimating]; _registerButton.enabled = NO; @@ -170,28 +170,23 @@ } failure:^(NSURLSessionDataTask *task, NSError *error) { NSString *alertTitle = NSLocalizedString(@"REGISTRATION_ERROR", @""); - if ([error isKindOfClass:HttpResponse.class]) { - NSHTTPURLResponse* badResponse = (NSHTTPURLResponse*)task.response; - if (badResponse.statusCode == 401) { - SignalAlertView(alertTitle, REGISTER_CHALLENGE_ALERT_VIEW_BODY); - } else if (badResponse.statusCode == 401){ - SignalAlertView(alertTitle, NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @"")); - } else { - NSString *alertBodyString = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"SERVER_CODE", @""),(unsigned long)badResponse.statusCode]; - SignalAlertView (alertTitle, alertBodyString); - } - } else{ - Environment.errorNoter(error, @"While Verifying Challenge.", NO); - SignalReportError + NSHTTPURLResponse* badResponse = (NSHTTPURLResponse*)task.response; + if (badResponse.statusCode == 401) { + SignalAlertView(alertTitle, REGISTER_CHALLENGE_ALERT_VIEW_BODY); + } else if (badResponse.statusCode == 401){ + SignalAlertView(alertTitle, NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @"")); + } else { + NSString *alertBodyString = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"SERVER_CODE", @""),(unsigned long)badResponse.statusCode]; + SignalAlertView (alertTitle, alertBodyString); } - _challengeButton.enabled = YES; + _challengeButton.enabled = YES; [_challengeActivityIndicator stopAnimating]; }]; } - (void)showViewNumber:(NSInteger)viewNumber { - + if (viewNumber == REGISTER_VIEW_NUMBER) { [_registerActivityIndicator stopAnimating]; _registerButton.enabled = YES; @@ -219,7 +214,7 @@ NSDate *now = [NSDate new]; timeoutDate = [[NSDate alloc] initWithTimeInterval:smsTimeoutTimeInterval sinceDate:now]; - + countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countdowntimerFired) @@ -237,9 +232,9 @@ unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:now toDate:timeoutDate options:0]; NSString* timeLeft = [NSString stringWithFormat:@"%ld:%02ld",(long)[conversionInfo minute],(long)[conversionInfo second]]; - + [self.voiceChallengeTextLabel setText:timeLeft]; - + if (0 <= [now compare:timeoutDate]) { [self initiateVoiceVerification]; } @@ -271,7 +266,7 @@ - (void)initializeKeyboardHandlers{ UITapGestureRecognizer *outsideTabRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboardFromAppropriateSubView)]; [self.view addGestureRecognizer:outsideTabRecognizer]; - + [self observeKeyboardNotifications]; } @@ -285,7 +280,7 @@ selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification @@ -341,7 +336,7 @@ -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString* textBeforeChange = textField.text; - + // backspacing should skip over formatting characters UITextPosition *posIfBackspace = [textField positionFromPosition:textField.beginningOfDocument offset:(NSInteger)(range.location + range.length)]; @@ -362,7 +357,7 @@ // make the proposed change NSString* textAfterChange = [textBeforeChange withCharactersInRange:range replacedBy:string]; NSUInteger cursorPositionAfterChange = range.location + string.length; - + // reformat the phone number, trying to keep the cursor beside the inserted or deleted digit bool isJustDeletion = string.length == 0; NSString* textAfterReformat = [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:textAfterChange.digitsOnly @@ -375,7 +370,7 @@ UITextPosition *pos = [textField positionFromPosition:textField.beginningOfDocument offset:(NSInteger)cursorPositionAfterReformat]; [textField setSelectedTextRange:[textField textRangeFromPosition:pos toPosition:pos]]; - + return NO; // inform our caller that we took care of performing the change }