From 6951fd1fbe3ba8b7e389fb4cfbd2fd7912c23dbe Mon Sep 17 00:00:00 2001 From: Gil Azaria Date: Sat, 1 Nov 2014 13:33:11 +1100 Subject: [PATCH 1/7] Fixed issue #139. Testing has been completed on outgoing calls only. It is recommended that testing is conducted on incoming calls before a commit to upstream. --- Podfile.lock | 2 +- Signal/src/audio/AppAudioManager.h | 6 ++- Signal/src/audio/AppAudioManager.m | 40 ++++++++++++++----- Signal/src/audio/SoundBoard.m | 13 ++++-- Signal/src/audio/SoundInstance.h | 16 ++++++++ Signal/src/audio/SoundInstance.m | 10 ++++- Signal/src/audio/SoundPlayer.h | 11 +++++ Signal/src/audio/SoundPlayer.m | 3 ++ .../view controllers/InCallViewController.m | 17 +------- 9 files changed, 86 insertions(+), 32 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index e64e5201c..bae2bb60e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -70,4 +70,4 @@ SPEC CHECKSUMS: UICKeyChainStore: eef407137f0397e95a3df32cdf05f7e2ddd99647 UnionFind: 45777a8b6878d3a602af3654cc3a09b87389d356 -COCOAPODS: 0.34.1 +COCOAPODS: 0.34.4 diff --git a/Signal/src/audio/AppAudioManager.h b/Signal/src/audio/AppAudioManager.h index 19f8cc0a9..952ce809f 100644 --- a/Signal/src/audio/AppAudioManager.h +++ b/Signal/src/audio/AppAudioManager.h @@ -2,6 +2,7 @@ #import "CallProgress.h" #import "CallTermination.h" +#import "SoundPlayer.h" /** * The AppAudioManager is a Singleton object used to control audio settings / updates @@ -13,7 +14,7 @@ * which speaker to use or if all sounds should be muted. **/ -@interface AppAudioManager : NSObject +@interface AppAudioManager : NSObject enum AudioProfile { AudioProfile_Default, @@ -37,4 +38,7 @@ enum AudioProfile { -(BOOL) setAudioEnabled:(BOOL) enable; -(void) awake; + +- (void)didCompleteSoundInstanceOfType:(SoundInstanceType)instanceType; + @end diff --git a/Signal/src/audio/AppAudioManager.m b/Signal/src/audio/AppAudioManager.m index 40b415b9e..85a3f27e5 100644 --- a/Signal/src/audio/AppAudioManager.m +++ b/Signal/src/audio/AppAudioManager.m @@ -28,7 +28,7 @@ AppAudioManager* sharedAppAudioManager; if( nil == sharedAppAudioManager){ sharedAppAudioManager = [AppAudioManager new]; sharedAppAudioManager.soundPlayer = [SoundPlayer new]; - [sharedAppAudioManager setAudioEnabled:YES]; + [[sharedAppAudioManager soundPlayer] setDelegate:sharedAppAudioManager]; } } return sharedAppAudioManager; @@ -74,9 +74,11 @@ AppAudioManager* sharedAppAudioManager; } #pragma mark AudioControl; --(void) respondToProgressChange:(enum CallProgressType) progressType forLocallyInitiatedCall:(BOOL) initiatedLocally { +-(void) respondToProgressChange:(enum CallProgressType) progressType + forLocallyInitiatedCall:(BOOL) initiatedLocally { switch (progressType){ case CallProgressType_Connecting: + [sharedAppAudioManager setAudioEnabled:YES]; [_soundPlayer stopAllAudio]; case CallProgressType_Ringing: (initiatedLocally) ? [self handleOutboundRing] : [self handleInboundRing]; @@ -106,12 +108,13 @@ AppAudioManager* sharedAppAudioManager; -(BOOL) shouldErrorSoundBePlayedForCallTerminationType:(enum CallTerminationType) type{ [_soundPlayer stopAllAudio]; - if (CallTerminationType_RejectedLocal) {return NO;} - else if (CallTerminationType_RejectedRemote) {return NO;} - else if (CallTerminationType_HangupLocal) {return NO;} - else if (CallTerminationType_HangupRemote) {return NO;} - else if (CallTerminationType_RecipientUnavailable) {return NO;} - + if (type == CallTerminationType_RejectedLocal || + type == CallTerminationType_RejectedRemote || + type == CallTerminationType_HangupLocal || + type == CallTerminationType_HangupRemote || + type == CallTerminationType_RecipientUnavailable) { + return NO; + } return YES; } @@ -174,14 +177,31 @@ AppAudioManager* sharedAppAudioManager; -(BOOL) setAudioEnabled:(BOOL) enable { NSError* e; - [AVAudioSession.sharedInstance setActive:enable error:&e]; - [_soundPlayer awake]; + if (enable) { + [[AVAudioSession sharedInstance] setActive:enable error:&e]; + [_soundPlayer awake]; + } + else { + [[AVAudioSession sharedInstance] setActive:enable + withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation + error:&e]; + } return ( nil !=e ); } -(void) awake { [_soundPlayer awake]; } + +#pragma mark Sound Player Delegate + +- (void)didCompleteSoundInstanceOfType:(SoundInstanceType)instanceType { + if (instanceType == SoundInstanceTypeBusySound || + instanceType == SoundInstanceTypeErrorAlert || + instanceType == SoundInstanceTypeAlert) { + [sharedAppAudioManager setAudioEnabled:NO]; + } +} @end diff --git a/Signal/src/audio/SoundBoard.m b/Signal/src/audio/SoundBoard.m index c7a6d8b32..5d30af88d 100644 --- a/Signal/src/audio/SoundBoard.m +++ b/Signal/src/audio/SoundBoard.m @@ -10,42 +10,49 @@ static NSString* SoundFile_Ringtone =@"r.caf"; @implementation SoundBoard -+(SoundInstance*) instanceOfInboundRingtone{ ++(SoundInstance*) instanceOfInboundRingtone { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Ringtone]; [soundInstance setAudioToLoopIndefinitely]; + [soundInstance setInstanceType:SoundInstanceTypeInboundRingtone]; return soundInstance; } -+(SoundInstance*) instanceOfOutboundRingtone{ ++(SoundInstance*) instanceOfOutboundRingtone { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Outbound]; [soundInstance setAudioToLoopIndefinitely]; + [soundInstance setInstanceType:SoundInstanceTypeBusySound]; return soundInstance; } -+(SoundInstance*) instanceOfHandshakeSound { ++(SoundInstance*) instanceOfHandshakeSound { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Handshake]; [soundInstance setAudioToLoopIndefinitely]; + [soundInstance setInstanceType:SoundInstanceTypeHandshakeSound]; return soundInstance; } +(SoundInstance*) instanceOfCompletedSound { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Completed]; + [soundInstance setInstanceType:SoundInstanceTypeCompletedSound]; return soundInstance; } +(SoundInstance*) instanceOfBusySound { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Busy]; [soundInstance setAudioLoopCount:10]; + [soundInstance setInstanceType:SoundInstanceTypeBusySound]; return soundInstance; } +(SoundInstance*) instanceOfErrorAlert { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Failure]; + [soundInstance setInstanceType:SoundInstanceTypeErrorAlert]; return soundInstance; } +(SoundInstance*) instanceOfAlert { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Alert]; + [soundInstance setInstanceType:SoundInstanceTypeAlert]; return soundInstance; } diff --git a/Signal/src/audio/SoundInstance.h b/Signal/src/audio/SoundInstance.h index c8bec5681..80299e552 100644 --- a/Signal/src/audio/SoundInstance.h +++ b/Signal/src/audio/SoundInstance.h @@ -6,10 +6,26 @@ @interface SoundInstance : NSObject +typedef enum { + SoundInstanceTypeNothing, + SoundInstanceTypeInboundRingtone, + SoundInstanceTypeOutboundRingtone, + SoundInstanceTypeHandshakeSound, + SoundInstanceTypeCompletedSound, + SoundInstanceTypeBusySound, + SoundInstanceTypeErrorAlert, + SoundInstanceTypeAlert +} SoundInstanceType; + +@property (nonatomic) SoundInstanceType instanceType; + +(SoundInstance*) soundInstanceForFile:(NSString*) audioFile; -(NSString*) getId; -(void) setAudioToLoopIndefinitely; -(void) setAudioLoopCount:(NSInteger) loopCount; -(void) setCompeletionBlock:(void (^)(SoundInstance*)) block; + +- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player + successfully:(BOOL)flag; @end diff --git a/Signal/src/audio/SoundInstance.m b/Signal/src/audio/SoundInstance.m index 571b5876a..87caf0ee4 100644 --- a/Signal/src/audio/SoundInstance.m +++ b/Signal/src/audio/SoundInstance.m @@ -5,6 +5,7 @@ } @property (retain) AVAudioPlayer *audioPlayer; + @end @implementation SoundInstance @@ -26,6 +27,7 @@ -(void) stop { [self.audioPlayer stop]; + [self audioPlayerDidFinishPlaying:self.audioPlayer successfully:YES]; } -(void) setAudioToLoopIndefinitely { @@ -36,6 +38,13 @@ self.audioPlayer.numberOfLoops = loopCount; } +- (SoundInstanceType)instanceType { + if (!_instanceType) { + _instanceType = SoundInstanceTypeNothing; + } + return _instanceType; +} + +(NSURL*) urlToFile:(NSString*) file { return [NSURL fileURLWithPath: [NSString stringWithFormat:@"%@/%@", NSBundle.mainBundle.resourcePath,file]]; @@ -50,7 +59,6 @@ return audioPlayer; } - -(void) setCompeletionBlock:(void (^)(SoundInstance* )) block { completionBlock = block; } diff --git a/Signal/src/audio/SoundPlayer.h b/Signal/src/audio/SoundPlayer.h index a098836d4..b5ca76921 100644 --- a/Signal/src/audio/SoundPlayer.h +++ b/Signal/src/audio/SoundPlayer.h @@ -7,12 +7,23 @@ * sound is ignored. Multiple different sound instances can be played concurrently. */ +@protocol SoundPlayerDelegate; + @interface SoundPlayer : NSObject +@property (strong, nonatomic) id delegate; + -(void) playSound:(SoundInstance*) player; -(void) stopSound:(SoundInstance*) player; -(void) stopAllAudio; -(void) awake; + @end +@protocol SoundPlayerDelegate + +@optional +- (void)didCompleteSoundInstanceOfType:(SoundInstanceType)instanceType; + +@end diff --git a/Signal/src/audio/SoundPlayer.m b/Signal/src/audio/SoundPlayer.m index eadbbd789..f3d18a299 100644 --- a/Signal/src/audio/SoundPlayer.m +++ b/Signal/src/audio/SoundPlayer.m @@ -22,6 +22,9 @@ NSMutableDictionary* currentActiveAudioPlayers; @synchronized(currentActiveAudioPlayers){ [sound setCompeletionBlock:^(SoundInstance* soundInst) { [self removeSoundFromManifest:soundInst]; + if (self.delegate) { + [self.delegate didCompleteSoundInstanceOfType:soundInst.instanceType]; + } }]; [currentActiveAudioPlayers setValue:sound forKey:sound.getId]; } diff --git a/Signal/src/view controllers/InCallViewController.m b/Signal/src/view controllers/InCallViewController.m index 8cf6bcafb..2e76fb24a 100644 --- a/Signal/src/view controllers/InCallViewController.m +++ b/Signal/src/view controllers/InCallViewController.m @@ -7,8 +7,6 @@ #import "CallAudioManager.h" #import "PhoneManager.h" -#import - #define BUTTON_BORDER_WIDTH 1.0f #define CONTACT_IMAGE_BORDER_WIDTH 2.0f #define RINGING_ROTATION_DURATION 0.375f @@ -24,7 +22,6 @@ static NSInteger connectingFlashCounter = 0; @interface InCallViewController () { - BOOL _isMusicPaused; CallAudioManager *_callAudioManager; NSTimer *_connectingFlashTimer; NSTimer *_ringingAnimationTimer; @@ -47,7 +44,6 @@ static NSInteger connectingFlashCounter = 0; - (void)viewDidLoad { [super viewDidLoad]; [self showCallState]; - [self pauseMusicIfPlaying]; [self setupButtonBorders]; [self localizeButtons]; [UIDevice.currentDevice setProximityMonitoringEnabled:YES]; @@ -75,13 +71,6 @@ static NSInteger connectingFlashCounter = 0; [self handleIncomingDetails]; } -- (void)pauseMusicIfPlaying { - if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying) { - _isMusicPaused = YES; - [[MPMusicPlayerController iPodMusicPlayer] pause]; - } -} - - (void)startConnectingFlashAnimation { if(!_ringingAnimationTimer.isValid){ _connectingFlashTimer = [NSTimer scheduledTimerWithTimeInterval:CONNECTING_FLASH_DURATION @@ -207,7 +196,7 @@ static NSInteger connectingFlashCounter = 0; BOOL showAcceptRejectButtons = !_callState.initiatedLocally && [latestProgress type] <= CallProgressType_Ringing; [self displayAcceptRejectButtons:showAcceptRejectButtons]; [AppAudioManager.sharedInstance respondToProgressChange:[latestProgress type] - forLocallyInitiatedCall:_callState.initiatedLocally]; + forLocallyInitiatedCall:_callState.initiatedLocally]; if ([latestProgress type] == CallProgressType_Ringing) { [self startRingingAnimation]; @@ -228,10 +217,6 @@ static NSInteger connectingFlashCounter = 0; [Environment.phoneManager hangupOrDenyCall]; [self dismissViewWithOptionalDelay: [termination type] != CallTerminationType_ReplacedByNext ]; - - if (_isMusicPaused) { - [[MPMusicPlayerController iPodMusicPlayer] play]; - } } - (void)endCallTapped { From f771487aab141d29b05c343ed5dbaeefb1c7d35e Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Wed, 29 Oct 2014 14:25:41 +0100 Subject: [PATCH 2/7] Fixing singleton initialization //FREEBIE --- Signal/src/network/PushManager.m | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index d21c4432f..ce0a31c79 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -25,15 +25,21 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedManager = [self new]; - sharedManager.missingPermissionsAlertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ACTION_REQUIRED_TITLE", @"") - message:NSLocalizedString(@"PUSH_SETTINGS_MESSAGE", @"") - delegate:nil - cancelButtonTitle:NSLocalizedString(@"OK", @"") - otherButtonTitles:nil, nil]; }); return sharedManager; } +- (instancetype)init{ + self = [super init]; + if (self) { + self.missingPermissionsAlertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ACTION_REQUIRED_TITLE", @"") + message:NSLocalizedString(@"PUSH_SETTINGS_MESSAGE", @"") + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"") + otherButtonTitles:nil, nil]; + } + return self; +} - (void)verifyPushPermissions{ if (self.isMissingMandatoryNotificationTypes || self.needToRegisterForRemoteNotifications){ From 3031d68523f65ff1e8c894a532544f9156a8a4ca Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Thu, 30 Oct 2014 18:45:14 +0100 Subject: [PATCH 3/7] 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 } From 7d4fb1ae1ac89c70d9aa6553ce87674f923297eb Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Thu, 30 Oct 2014 18:51:29 +0100 Subject: [PATCH 4/7] Updating Pods & translations for release //FREEBIE --- Pods | 2 +- .../translations/da.lproj/Localizable.strings | Bin 15700 -> 15720 bytes .../translations/fr.lproj/Localizable.strings | Bin 16620 -> 16710 bytes .../it_IT.lproj/Localizable.strings | Bin 16272 -> 16374 bytes .../translations/nl.lproj/Localizable.strings | Bin 16160 -> 16174 bytes .../tr_TR.lproj/Localizable.strings | Bin 15288 -> 16024 bytes 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Pods b/Pods index 585c9e6ca..753929c7a 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 585c9e6ca1b55e99fb5c09aa31a6d590c2be5c58 +Subproject commit 753929c7acb6a3807fc705e2e567cb5d16fe0960 diff --git a/Signal/translations/da.lproj/Localizable.strings b/Signal/translations/da.lproj/Localizable.strings index 281123d1d47ad7a6e5684ce6798d809781935ef8..1435b1c6816c11efeef263d9777cb3bc266c09cc 100644 GIT binary patch delta 603 zcmZuvF-yZ>5WQlkwWgF-1fd8)v6gCuh&t3k2gSMwBDl9Et*tdJNgAX}adW>#9Q+MJ zKst*5py1%3L6>i zRRFe7=;A6&G7wpK1nL}=7D!A$Ib`y2a^Am6+$d8XIHX&XC)0J#r*i&nx-`QdTk(j^ zx<1Rhxfnk!#rP-{<+*Hnx(=Kg5FwKX`DOmhF8FS?uk`kDp;3n}0$L-`GS>aqmCmRc z@k_MW=%R}EY!nNHcy)?1(QW`&Ll$)YE7K)cLFvw@sE48d;$02(VglqN z(txbN=>~QcaMaPabS@JpBg+k3Z~mNA`K^%QXFZ*ieyyOQCeAT$FLF^=VN}$=EA$ni m-3)0Rh%19k#w$}84_XYDVRryf0ImEgCKY+Gk?|kb@8jPtvWa5= delta 647 zcmZuvu}T9$5FO!&nB>sJLL`W%U{EwEVkbz57RFw%6Ov23#9VUWZZDEFY13~n*jfn( z;x|}XSXx*p*!l;)nM;U;EW10mJM-qfxA#4I8$AxvsS^sRi_s)s57TGm3iZgMI!+zz zw^XA5djt0h)0VYCMVwXf?NT36C^=o^cC=}(9V^N5aZ{%uRv(#t@~|sv1D}x)G}a$6rWLy0Vhf9~mQh$W~X)Q}lE(1XbS`bNY2B zsjo5#y_?UbnpB`^2H!aVHFup)%?ixskxDO|> zZ81YGhiPCJ8(l-pve}ZZz|FV@_;QdN;wb_;0773h@dMA5SuoVWPg^KK~)3Le5aQaJL9O_YR13 z5EG4X%Xial=am0w$TGhMMRd}$|g#X~B{#3q@< z+0AfWGgGU#*XA;g72*b!ecSQR3UYF%uj=u|Ys{!1OF3oU(Cc_D!XB?>I%+~SY5Pd1cA_N3MkPujGVq+{+2sTHsu}vk|odISW~!qR3Nd;frN zf56HgVP|h`?VCA4S>|JB-pqTu?+>l7`_}8Q6OAy3K@5*e#tIWG8B=6%v_yT10c)qc zTP&D)#at1ahwH=5QLJdem+Zz^(U-g}P%t{o$RXPurp#r(R1$jOnZt$NMz8+vJa4x% z?BRrqEo>O?M)gPkcI~dw=!wi}1yzb>VJnrv&?h`zSyT2ZWwOKwYe_|a8Vc5Kbb5vh z)w<%m*EgPNW~s}tBUJ;t!{PjQl??xXnmolJ3gdqF<$SOnp7ys6n!aTx(?ykHrkq?7 XJE1inn2Z)V=SnaxA_Sw6lu7LO#5SPID`5-o`Y=BsgBK8XU7OAn^u zr-;VL988b`xk@fj8Hxk%5E+H7@Zc%rDY=0cqK?cdkQ59`x)x1vk7Wb*3}^^8-g`KG z(JO#&K^IsN6c8amVjoz7Hi0;1G~cQ|=B}4qGAen44G^H#OPB|?T79jRk<=;)%iLg2Xqc&%5bD1-qB3}dht2srTmVGm9ubKmQx>{>5OqC~=jKifr zvc@ara&r6%oH3R(o=D*q*`=|$T?ATjDfM7%!X4!D0;F%58Ly>hh;j5g7#@<-)Z3-r zK0@3wseDB6qUL^gvwC(qGu{7`UfERgWhmB@cksxKa-JmeZ1tCMJ#P%~vItf~YVLg{2 z@Qk;}xfTI+!BqOntQs72*RK9&RqsS` fC)V{6Nq3^`y_Ko=9MHNhW+1NIIqp=iM~BT%L~?dY diff --git a/Signal/translations/nl.lproj/Localizable.strings b/Signal/translations/nl.lproj/Localizable.strings index f326ef8d4232259333c5c03fdde7ae3dc3c9dc7f..04d01bc01a83c918fed1a2862024edfa47d67bf7 100644 GIT binary patch delta 119 zcmZ2bx2|r(H%3O?&EFaSYEM2R%@Ll+kjRk7Py!@#7!-gch?mQd3go3QWCGdgKz1Hb uCX=BUNaix+gJnTFQo*Vez$$Wp^0`0^5iMd!nJj4QJXuOjX!9(+HUR*xUmfQF delta 164 zcmZ2ix1esrH%3N<&EFaSYS)J_WH6*MC@>TQ$s&d_FsZf^{kI02M$CEMm}`ET|^Ed4*n^007n2B%1&L diff --git a/Signal/translations/tr_TR.lproj/Localizable.strings b/Signal/translations/tr_TR.lproj/Localizable.strings index 48996554c2669fe716e8b84fd5c0f6d58b8bc5ca..67d902b71bd1b7be82605db0beb3ddfcc02b141c 100644 GIT binary patch literal 16024 zcmb`O+frM}6^6HN^Ac#t#UwQ;$K-sdBqa_54CW97K3zn`j2WAN!6mS(%nQy-t9WG?}N1QOi|dag0V{#hOCJ+IdF zgufkCkMwT28diVP@3LOMuP&<7>b2gz)c;fcp6kh({`S}EXZm-f-Nw}ueezIytm*wD z{YGEvRuA;IQFuBH(oXgM@A?^vtF!7>&(6Xx zH2r*6PfB`zUh;jS&%e|sUj%NjO`R{ahFssyC`_wsy}H!zt+R!3t^RmL$XG z8?qZZ#tZgk6<#g&0{mlCJ=6M8#?6*?*q7DfZpZr6kv!~Kw)?VVwU_=!x;qd0KbLJ@ zRB!c{YrX%F?FgMC(I5uk>rneYnNfg)$KmNHcyXJz?nq?AqqBPEE?MadwX^Fi*f9FMVT!h$~Ck5I#7H{aD?C_-8l2yjDEYY6r z%Ge^Fi7Rpx`R`P6MTypBLracVLThtIiN8F{^sy>UzpOqf;?mk}eTI0sZ^m@w<@t}? zm-b>$axOcM#m~cx4_-TC&tJ2Wt?9SoH`$7jB5SQDrQc@j@b0gBuKQiKZZlZ5AD_R^ z)_qg$$O8S={UKYoD@*V9T=&Op-GOQ?Ht9$4Pua>NdGX_(>;9ards01>A3pE7@<39N zW7o4C+Ic0ac4cLIZyygUSLFW1>o%V(SLFW1>%}W_&*Jss6}eCGdhv?fn|Qr=Meawu zUc4grAYLzCk$VoW7q7^DhS!T%94K;*i=6*e&vi{7`+2bvl(wqfV?JHg`!z-Cv9k6= z`N4G+w7Ps(JAY7iUK&h8Jvi5E*E!dpmBD4GclB)-*2cSpe zFsh8v=ORhKHB|5%&m|N`OoD5uD^H{?YJhPAsDQfAh4VoOuOtyQ&iL?)JInOjbu25b zDl^bSBY7`2SWkj3wzLK`bEquNzezXa zK;f+@BHxyHz{9X_uKOm{MST@Ix0ErOLFOgzV0NC3MR%kK11Gh|7kphxH`hUrM%jIN zHI>a-{63Ory3a^D!0+A!$%&wO+AjA3-|lKZ^!_=!!OLdIGhK4;ONVde72ss|P~a{y z0`ZQ&tPCQW##`t*=Gm?6L!nBf(i`O7K^Kc`UyHY=nPjD}ICq^?{}vB_(WjiVn^p#^ zu>Z02jvtb>OCJQC4nu^+ZlH`Q`qxv%5t1KsX(B;|pA;he6FXWxY9&Q-~>d6qXHP$3JT`Lnrk+C~YiL(k`m;;NH-l94vk0jfak z{f4sFsjUA}TDw?CGnZtds@C-WBo+FL8b-345W)2>y=mdP#;n6;WF$&CmHzsp=9ArA zK~_T_zNdFjYuTRIpf(Ow3tTy^NypAJ{pF1$i*&I9)4P1a42G-) z?@VK$f)&V3^fE+jJ*&kz65ODTvDO`il{scZ9_aqG^!CITJzccombCgNpqZgG?789V zh0=NQV6XdJ`S2RF`u$8!kOlSPLRN+kCXD$sv!5RNb5_?x9)s_dz0ZFlEzGm=eRUA4 z7-(u$Uh`BQ^jH?%5RzqD1L|=^5xwM7vi3%J4eDIiPdU4$PP|gR_MA3H+UJTi&uqbj zpF)kp8;L(6z`kOukjvhx0+REo1+msI4I(mS=6ER&V>W!DPq;2!-s$*rBtq7MnlDcS z0;5lX&)Avd2$)(-WpZ?_446RM4peHmXNDiA>2Zf7F<2Sg{Yki(ehE)WIR`ng2zel3 z2_n73y{g5BpCaK08`RvZsZ(TfsHf}_FBUJTLhwZe>43wfDz1#*(l^Tk+L`Os; z`YH8heUKyTz7aJx88B%#_Mopw8f4X(_VgJ5-3s{efu1hrf{ei_!5jVX`5WntS8I6F%_Pe3qYZV7r~jWlZHAJ#BW$*B`9E|1oxT}oQz82}Z6DoNxf zYtd0aiSF)5RIK51c_QZ}`NX}CbS1@nMWUE{TRz#%Kb^e1l!yo@kg)`k0MXy{Vk^#d;0P00KIHx76Yd&4PvH&4^Fvq?8S|;s#RLn4awMM4 zr7;jol-;LSSeDGoq!wJBR|fk{JZod-9T6E(g2&^fli)j`BImuXcx35%8c*+&p7A^IP+4=@>gzagM(-lG& z`S?pd?cG=HP5wz9bmtcBcA$I%&h-o-_Za8JzBf)@1gs6t#7ZAThf2tN(Y3&JAN!`8 zC@-szl9v@X`u9S=p3?cw!?m8+AL49`-0)gYV;|&crZo5yAN@%SCOAF4Wk z4A#WAQw}ew^r_oMq2ANj9beD6X6DW0#*>`IIcullHiOS}JY|Nfa+jFV6H2l4DSpfs z(P%W)%~9IR($lTveFD7!x1z|z^h&W;pSRgDPTo(l%Lf%bukUv zAa9ea&;(g_qF8KBNp6)X-0k26M&mK(x)%8)4z$_qc<`FM%OQ4%N}ug<7ExLR9=;bx z#`DA$S%MQj?$o7Dxy_gFr=k3A0=`L>jrRjNwm?Lk8jyy$Q^onIsjyFM<2JRo*ZG=sb){@d? zlC$aHkvV4R3)TA53JFv9+TD1|!KbyLDQfIgCQ)Cc0+b3gKxr((@h{rk-;no_#QaBZUpL&EM` zqxl3fkI!a4@3wtTF~7BxEL_hDO{(3yA1V(MiN-FzTM>~()0fIK;>iI05|8u%zWu@s z+*vrzoXAcQfujRzTddN}Jj6~+N{CRh7@2LpN6yPdK9^<^2wDa!xpPRBsMO-OqDTHF z3w@Me9w1Q(oH`n2Bn(|yXx_Z;eT$W3wdL0XL% zo65pFzCCg(?{$CHq`~Ac-mIjSjKZvx+bGm}@)CCglgDuL=_*){jv9&Ag~!0>pl&ja z5h$MJyIcKf-&e-mdpGV)9cttaTbmg7N##V(nFaD~m3+q6-t{}|lGAHt*^@IsJeVS#-YL$wX;p(6oLV)i%t#FI!SsIT5AbBFm?_mwT0bn$V=w zZ$d%ciW8)6zv-Hbmez{dH=l6L+cUqp-hR)niO%LlFMDin zJvNlz+@IG`;?e-DOwM7d!R?UK(93}Dx-|hO_&_~(C;3MW`46RA-)xQ*WHUn;-L#lr z@jbTKBlt8d`bW24#A)%7px#z*^ zbZe!3s{e4n%~oWpuf-ohc)o+3ZqjnU@=?$;zTfN%M)L2Jb?eg_&|8jZsJ>VC4&d;TB$ C6_zOg literal 15288 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 From 24ee727d6c482ede685b13e08ec5ba2ca670b883 Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Thu, 30 Oct 2014 19:29:19 +0100 Subject: [PATCH 5/7] Closes #181 //FREEBIE --- Signal/src/contact/ContactsManager.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Signal/src/contact/ContactsManager.m b/Signal/src/contact/ContactsManager.m index 717adf3bf..b413b0e66 100644 --- a/Signal/src/contact/ContactsManager.m +++ b/Signal/src/contact/ContactsManager.m @@ -324,7 +324,7 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in }]; return [matchingContacts groupBy:^id(Contact *contact) { - NSString *nameToUse = @""; + NSString *nameToUse = @" "; BOOL firstNameOrdering = ABPersonGetSortOrdering() == kABPersonCompositeNameFormatFirstNameFirst?YES:NO; From 40c7adfda9eb738d565c838faadddb17915234e3 Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Thu, 30 Oct 2014 19:58:36 +0100 Subject: [PATCH 6/7] Bump up version number of release. --- Signal/Signal-Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index 2bcac3f11..62a7793d0 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -21,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0.7 + 1.0.8 CFBundleSignature ???? CFBundleVersion - 1.0.7 + 1.0.8 LOGS_EMAIL support@whispersystems.org LOGS_URL From 9fac4209b2d448c96780ebf1375ae12bd247994d Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Sat, 1 Nov 2014 23:59:38 +0100 Subject: [PATCH 7/7] Vibrations and minor fix in audio interrupts --- Signal.xcodeproj/project.pbxproj | 80 +------------------ Signal/src/audio/AppAudioManager.m | 11 ++- Signal/src/audio/SoundBoard.m | 2 +- .../view controllers/InCallViewController.h | 8 ++ .../view controllers/InCallViewController.m | 32 ++++++-- 5 files changed, 43 insertions(+), 90 deletions(-) diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 927ea0d5a..b0a545073 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -347,50 +347,13 @@ A1C32D5117A06544000A904E /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1C32D4D17A0652C000A904E /* AddressBook.framework */; }; AA0C8E498E2046B0B81EEE6E /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8313AE91B4954215858A5662 /* libPods.a */; }; B60C16651988999D00E97A6C /* VersionMigrations.m in Sources */ = {isa = PBXBuildFile; fileRef = B60C16641988999D00E97A6C /* VersionMigrations.m */; }; + B60EDE041A05A01700D73516 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B60EDE031A05A01700D73516 /* AudioToolbox.framework */; }; B63761E319E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E219E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m */; }; B63761EC19E1FBE8005735D1 /* HttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E519E1FBE8005735D1 /* HttpRequest.m */; }; B63761ED19E1FBE8005735D1 /* HttpRequestOrResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E719E1FBE8005735D1 /* HttpRequestOrResponse.m */; }; B63761EE19E1FBE8005735D1 /* HttpRequestUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E919E1FBE8005735D1 /* HttpRequestUtil.m */; }; B63761EF19E1FBE8005735D1 /* HttpResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761EB19E1FBE8005735D1 /* HttpResponse.m */; }; - B6416FAD199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F36199A0478003C5699 /* Localizable.strings */; }; - B6416FAE199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F39199A0478003C5699 /* Localizable.strings */; }; - B6416FAF199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F3C199A0478003C5699 /* Localizable.strings */; }; - B6416FB0199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F3F199A0478003C5699 /* Localizable.strings */; }; - B6416FB1199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F42199A0478003C5699 /* Localizable.strings */; }; - B6416FB2199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F45199A0478003C5699 /* Localizable.strings */; }; - B6416FB3199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F48199A0478003C5699 /* Localizable.strings */; }; - B6416FB4199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F4B199A0478003C5699 /* Localizable.strings */; }; - B6416FB5199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F4E199A0478003C5699 /* Localizable.strings */; }; - B6416FB6199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F51199A0478003C5699 /* Localizable.strings */; }; - B6416FB7199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F54199A0478003C5699 /* Localizable.strings */; }; B6416FB8199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F57199A0478003C5699 /* Localizable.strings */; }; - B6416FB9199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F5A199A0478003C5699 /* Localizable.strings */; }; - B6416FBA199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F5D199A0478003C5699 /* Localizable.strings */; }; - B6416FBB199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F60199A0478003C5699 /* Localizable.strings */; }; - B6416FBC199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F63199A0478003C5699 /* Localizable.strings */; }; - B6416FBD199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F66199A0478003C5699 /* Localizable.strings */; }; - B6416FBE199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F69199A0478003C5699 /* Localizable.strings */; }; - B6416FBF199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F6C199A0478003C5699 /* Localizable.strings */; }; - B6416FC0199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F6F199A0478003C5699 /* Localizable.strings */; }; - B6416FC1199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F72199A0478003C5699 /* Localizable.strings */; }; - B6416FC2199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F75199A0478003C5699 /* Localizable.strings */; }; - B6416FC3199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F78199A0478003C5699 /* Localizable.strings */; }; - B6416FC4199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F7B199A0478003C5699 /* Localizable.strings */; }; - B6416FC5199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F7E199A0478003C5699 /* Localizable.strings */; }; - B6416FC6199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F81199A0478003C5699 /* Localizable.strings */; }; - B6416FC7199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F84199A0478003C5699 /* Localizable.strings */; }; - B6416FC8199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F87199A0478003C5699 /* Localizable.strings */; }; - B6416FC9199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F8A199A0478003C5699 /* Localizable.strings */; }; - B6416FCA199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F8D199A0478003C5699 /* Localizable.strings */; }; - B6416FCB199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F90199A0478003C5699 /* Localizable.strings */; }; - B6416FCC199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F93199A0478003C5699 /* Localizable.strings */; }; - B6416FCD199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F96199A0478003C5699 /* Localizable.strings */; }; - B6416FCE199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F99199A0478003C5699 /* Localizable.strings */; }; - B6416FCF199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F9C199A0478003C5699 /* Localizable.strings */; }; - B6416FD0199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416F9F199A0478003C5699 /* Localizable.strings */; }; - B6416FD1199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416FA2199A0478003C5699 /* Localizable.strings */; }; - B6416FD2199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416FA5199A0478003C5699 /* Localizable.strings */; }; - B6416FD4199A0478003C5699 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6416FAB199A0478003C5699 /* Localizable.strings */; }; B65EDA1219E1BE6400AAA7CB /* RPAPICall.m in Sources */ = {isa = PBXBuildFile; fileRef = B65EDA1119E1BE6400AAA7CB /* RPAPICall.m */; }; B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B66DBF4919D5BBC8006EA940 /* Images.xcassets */; }; B67ADDC41989FF8700E1A773 /* RPServerRequestsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B67ADDC31989FF8700E1A773 /* RPServerRequestsManager.m */; }; @@ -1050,6 +1013,7 @@ A1FDCBEE16DAA6C300868894 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; B60C16631988999D00E97A6C /* VersionMigrations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VersionMigrations.h; sourceTree = ""; }; B60C16641988999D00E97A6C /* VersionMigrations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VersionMigrations.m; sourceTree = ""; }; + B60EDE031A05A01700D73516 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; B63761E119E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AFHTTPSessionManager+SignalMethods.h"; sourceTree = ""; }; B63761E219E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AFHTTPSessionManager+SignalMethods.m"; sourceTree = ""; }; B63761E419E1FBE8005735D1 /* HttpRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpRequest.h; sourceTree = ""; }; @@ -1357,6 +1321,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B60EDE041A05A01700D73516 /* AudioToolbox.framework in Frameworks */, B69CD25119773E79005CE69A /* XCTest.framework in Frameworks */, E1368CBE18A1C36B00109378 /* MessageUI.framework in Frameworks */, A10FDF79184FB4BB007FF963 /* MediaPlayer.framework in Frameworks */, @@ -2837,6 +2802,7 @@ D221A08C169C9E5E00537ABF /* Frameworks */ = { isa = PBXGroup; children = ( + B60EDE031A05A01700D73516 /* AudioToolbox.framework */, B69CD25019773E79005CE69A /* XCTest.framework */, 70377AAA1918450100CAF501 /* MobileCoreServices.framework */, B9EB5ABC1884C002007CBB57 /* MessageUI.framework */, @@ -3159,7 +3125,6 @@ buildActionMask = 2147483647; files = ( E148750018A06966002CC4F3 /* CallAudioManagerDemo.xib in Resources */, - B6416FAF199A0478003C5699 /* Localizable.strings in Resources */, E148750118A06966002CC4F3 /* CallLogViewController.xib in Resources */, E148750218A06966002CC4F3 /* ContactBrowseViewController.xib in Resources */, E148750318A06966002CC4F3 /* ContactDetailTableViewCell.xib in Resources */, @@ -3168,17 +3133,12 @@ E148750618A06966002CC4F3 /* DialerViewController.xib in Resources */, E148750818A06966002CC4F3 /* FavouritesViewController.xib in Resources */, E148750918A06966002CC4F3 /* InboxFeedViewController.xib in Resources */, - B6416FD1199A0478003C5699 /* Localizable.strings in Resources */, - B6416FB5199A0478003C5699 /* Localizable.strings in Resources */, E148750A18A06966002CC4F3 /* InCallViewController.xib in Resources */, - B6416FD2199A0478003C5699 /* Localizable.strings in Resources */, E148750B18A06966002CC4F3 /* InviteContactsViewController.xib in Resources */, E148750C18A06966002CC4F3 /* LeftSideMenuViewController.xib in Resources */, - B6416FB2199A0478003C5699 /* Localizable.strings in Resources */, E148750D18A06966002CC4F3 /* PreferenceListViewController.xib in Resources */, E148750E18A06966002CC4F3 /* RegisterViewController.xib in Resources */, E148750F18A06966002CC4F3 /* SettingsViewController.xib in Resources */, - B6416FB9199A0478003C5699 /* Localizable.strings in Resources */, E148751018A06966002CC4F3 /* TabBarParentViewController.xib in Resources */, E14874F718A06951002CC4F3 /* CallLogTableViewCell.xib in Resources */, E14874F818A06951002CC4F3 /* ContactTableViewCell.xib in Resources */, @@ -3198,89 +3158,63 @@ E14874A818A0692F002CC4F3 /* checkbox_empty.png in Resources */, E14874A918A0692F002CC4F3 /* checkbox_empty@2x.png in Resources */, E14874AA18A0692F002CC4F3 /* contact_default_feed.png in Resources */, - B6416FB1199A0478003C5699 /* Localizable.strings in Resources */, E14874AB18A0692F002CC4F3 /* contacts_arrow.png in Resources */, E14874AC18A0692F002CC4F3 /* contacts_arrow@2x.png in Resources */, E14874AD18A0692F002CC4F3 /* DefaultContactImage.png in Resources */, E14874AE18A0692F002CC4F3 /* dismiss_notification_icon.png in Resources */, E14874AF18A0692F002CC4F3 /* dismiss_notification_icon@2x.png in Resources */, E14874B018A0692F002CC4F3 /* drop_down_arrow_icon.png in Resources */, - B6416FC2199A0478003C5699 /* Localizable.strings in Resources */, - B6416FB0199A0478003C5699 /* Localizable.strings in Resources */, E14874B118A0692F002CC4F3 /* drop_down_arrow_icon@2x.png in Resources */, - B6416FCB199A0478003C5699 /* Localizable.strings in Resources */, E14874B218A0692F002CC4F3 /* expanded_cell_icon.png in Resources */, E14874B318A0692F002CC4F3 /* expanded_cell_icon@2x.png in Resources */, E14874B418A0692F002CC4F3 /* favourite_false_icon.png in Resources */, E14874B518A0692F002CC4F3 /* favourite_false_icon@2x.png in Resources */, - B6416FAE199A0478003C5699 /* Localizable.strings in Resources */, E14874B618A0692F002CC4F3 /* favourite_true_icon.png in Resources */, E14874B718A0692F002CC4F3 /* favourite_true_icon@2x.png in Resources */, E14874B818A0692F002CC4F3 /* forward_button.png in Resources */, - B6416FD4199A0478003C5699 /* Localizable.strings in Resources */, E14874B918A0692F002CC4F3 /* forward_button@2x.png in Resources */, E14874BA18A0692F002CC4F3 /* home_icon.png in Resources */, E14874BB18A0692F002CC4F3 /* icon_contacts.png in Resources */, E14874BC18A0692F002CC4F3 /* icon_favourites.png in Resources */, E14874BD18A0692F002CC4F3 /* icon_keypad.png in Resources */, E14874BE18A0692F002CC4F3 /* icon_recents.png in Resources */, - B6416FBE199A0478003C5699 /* Localizable.strings in Resources */, E14874BF18A0692F002CC4F3 /* in_call_phone_icon.png in Resources */, - B6416FC0199A0478003C5699 /* Localizable.strings in Resources */, - B6416FB6199A0478003C5699 /* Localizable.strings in Resources */, E14874C018A0692F002CC4F3 /* in_call_phone_icon@2x.png in Resources */, E14874C118A0692F002CC4F3 /* in_call_phrase_icon.png in Resources */, E16E5C1518AEDB5A00B7C403 /* phone_icon.png in Resources */, E14874C218A0692F002CC4F3 /* in_call_phrase_icon@2x.png in Resources */, E14874C318A0692F002CC4F3 /* incoming_call_icon.png in Resources */, - B6416FC1199A0478003C5699 /* Localizable.strings in Resources */, E14874C418A0692F002CC4F3 /* incoming_call_icon@2x.png in Resources */, - B6416FC6199A0478003C5699 /* Localizable.strings in Resources */, E14874C518A0692F002CC4F3 /* menu_icon.png in Resources */, E14874C618A0692F002CC4F3 /* menu_icon@2x.png in Resources */, - B6416FC9199A0478003C5699 /* Localizable.strings in Resources */, E14874C718A0692F002CC4F3 /* message_bubble.png in Resources */, - B6416FB4199A0478003C5699 /* Localizable.strings in Resources */, E14874C818A0692F002CC4F3 /* message_bubble@2x.png in Resources */, E14874C918A0692F002CC4F3 /* mute_icon_selected.png in Resources */, - B6416FAD199A0478003C5699 /* Localizable.strings in Resources */, E14874CA18A0692F002CC4F3 /* mute_icon_selected@2x.png in Resources */, E14874CB18A0692F002CC4F3 /* mute_icon.png in Resources */, - B6416FCC199A0478003C5699 /* Localizable.strings in Resources */, E14874CC18A0692F002CC4F3 /* mute_icon@2x.png in Resources */, E14874CD18A0692F002CC4F3 /* notification_detail_icon.png in Resources */, E14874CE18A0692F002CC4F3 /* notification_detail_icon@2x.png in Resources */, - B6416FC5199A0478003C5699 /* Localizable.strings in Resources */, - B6416FC4199A0478003C5699 /* Localizable.strings in Resources */, E14874CF18A0692F002CC4F3 /* notification_mini_icon.png in Resources */, E14874D018A0692F002CC4F3 /* notification_mini_icon@2x.png in Resources */, E14874D118A0692F002CC4F3 /* outgoing_call_icon.png in Resources */, - B6416FB3199A0478003C5699 /* Localizable.strings in Resources */, - B6416FBB199A0478003C5699 /* Localizable.strings in Resources */, E14874D218A0692F002CC4F3 /* outgoing_call_icon@2x.png in Resources */, B6416FB8199A0478003C5699 /* Localizable.strings in Resources */, E14874D318A0692F002CC4F3 /* search_cancel.png in Resources */, E14874D418A0692F002CC4F3 /* search_cancel@2x.png in Resources */, - B6416FC3199A0478003C5699 /* Localizable.strings in Resources */, - B6416FCF199A0478003C5699 /* Localizable.strings in Resources */, E14874D518A0692F002CC4F3 /* search_icon.png in Resources */, E14874D618A0692F002CC4F3 /* search_icon@2x.png in Resources */, E14874D718A0692F002CC4F3 /* send_code_icon.png in Resources */, - B6416FC8199A0478003C5699 /* Localizable.strings in Resources */, E14874D818A0692F002CC4F3 /* send_code_icon@2x.png in Resources */, E14874D918A0692F002CC4F3 /* speaker_icon_selected.png in Resources */, E14874DA18A0692F002CC4F3 /* speaker_icon_selected@2x.png in Resources */, - B6416FD0199A0478003C5699 /* Localizable.strings in Resources */, E14874DB18A0692F002CC4F3 /* speaker_icon.png in Resources */, E14874DC18A0692F002CC4F3 /* speaker_icon@2x.png in Resources */, E14874DD18A0692F002CC4F3 /* spinner_connecting_flash.png in Resources */, E14874DE18A0692F002CC4F3 /* spinner_connecting_flash@2x.png in Resources */, E14874DF18A06930002CC4F3 /* spinner_connecting.png in Resources */, - B6416FBC199A0478003C5699 /* Localizable.strings in Resources */, E14874E018A06930002CC4F3 /* spinner_connecting@2x.png in Resources */, E14874E118A06930002CC4F3 /* spinner_error.png in Resources */, - B6416FBF199A0478003C5699 /* Localizable.strings in Resources */, - B6416FB7199A0478003C5699 /* Localizable.strings in Resources */, B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */, E14874E218A06930002CC4F3 /* spinner_error@2x.png in Resources */, E14874E318A06930002CC4F3 /* spinner_ringing.png in Resources */, @@ -3294,14 +3228,12 @@ E14874EB18A06930002CC4F3 /* tab_icon_keypad.png in Resources */, E14874EC18A06930002CC4F3 /* tab_icon_keypad@2x.png in Resources */, E14874ED18A06930002CC4F3 /* tab_icon_menu.png in Resources */, - B6416FCD199A0478003C5699 /* Localizable.strings in Resources */, E14874EE18A06930002CC4F3 /* tab_icon_menu@2x.png in Resources */, E14874EF18A06930002CC4F3 /* trash_icon.png in Resources */, E14874F018A06930002CC4F3 /* trash_icon@2x.png in Resources */, E14874F118A06930002CC4F3 /* volume_high.png in Resources */, E14874F218A06930002CC4F3 /* volume_high@2x.png in Resources */, 70B8FEE21909FE360042E3F0 /* 171756__nenadsimic__picked-coin-echo-2.wav in Resources */, - B6416FCE199A0478003C5699 /* Localizable.strings in Resources */, E14874F318A06930002CC4F3 /* volume_low.png in Resources */, E14874F418A06930002CC4F3 /* volume_low@2x.png in Resources */, E14874F518A06930002CC4F3 /* whisper_notification_icon.png in Resources */, @@ -3315,17 +3247,14 @@ E1370BEF18A0689000826894 /* AppIcon60x60.png in Resources */, E1370BF018A0689000826894 /* AppIcon60x60@2x.png in Resources */, E1370BF118A0689000826894 /* AppIcon76x76.png in Resources */, - B6416FC7199A0478003C5699 /* Localizable.strings in Resources */, E1370BF218A0689000826894 /* AppIcon76x76@2x.png in Resources */, E1370BE718A0688300826894 /* Default-568h@2x.png in Resources */, E1370BE818A0688300826894 /* Default.png in Resources */, E1370BE918A0688300826894 /* Default@2x.png in Resources */, - B6416FBD199A0478003C5699 /* Localizable.strings in Resources */, E1370BE018A0686600826894 /* busy.mp3 in Resources */, E1370BE118A0686C00826894 /* completed.mp3 in Resources */, E1370BE218A0686C00826894 /* failure.mp3 in Resources */, E1370BE318A0686C00826894 /* handshake.mp3 in Resources */, - B6416FCA199A0478003C5699 /* Localizable.strings in Resources */, B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */, E1370BE418A0686C00826894 /* outring.mp3 in Resources */, E1370BE518A0686C00826894 /* r.caf in Resources */, @@ -3333,7 +3262,6 @@ E148751218A06AFD002CC4F3 /* HelveticaNeueLTStd-Bd.otf in Resources */, E148751318A06AFD002CC4F3 /* HelveticaNeueLTStd-Th.otf in Resources */, E148751418A06AFD002CC4F3 /* HelveticaNeueLTStd-Lt.otf in Resources */, - B6416FBA199A0478003C5699 /* Localizable.strings in Resources */, E148751518A06AFD002CC4F3 /* HelveticaNeueLTStd-Md.otf in Resources */, E1370BF618A068A600826894 /* whisperReal.cer in Resources */, ); diff --git a/Signal/src/audio/AppAudioManager.m b/Signal/src/audio/AppAudioManager.m index 85a3f27e5..30914421f 100644 --- a/Signal/src/audio/AppAudioManager.m +++ b/Signal/src/audio/AppAudioManager.m @@ -53,7 +53,7 @@ AppAudioManager* sharedAppAudioManager; [AudioRouter routeAllAudioToExternalSpeaker]; break; default: - NSLog(@"Unhandled AudioProfile"); + DDLogError(@"Unhandled AudioProfile"); } } } @@ -108,10 +108,10 @@ AppAudioManager* sharedAppAudioManager; -(BOOL) shouldErrorSoundBePlayedForCallTerminationType:(enum CallTerminationType) type{ [_soundPlayer stopAllAudio]; - if (type == CallTerminationType_RejectedLocal || + if (type == CallTerminationType_RejectedLocal || type == CallTerminationType_RejectedRemote || - type == CallTerminationType_HangupLocal || - type == CallTerminationType_HangupRemote || + type == CallTerminationType_HangupLocal || + type == CallTerminationType_HangupRemote || type == CallTerminationType_RecipientUnavailable) { return NO; } @@ -180,8 +180,7 @@ AppAudioManager* sharedAppAudioManager; if (enable) { [[AVAudioSession sharedInstance] setActive:enable error:&e]; [_soundPlayer awake]; - } - else { + } else { [[AVAudioSession sharedInstance] setActive:enable withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&e]; diff --git a/Signal/src/audio/SoundBoard.m b/Signal/src/audio/SoundBoard.m index 5d30af88d..d6ede786e 100644 --- a/Signal/src/audio/SoundBoard.m +++ b/Signal/src/audio/SoundBoard.m @@ -20,7 +20,7 @@ static NSString* SoundFile_Ringtone =@"r.caf"; +(SoundInstance*) instanceOfOutboundRingtone { SoundInstance* soundInstance = [SoundInstance soundInstanceForFile:SoundFile_Outbound]; [soundInstance setAudioToLoopIndefinitely]; - [soundInstance setInstanceType:SoundInstanceTypeBusySound]; + [soundInstance setInstanceType:SoundInstanceTypeOutboundRingtone]; return soundInstance; } diff --git a/Signal/src/view controllers/InCallViewController.h b/Signal/src/view controllers/InCallViewController.h index 9baf13a38..5e749cba3 100644 --- a/Signal/src/view controllers/InCallViewController.h +++ b/Signal/src/view controllers/InCallViewController.h @@ -27,6 +27,14 @@ @property (nonatomic, readonly) CallState *callState; @property (nonatomic, readonly) Contact *potentiallyKnownContact; +typedef NS_ENUM(NSInteger, PushAcceptState){ + PushDidAcceptState, + PushDidDeclineState, + PushNotSetState +}; + +@property (nonatomic, readonly) PushAcceptState callPushState; + +(InCallViewController*) inCallViewControllerWithCallState:(CallState*)callState andOptionallyKnownContact:(Contact*)contact; diff --git a/Signal/src/view controllers/InCallViewController.m b/Signal/src/view controllers/InCallViewController.m index 2e76fb24a..c878fc5f1 100644 --- a/Signal/src/view controllers/InCallViewController.m +++ b/Signal/src/view controllers/InCallViewController.m @@ -7,9 +7,12 @@ #import "CallAudioManager.h" #import "PhoneManager.h" +#import + #define BUTTON_BORDER_WIDTH 1.0f #define CONTACT_IMAGE_BORDER_WIDTH 2.0f #define RINGING_ROTATION_DURATION 0.375f +#define VIBRATE_TIMER_DURATION 1.6 #define CONNECTING_FLASH_DURATION 0.5f #define END_CALL_CLEANUP_DELAY (int)(3.1f * NSEC_PER_SEC) @@ -27,6 +30,8 @@ static NSInteger connectingFlashCounter = 0; NSTimer *_ringingAnimationTimer; } +@property NSTimer *vibrateTimer; + @end @implementation InCallViewController @@ -38,6 +43,7 @@ static NSInteger connectingFlashCounter = 0; InCallViewController* controller = [InCallViewController new]; controller->_potentiallyKnownContact = contact; controller->_callState = callState; + controller->_callPushState = PushNotSetState; return controller; } @@ -102,9 +108,22 @@ static NSInteger connectingFlashCounter = 0; selector:@selector(rotateConnectingIndicator) userInfo:nil repeats:YES]; + + if (!_answerButton.hidden) { + _vibrateTimer = [NSTimer scheduledTimerWithTimeInterval:VIBRATE_TIMER_DURATION + target:self + selector:@selector(vibrate) + userInfo:nil + repeats:YES]; + } + [_ringingAnimationTimer fire]; } +- (void)vibrate { + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); +} + - (void)rotateConnectingIndicator { [_connectingIndicatorImageView setImage:[UIImage imageNamed:SPINNER_RINGING_IMAGE_NAME]]; [UIView animateWithDuration:RINGING_ROTATION_DURATION delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{ @@ -122,6 +141,9 @@ static NSInteger connectingFlashCounter = 0; if (_ringingAnimationTimer) { [_ringingAnimationTimer invalidate]; } + if (_vibrateTimer) { + [_vibrateTimer invalidate]; + } } - (void)stopConnectingFlashAnimation { @@ -276,13 +298,9 @@ static NSInteger connectingFlashCounter = 0; _answerButton.hidden = !enable; _rejectButton.hidden = !enable; _endButton.hidden = enable; - + if (_vibrateTimer && enable == false) { + [_vibrateTimer invalidate]; + } } - - - - - - @end