     }
 
     func updateAudioRoute() -> Void {
-        NSLog("RNInCallManager.updateAudioRoute(): ios doesn't support updateAudioRoute()")
+        NSLog("RNInCallManager.updateAudioRoute(): flag=\(self.forceSpeakerOn)")
+        var overrideAudioPort: AVAudioSessionPortOverride
+        var audioMode: String
+        if self.forceSpeakerOn == 1 { // force on
+            overrideAudioPort = .Speaker
+            audioMode = AVAudioSessionModeVideoChat
+        } else if self.forceSpeakerOn == -1 { //force off
+            overrideAudioPort = .None
+            audioMode = AVAudioSessionModeVoiceChat
+        } else { // use default behavior
+            overrideAudioPort = .None
+            audioMode = self.defaultAudioMode
+        }
+        /*
+        // --- not necessary to override since we can use ModeVideoChet.
+        // --- this would be useful only when wired headset is plugged and we still want to set speaker on
+        // TODO: find a way to detect wired headset is plugged or not
+        do {
+            try self.audioSession.overrideOutputAudioPort(overrideAudioPort)
+        } catch let err {
+            NSLog("RNInCallManager.setForceSpeakerphoneOn(): audioSession.overrideOutputAudioPort(\(overrideAudioPort)) failed: \(err)")
+        }
+        */
+        do {
+            try self.audioSession.setMode(audioMode)
+        } catch let err {
+            NSLog("RNInCallManager.setForceSpeakerphoneOn(): audioSession.setMode(\(audioMode)) failed: \(err)")
+        }
     }
 
     @objc func setKeepScreenOn(enable: Bool) -> Void {

            NSLog("RNInCallManager.stopRingback()")
            self.mRingback.stop()
            self.mRingback = nil
            //self.restoreOriginalAudioSetup()
            //_ = try? self.audioSession.setActive(false, withOptions: .NotifyOthersOnDeactivation)
        }
    }


    @objc func setForceSpeakerphoneOn(flag: Int) -> Void {
        self.forceSpeakerOn = flag
        NSLog("RNInCallManager.setForceSpeakerphoneOn(): flag=\(flag)")
        self.updateAudioRoute()
    }

    @objc func setMicrophoneMute(enable: Bool) -> Void {
