Skip to content

Commit 63fcc67

Browse files
committed
[ios] fix and refine forceSpeakerOn
ios doesn't support force speaker off. so if user want to force off, we turn audio mode into `voice` instead `video`
1 parent d9d7736 commit 63fcc67

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

ios/RNInCallManager/RNInCallManager.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
3636
var origAudioMode: String!
3737
var audioSessionInitialized: Bool = false
3838
let automatic: Bool = true
39-
var forceSpeakerOn: Bool = false
39+
var forceSpeakerOn: Int = 0 //UInt8?
4040

4141
//@objc func initWithBridge(_bridge: RCTBridge) {
4242
//self.bridge = _bridge
@@ -63,6 +63,7 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
6363
}
6464
print("start() InCallManager")
6565
self.storeOriginalAudioSetup()
66+
self.forceSpeakerOn = 0;
6667
//self.audioSession.setCategory(defaultAudioCategory, options: [.DefaultToSpeaker, .AllowBluetooth])
6768
_ = try? self.audioSession.setCategory(self.defaultAudioCategory)
6869
_ = try? self.audioSession.setMode(self.defaultAudioMode)
@@ -94,6 +95,7 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
9495
_ = try? self.audioSession.setActive(false, withOptions: .NotifyOthersOnDeactivation)
9596
self.setKeepScreenOn(false)
9697
NSNotificationCenter.defaultCenter().removeObserver(self)
98+
self.forceSpeakerOn = 0;
9799
self.audioSessionInitialized = false
98100
}
99101
}
@@ -118,13 +120,18 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
118120
print("ios doesn't support setSpeakerphoneOn()")
119121
}
120122

121-
@objc func setForceSpeakerphoneOn(enable: Bool) -> Void {
122-
self.forceSpeakerOn = enable
123-
print("setForceSpeakerphoneOn(\(enable))")
124-
if self.forceSpeakerOn {
123+
@objc func setForceSpeakerphoneOn(flag: Int) -> Void {
124+
self.forceSpeakerOn = flag
125+
print("setForceSpeakerphoneOn(\(flag))")
126+
if self.forceSpeakerOn == 1 { // force on
125127
_ = try? self.audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)
126-
} else {
128+
_ = try? self.audioSession.setMode(AVAudioSessionModeVideoChat)
129+
} else if self.forceSpeakerOn == -1 { //force off
130+
_ = try? self.audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.None)
131+
_ = try? self.audioSession.setMode(AVAudioSessionModeVoiceChat)
132+
} else { // use default behavior
127133
_ = try? self.audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.None)
134+
_ = try? self.audioSession.setMode(self.defaultAudioMode)
128135
}
129136
}
130137

ios/RNInCallManager/RNInCallManagerBridge.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ @interface RCT_EXTERN_REMAP_MODULE(InCallManager, RNInCallManager, NSObject)
1515
RCT_EXTERN_METHOD(turnScreenOff)
1616
RCT_EXTERN_METHOD(setKeepScreenOn:(BOOL)enable)
1717
RCT_EXTERN_METHOD(setSpeakerphoneOn:(BOOL)enable)
18-
RCT_EXTERN_METHOD(setForceSpeakerphoneOn:(BOOL)enable)
18+
RCT_EXTERN_METHOD(setForceSpeakerphoneOn:(int)flag)
1919
RCT_EXTERN_METHOD(setMicrophoneMute:(BOOL)enable)
2020
RCT_EXTERN_METHOD(stopRingback)
2121
RCT_EXTERN_METHOD(startRingtone:(NSString *)ringtoneUriType)

0 commit comments

Comments
 (0)