Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ class InCallManager {
_InCallManager.turnScreenOn();
}

setFlashOn(enable, brightness) {
if (Platform.OS === 'ios') {
enable = (enable === true) ? true : false;
brightness = (typeof brightness === 'number') ? brightness : 0;
_InCallManager.setFlashOn(enable, brightness);
} else {
console.log("Android doesn't support setFlashOn(enable, brightness)");
}
}


setKeepScreenOn(enable) {
enable = (enable === true) ? true : false;
_InCallManager.setKeepScreenOn(enable);
Expand Down
20 changes: 20 additions & 0 deletions ios/RNInCallManager/RNInCallManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
var cameraPermission: String!
var media: String = "audio"

private lazy var device: AVCaptureDevice? = { AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) }()

// --- AVAudioSessionCategoryOptionAllowBluetooth:
// --- Valid only if the audio session category is AVAudioSessionCategoryPlayAndRecord or AVAudioSessionCategoryRecord.
// --- Using VoiceChat/VideoChat mode has the side effect of enabling the AVAudioSessionCategoryOptionAllowBluetooth category option.
Expand Down Expand Up @@ -250,6 +252,24 @@ class RNInCallManager: NSObject, AVAudioPlayerDelegate {
}
}

@objc func setFlashOn(enable: Bool, brightness: NSNumber) -> Void {
guard let device = device else { return }
if device.hasTorch && device.position == AVCaptureDevicePosition.Back {
do {
try device.lockForConfiguration()
if enable {
try device.setTorchModeOnWithLevel(brightness.floatValue)
} else {
device.torchMode = .Off
}
NSLog("RNInCallManager.setForceSpeakerphoneOn(): enable: \(enable)")
device.unlockForConfiguration()
} catch let error {
NSLog("RNInCallManager.setFlashOn error != \(error)")
}
}
}

@objc func setKeepScreenOn(_ enable: Bool) -> Void {
NSLog("RNInCallManager.setKeepScreenOn(): enable: \(enable)")
UIApplication.shared.isIdleTimerDisabled = enable
Expand Down
1 change: 1 addition & 0 deletions ios/RNInCallManager/RNInCallManagerBridge.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ @interface RCT_EXTERN_REMAP_MODULE(InCallManager, RNInCallManager, NSObject)
RCT_EXTERN_METHOD(stop:(NSString *)busytone)
RCT_EXTERN_METHOD(turnScreenOn)
RCT_EXTERN_METHOD(turnScreenOff)
RCT_EXTERN_METHOD(setFlashOn:(BOOL)enable brightness:(nonnull NSNumber *)brightness)
RCT_EXTERN_METHOD(setKeepScreenOn:(BOOL)enable)
RCT_EXTERN_METHOD(setSpeakerphoneOn:(BOOL)enable)
RCT_EXTERN_METHOD(setForceSpeakerphoneOn:(int)flag)
Expand Down