diff --git a/Signal/src/audio/AppAudioManager.h b/Signal/src/audio/AppAudioManager.h index e3512da73..64ee64f58 100644 --- a/Signal/src/audio/AppAudioManager.h +++ b/Signal/src/audio/AppAudioManager.h @@ -14,6 +14,8 @@ @import AVFoundation; +NS_ASSUME_NONNULL_BEGIN + @interface AppAudioManager : NSObject enum AudioProfile { @@ -31,7 +33,9 @@ enum AudioProfile { - (void)respondToTerminationType:(enum CallTerminationType)terminationType; - (BOOL)toggleSpeakerPhone; -- (void)cancellAllAudio; +- (void)toggleSpeakerPhoneIsEnabled:(BOOL)enabled NS_SWIFT_NAME(toggleSpeakerPhone(isEnabled:)); + +- (void)cancelAllAudio; - (void)requestRequiredPermissionsIfNeededWithCompletion:(PermissionBlock)permissionBlock incoming:(BOOL)isIncoming; - (BOOL)requestRecordingPrivilege; @@ -42,4 +46,9 @@ enum AudioProfile { - (void)didCompleteSoundInstanceOfType:(SoundInstanceType)instanceType; +- (void)handleInboundRing; +- (void)setDefaultAudioProfile; + @end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/audio/AppAudioManager.m b/Signal/src/audio/AppAudioManager.m index d901e7616..abc1bba66 100644 --- a/Signal/src/audio/AppAudioManager.m +++ b/Signal/src/audio/AppAudioManager.m @@ -3,6 +3,7 @@ #import "AudioRouter.h" #import "SoundBoard.h" +NS_ASSUME_NONNULL_BEGIN #define DEFAULT_CATEGORY AVAudioSessionCategorySoloAmbient #define RECORDING_CATEGORY AVAudioSessionCategoryPlayAndRecord @@ -34,8 +35,8 @@ AppAudioManager *sharedAppAudioManager; #pragma mark AudioState Management - (void)setAudioProfile:(enum AudioProfile)profile { - [self updateAudioRouter]; _audioProfile = profile; + [self updateAudioRouter]; } - (void)updateAudioRouter { @@ -55,17 +56,6 @@ AppAudioManager *sharedAppAudioManager; } } - -- (void)overrideAudioProfile { - isSpeakerphoneActive = YES; - [self updateAudioRouter]; -} - -- (void)resetOverride { - isSpeakerphoneActive = NO; - [self updateAudioRouter]; -} - - (enum AudioProfile)getCurrentAudioProfile { return (isSpeakerphoneActive) ? AudioProfile_ExternalSpeaker : _audioProfile; } @@ -110,26 +100,35 @@ AppAudioManager *sharedAppAudioManager; } - (void)handleInboundRing { + [self setAudioProfile:AudioProfile_ExternalSpeaker]; [_soundPlayer playSound:[SoundBoard instanceOfInboundRingtone]]; } - (void)handleOutboundRing { - [self setAudioProfile:AudioProfile_Default]; + [self setDefaultAudioProfile]; [_soundPlayer playSound:[SoundBoard instanceOfOutboundRingtone]]; } - (void)handleSecuring { [_soundPlayer stopAllAudio]; - [self setAudioProfile:AudioProfile_Default]; + [self setDefaultAudioProfile]; [_soundPlayer playSound:[SoundBoard instanceOfHandshakeSound]]; } - (void)handleCallEstablished { [_soundPlayer stopAllAudio]; - [self setAudioProfile:AudioProfile_Default]; + [self setDefaultAudioProfile]; [_soundPlayer playSound:[SoundBoard instanceOfCompletedSound]]; } +/** + * Route traffic through internal speaker, unless speakerphone is enabled. + */ +- (void)setDefaultAudioProfile +{ + [self setAudioProfile:AudioProfile_Default]; +} + - (BOOL)toggleSpeakerPhone { isSpeakerphoneActive = !isSpeakerphoneActive; [self updateAudioRouter]; @@ -137,9 +136,17 @@ AppAudioManager *sharedAppAudioManager; return isSpeakerphoneActive; } +- (void)toggleSpeakerPhoneIsEnabled:(BOOL)enabled +{ + DDLogInfo(@"%@ Toggled speaker phone: %@", self.tag, enabled ? @"ON" : @"OFF"); + isSpeakerphoneActive = enabled; + [self updateAudioRouter]; +} + #pragma mark Audio Control -- (void)cancellAllAudio { +- (void)cancelAllAudio +{ [_soundPlayer stopAllAudio]; } @@ -196,7 +203,8 @@ AppAudioManager *sharedAppAudioManager; return (nil != e); } -- (void)awake { +- (void)awake +{ [_soundPlayer awake]; } @@ -209,5 +217,18 @@ AppAudioManager *sharedAppAudioManager; } } +#pragma mark - Logging + ++ (NSString *)tag +{ + return [NSString stringWithFormat:@"[%@]", self.class]; +} + +- (NSString *)tag +{ + return self.class.tag; +} @end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/view controllers/InCallViewController.m b/Signal/src/view controllers/InCallViewController.m index a8278c42c..19944af34 100644 --- a/Signal/src/view controllers/InCallViewController.m +++ b/Signal/src/view controllers/InCallViewController.m @@ -61,7 +61,7 @@ [super viewWillDisappear:animated]; [self stopRingingAnimation]; [self stopConnectingFlashAnimation]; - [AppAudioManager.sharedInstance cancellAllAudio]; + [AppAudioManager.sharedInstance cancelAllAudio]; [UIDevice.currentDevice setProximityMonitoringEnabled:NO]; }