Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IOS] Return promises #725

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
Return promises on iOS
c960657 committed Aug 18, 2023
commit c20c418aa24a8e22a07a405368f400388681b0de
10 changes: 4 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
@@ -148,7 +148,7 @@ class RNCallKeep {
let supportsGrouping = !!(options?.ios?.supportsGrouping ?? true);
let supportsUngrouping = !!(options?.ios?.supportsUngrouping ?? true);

RNCallKeepModule.displayIncomingCall(
return RNCallKeepModule.displayIncomingCall(
uuid,
handle,
handleType,
@@ -173,7 +173,7 @@ class RNCallKeep {
return;
}

RNCallKeepModule.startCall(uuid, handle, contactIdentifier, handleType, hasVideo);
return RNCallKeepModule.startCall(uuid, handle, contactIdentifier, handleType, hasVideo);
};

checkPhoneAccountEnabled = async () => {
@@ -216,7 +216,7 @@ class RNCallKeep {
if (!isIOS) {
RNCallKeepModule.rejectCall(uuid);
} else {
RNCallKeepModule.endCall(uuid);
return RNCallKeepModule.endCall(uuid);
}
};

@@ -238,9 +238,7 @@ class RNCallKeep {

hasOutgoingCall = async () => (isIOS ? null : await RNCallKeepModule.hasOutgoingCall());

setMutedCall = (uuid, shouldMute) => {
RNCallKeepModule.setMutedCall(uuid, shouldMute);
};
setMutedCall = (uuid, shouldMute) => RNCallKeepModule.setMutedCall(uuid, shouldMute);

sendDTMF = (uuid, key) => RNCallKeepModule.sendDTMF(uuid, key);
/**
82 changes: 65 additions & 17 deletions ios/RNCallKeep/RNCallKeep.m
Original file line number Diff line number Diff line change
@@ -274,7 +274,9 @@ + (void)setup:(NSDictionary *)options {
supportsHolding:(BOOL)supportsHolding
supportsDTMF:(BOOL)supportsDTMF
supportsGrouping:(BOOL)supportsGrouping
supportsUngrouping:(BOOL)supportsUngrouping)
supportsUngrouping:(BOOL)supportsUngrouping
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
[RNCallKeep reportNewIncomingCall: uuidString
handle: handle
@@ -287,7 +289,9 @@ + (void)setup:(NSDictionary *)options {
supportsUngrouping: supportsUngrouping
fromPushKit: NO
payload: nil
withCompletionHandler: nil];
withCompletionHandler: nil
resolver:resolve
rejecter:reject];

NSDictionary *settings = [RNCallKeep getSettings];
NSNumber *timeout = settings[@"displayCallReachabilityTimeout"];
@@ -326,7 +330,9 @@ + (void)setup:(NSDictionary *)options {
handle:(NSString *)handle
contactIdentifier:(NSString * _Nullable)contactIdentifier
handleType:(NSString *)handleType
video:(BOOL)video)
video:(BOOL)video
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][startCall] uuidString = %@", uuidString);
@@ -340,10 +346,10 @@ + (void)setup:(NSDictionary *)options {

CXTransaction *transaction = [[CXTransaction alloc] initWithAction:startCallAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(answerIncomingCall:(NSString *)uuidString)
RCT_EXPORT_METHOD(answerIncomingCall:(NSString *)uuidString resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][answerIncomingCall] uuidString = %@", uuidString);
@@ -353,10 +359,10 @@ + (void)setup:(NSDictionary *)options {
CXTransaction *transaction = [[CXTransaction alloc] init];
[transaction addAction:answerCallAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(endCall:(NSString *)uuidString)
RCT_EXPORT_METHOD(endCall:(NSString *)uuidString resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][endCall] uuidString = %@", uuidString);
@@ -365,22 +371,22 @@ + (void)setup:(NSDictionary *)options {
CXEndCallAction *endCallAction = [[CXEndCallAction alloc] initWithCallUUID:uuid];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endCallAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(endAllCalls)
RCT_EXPORT_METHOD(endAllCalls:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][endAllCalls] calls = %@", self.callKeepCallController.callObserver.calls);
#endif
for (CXCall *call in self.callKeepCallController.callObserver.calls) {
CXEndCallAction *endCallAction = [[CXEndCallAction alloc] initWithCallUUID:call.UUID];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endCallAction];
[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}
}

RCT_EXPORT_METHOD(setOnHold:(NSString *)uuidString :(BOOL)shouldHold)
RCT_EXPORT_METHOD(setOnHold:(NSString *)uuidString:(BOOL)shouldHold resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][setOnHold] uuidString = %@, shouldHold = %d", uuidString, shouldHold);
@@ -390,7 +396,7 @@ + (void)setup:(NSDictionary *)options {
CXTransaction *transaction = [[CXTransaction alloc] init];
[transaction addAction:setHeldCallAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(_startCallActionEventListenerAdded)
@@ -445,7 +451,7 @@ + (void)setup:(NSDictionary *)options {
[self.callKeepProvider reportCallWithUUID:uuid updated:callUpdate];
}

RCT_EXPORT_METHOD(setMutedCall:(NSString *)uuidString :(BOOL)muted)
RCT_EXPORT_METHOD(setMutedCall:(NSString *)uuidString :(BOOL)muted resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][setMutedCall] muted = %i", muted);
@@ -455,10 +461,10 @@ + (void)setup:(NSDictionary *)options {
CXTransaction *transaction = [[CXTransaction alloc] init];
[transaction addAction:setMutedAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(sendDTMF:(NSString *)uuidString dtmf:(NSString *)key)
RCT_EXPORT_METHOD(sendDTMF:(NSString *)uuidString dtmf:(NSString *)key resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][sendDTMF] key = %@", key);
@@ -468,7 +474,7 @@ + (void)setup:(NSDictionary *)options {
CXTransaction *transaction = [[CXTransaction alloc] init];
[transaction addAction:dtmfAction];

[self requestTransaction:transaction];
[self requestTransaction:transaction resolver:resolve rejecter:reject];
}

RCT_EXPORT_METHOD(isCallActive:(NSString *)uuidString
@@ -655,7 +661,7 @@ + (NSString *) getSelectedAudioRoute
return [RNCallKeep getAudioInputType: selectedOutput.portType];
}

- (void)requestTransaction:(CXTransaction *)transaction
- (void)requestTransaction:(CXTransaction *)transaction resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][requestTransaction] transaction = %@", transaction);
@@ -666,6 +672,7 @@ - (void)requestTransaction:(CXTransaction *)transaction
[self.callKeepCallController requestTransaction:transaction completion:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"[RNCallKeep][requestTransaction] Error requesting transaction (%@): (%@)", transaction.actions, error);
reject(@"requestTransaction", @"Error requesting transaction", error);
} else {
NSLog(@"[RNCallKeep][requestTransaction] Requested transaction successfully");

@@ -682,6 +689,8 @@ - (void)requestTransaction:(CXTransaction *)transaction
callUpdate.supportsUngrouping = YES;
[self.callKeepProvider reportCallWithUUID:startCallAction.callUUID updated:callUpdate];
}

resolve(@TRUE);
}
}];
}
@@ -750,6 +759,37 @@ + (void)endCallWithUUID:(NSString *)uuidString
}
}

+ (void)reportNewIncomingCall:(NSString *)uuidString
handle:(NSString *)handle
handleType:(NSString *)handleType
hasVideo:(BOOL)hasVideo
localizedCallerName:(NSString * _Nullable)localizedCallerName
supportsHolding:(BOOL)supportsHolding
supportsDTMF:(BOOL)supportsDTMF
supportsGrouping:(BOOL)supportsGrouping
supportsUngrouping:(BOOL)supportsUngrouping
fromPushKit:(BOOL)fromPushKit
payload:(NSDictionary * _Nullable)payload
{
[RNCallKeep reportNewIncomingCall:uuidString handle:handle handleType:handleType hasVideo:hasVideo localizedCallerName:localizedCallerName supportsHolding:supportsHolding supportsDTMF:supportsDTMF supportsGrouping:supportsGrouping supportsUngrouping:supportsUngrouping fromPushKit:fromPushKit payload:payload withCompletionHandler:nil resolver:nil rejecter:nil];
}

+ (void)reportNewIncomingCall:(NSString *)uuidString
handle:(NSString *)handle
handleType:(NSString *)handleType
hasVideo:(BOOL)hasVideo
localizedCallerName:(NSString * _Nullable)localizedCallerName
supportsHolding:(BOOL)supportsHolding
supportsDTMF:(BOOL)supportsDTMF
supportsGrouping:(BOOL)supportsGrouping
supportsUngrouping:(BOOL)supportsUngrouping
fromPushKit:(BOOL)fromPushKit
payload:(NSDictionary * _Nullable)payload
withCompletionHandler:(void (^)(void))completion
{
[RNCallKeep reportNewIncomingCall:uuidString handle:handle handleType:handleType hasVideo:hasVideo localizedCallerName:localizedCallerName supportsHolding:supportsHolding supportsDTMF:supportsDTMF supportsGrouping:supportsGrouping supportsUngrouping:supportsUngrouping fromPushKit:fromPushKit payload:payload withCompletionHandler:completion resolver:nil rejecter:nil];
}

+ (void)reportNewIncomingCall:(NSString *)uuidString
handle:(NSString *)handle
handleType:(NSString *)handleType
@@ -762,6 +802,8 @@ + (void)reportNewIncomingCall:(NSString *)uuidString
fromPushKit:(BOOL)fromPushKit
payload:(NSDictionary * _Nullable)payload
withCompletionHandler:(void (^_Nullable)(void))completion
resolver:(RCTPromiseResolveBlock _Nullable)resolve
rejecter:(RCTPromiseRejectBlock _Nullable)reject
{
#ifdef DEBUG
NSLog(@"[RNCallKeep][reportNewIncomingCall] uuidString = %@", uuidString);
@@ -803,6 +845,12 @@ + (void)reportNewIncomingCall:(NSString *)uuidString
if (completion != nil) {
completion();
}

if (error != nil && reject != nil) {
reject(@"reportNewIncomingCall", @"Error trying to display incoming call", error);
} else if (error == nil && resolve != nil) {
resolve(@TRUE);
}
}];
}