From 923472b96ecd7af9cafc026ae5d7310bf2a0eeaf Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Mon, 20 Apr 2020 15:48:49 -0400 Subject: [PATCH 1/8] adding answerIncomingCall to typescript declaration --- index.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.d.ts b/index.d.ts index 9d941a34..ed4ad6dd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -55,6 +55,10 @@ export default class RNCallKeep { } + static answerIncomingCall(uuid: string) { + + } + static displayIncomingCall( uuid: string, handle: string, From 6eebf451c5ca328da642494d00260aab400d21d8 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Thu, 23 Apr 2020 13:11:46 -0400 Subject: [PATCH 2/8] modifying onAnswer and displayIncomingCall --- .../io/wazo/callkeep/RNCallKeepModule.java | 31 ++++++++++++++----- .../io/wazo/callkeep/VoiceConnection.java | 16 +++++----- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java index 124de3ba..bfb74d44 100644 --- a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java +++ b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java @@ -128,20 +128,35 @@ public void setup(ReadableMap options) { @ReactMethod public void displayIncomingCall(String uuid, String number, String callerName) { - if (!isConnectionServiceAvailable() || !hasPhoneAccount()) { - return; - } - - Log.d(TAG, "displayIncomingCall number: " + number + ", callerName: " + callerName); - + + Log.d(TAG, "displayIncomingCall number: " + number + ", callerName: " + callerName); + try { + Boolean isForeground = VoiceConnectionService.isRunning(this.reactContext.getApplicationContext()); + + if (!isConnectionServiceAvailable() || !hasPhoneAccount() && !isForeground) { + this.reactContext.getApplicationContext(); + Log.d(TAG, String.valueOf(this.reactContext.getApplicationInfo())); + String packageName = this.reactContext.getApplicationInfo().processName; + Log.d(TAG, packageName); + Intent intent = this.reactContext.getPackageManager().getLaunchIntentForPackage(packageName); + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.reactContext.startActivity(intent); + Log.d(TAG, "displayIncomingCall started activity"); + } + + Bundle extras = new Bundle(); Uri uri = Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null); - + extras.putParcelable(TelecomManager.EXTRA_INCOMING_CALL_ADDRESS, uri); extras.putString(EXTRA_CALLER_NAME, callerName); extras.putString(EXTRA_CALL_UUID, uuid); - + telecomManager.addNewIncomingCall(handle, extras); + } catch (Throwable exception) { + Log.e(TAG, "Error displayIncomingCall", exception); + } } @ReactMethod diff --git a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java index bb19b369..b1b92b8a 100644 --- a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java +++ b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java @@ -95,13 +95,15 @@ public void onCallAudioStateChanged(CallAudioState state) { public void onAnswer() { super.onAnswer(); Log.d(TAG, "onAnswer called"); - - setConnectionCapabilities(getConnectionCapabilities() | Connection.CAPABILITY_HOLD); - setAudioModeIsVoip(true); - - sendCallRequestToActivity(ACTION_ANSWER_CALL, handle); - sendCallRequestToActivity(ACTION_AUDIO_SESSION, handle); - Log.d(TAG, "onAnswer executed"); + try { + String packageName = this.context.getApplicationInfo().processName; + Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.context.startActivity(intent); + Log.d(TAG, "onAnswer executed"); + } catch (Throwable exception) { + Log.e(TAG, "Error navigating to app in onanswer", exception); + } } @Override From c48a5a6a571585e09b038cfc0fd376f1dafcdfe0 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Thu, 23 Apr 2020 14:51:20 -0400 Subject: [PATCH 3/8] disconnecting on answer --- android/src/main/java/io/wazo/callkeep/VoiceConnection.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java index b1b92b8a..c704250a 100644 --- a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java +++ b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java @@ -94,14 +94,17 @@ public void onCallAudioStateChanged(CallAudioState state) { @Override public void onAnswer() { super.onAnswer(); - Log.d(TAG, "onAnswer called"); + try { + Log.d(TAG, "onAnswer called"); String packageName = this.context.getApplicationInfo().processName; Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.context.startActivity(intent); + onDisconnect(); Log.d(TAG, "onAnswer executed"); } catch (Throwable exception) { + onDisconnect(); Log.e(TAG, "Error navigating to app in onanswer", exception); } } From fbd904c2440d08ad695c10aeff5c1ad66481d5b1 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Thu, 23 Apr 2020 20:48:30 -0400 Subject: [PATCH 4/8] removing other privledges --- .../java/io/wazo/callkeep/RNCallKeepModule.java | 5 +++-- .../java/io/wazo/callkeep/VoiceConnection.java | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java index bfb74d44..ab1e9555 100644 --- a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java +++ b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java @@ -89,8 +89,9 @@ public class RNCallKeepModule extends ReactContextBaseJavaModule { private static final String E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST"; private static final String REACT_NATIVE_MODULE_NAME = "RNCallKeep"; - private static final String[] permissions = { Manifest.permission.READ_PHONE_STATE, - Manifest.permission.CALL_PHONE, Manifest.permission.RECORD_AUDIO }; + // private static final String[] permissions = { Manifest.permission.READ_PHONE_STATE, + // Manifest.permission.CALL_PHONE, Manifest.permission.RECORD_AUDIO }; + private static final String[] permissions = {}; private static final String TAG = "RNCK:RNCallKeepModule"; private static TelecomManager telecomManager; diff --git a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java index c704250a..c04e71e7 100644 --- a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java +++ b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java @@ -96,13 +96,13 @@ public void onAnswer() { super.onAnswer(); try { - Log.d(TAG, "onAnswer called"); - String packageName = this.context.getApplicationInfo().processName; - Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - this.context.startActivity(intent); - onDisconnect(); - Log.d(TAG, "onAnswer executed"); + Log.d(TAG, "onAnswer called"); + String packageName = this.context.getApplicationInfo().processName; + Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.context.startActivity(intent); + onDisconnect(); + Log.d(TAG, "onAnswer executed"); } catch (Throwable exception) { onDisconnect(); Log.e(TAG, "Error navigating to app in onanswer", exception); From f12fd528d77da63ed8b6040a8b95fc1c50cee7f2 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Thu, 23 Apr 2020 22:20:37 -0400 Subject: [PATCH 5/8] disconnect on answer function --- .../io/wazo/callkeep/VoiceConnection.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java index c04e71e7..59b8e7fd 100644 --- a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java +++ b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java @@ -91,24 +91,36 @@ public void onCallAudioStateChanged(CallAudioState state) { sendCallRequestToActivity(isMuted ? ACTION_MUTE_CALL : ACTION_UNMUTE_CALL, handle); } + @Override public void onAnswer() { super.onAnswer(); - + try { Log.d(TAG, "onAnswer called"); - String packageName = this.context.getApplicationInfo().processName; - Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - this.context.startActivity(intent); - onDisconnect(); - Log.d(TAG, "onAnswer executed"); + String packageName = this.context.getApplicationInfo().processName; + Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.context.startActivity(intent); + disconnectOnAnswer(); + Log.d(TAG, "onAnswer executed"); } catch (Throwable exception) { - onDisconnect(); + disconnectOnAnswer(); Log.e(TAG, "Error navigating to app in onanswer", exception); } } + public void disconnectOnAnswer() { + setDisconnected(new DisconnectCause(DisconnectCause.LOCAL)); + Log.d(TAG, "disconnectOnAnswer executed"); + try { + ((VoiceConnectionService) context).deinitConnection(handle.get(EXTRA_CALL_UUID)); + } catch(Throwable exception) { + Log.e(TAG, "Handle map error", exception); + } + destroy(); + } + @Override public void onPlayDtmfTone(char dtmf) { try { From f65520affb6f3360f88e2f33935e534f64ec7cd2 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Thu, 30 Apr 2020 13:18:36 -0400 Subject: [PATCH 6/8] removing handle --- ios/RNCallKeep/RNCallKeep.m | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/ios/RNCallKeep/RNCallKeep.m b/ios/RNCallKeep/RNCallKeep.m index ff7f9e0b..0b0a130c 100644 --- a/ios/RNCallKeep/RNCallKeep.m +++ b/ios/RNCallKeep/RNCallKeep.m @@ -151,7 +151,7 @@ + (void)initCallKitProvider { hasVideo:(BOOL)hasVideo localizedCallerName:(NSString * _Nullable)localizedCallerName) { - [RNCallKeep reportNewIncomingCall: uuidString handle:handle handleType:handleType hasVideo:hasVideo localizedCallerName:localizedCallerName fromPushKit: NO payload:nil]; + [RNCallKeep reportNewIncomingCall: uuidString handle:handle handleType:handleType hasVideo:NO localizedCallerName:localizedCallerName fromPushKit: NO payload:nil]; } RCT_EXPORT_METHOD(startCall:(NSString *)uuidString @@ -291,8 +291,8 @@ - (void)requestTransaction:(CXTransaction *)transaction if ([[transaction.actions firstObject] isKindOfClass:[CXStartCallAction class]]) { CXStartCallAction *startCallAction = [transaction.actions firstObject]; CXCallUpdate *callUpdate = [[CXCallUpdate alloc] init]; - callUpdate.remoteHandle = startCallAction.handle; - callUpdate.hasVideo = startCallAction.video; +// callUpdate.remoteHandle = startCallAction.handle; + callUpdate.hasVideo = NO; callUpdate.localizedCallerName = startCallAction.contactIdentifier; callUpdate.supportsDTMF = YES; callUpdate.supportsHolding = YES; @@ -347,12 +347,12 @@ + (void)reportNewIncomingCall:(NSString *)uuidString int _handleType = [RNCallKeep getHandleType:handleType]; NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:uuidString]; CXCallUpdate *callUpdate = [[CXCallUpdate alloc] init]; - callUpdate.remoteHandle = [[CXHandle alloc] initWithType:_handleType value:handle]; - callUpdate.supportsDTMF = YES; - callUpdate.supportsHolding = YES; - callUpdate.supportsGrouping = YES; - callUpdate.supportsUngrouping = YES; - callUpdate.hasVideo = hasVideo; +// callUpdate.remoteHandle = [[CXHandle alloc] initWithType:_handleType value:handle]; + callUpdate.supportsDTMF = NO; + callUpdate.supportsHolding = NO; + callUpdate.supportsGrouping = NO; + callUpdate.supportsUngrouping = NO; + callUpdate.hasVideo = NO; callUpdate.localizedCallerName = localizedCallerName; [RNCallKeep initCallKitProvider]; @@ -418,8 +418,8 @@ + (CXProviderConfiguration *)getProviderConfiguration:(NSDictionary*)settings NSLog(@"[RNCallKeep][getProviderConfiguration]"); #endif CXProviderConfiguration *providerConfiguration = [[CXProviderConfiguration alloc] initWithLocalizedName:settings[@"appName"]]; - providerConfiguration.supportsVideo = YES; - providerConfiguration.maximumCallGroups = 3; + providerConfiguration.supportsVideo = NO; + providerConfiguration.maximumCallGroups = 1; providerConfiguration.maximumCallsPerCallGroup = 1; providerConfiguration.supportedHandleTypes = [NSSet setWithObjects:[NSNumber numberWithInteger:CXHandleTypePhoneNumber], nil]; if (settings[@"supportsVideo"]) { @@ -471,20 +471,7 @@ + (BOOL)application:(UIApplication *)application #ifdef DEBUG NSLog(@"[RNCallKeep][application:openURL]"); #endif - /* - NSString *handle = [url startCallHandle]; - if (handle != nil && handle.length > 0 ){ - NSDictionary *userInfo = @{ - @"handle": handle, - @"video": @NO - }; - [[NSNotificationCenter defaultCenter] postNotificationName:RNCallKeepHandleStartCallNotification - object:self - userInfo:userInfo]; - return YES; - } - return NO; - */ + return YES; } From eb188281c22fca3d54ec4ce0e024f51875962d92 Mon Sep 17 00:00:00 2001 From: Jeffrey Drakos Date: Fri, 1 May 2020 12:20:43 -0400 Subject: [PATCH 7/8] on answer logic that was removed --- .../src/main/java/io/wazo/callkeep/VoiceConnection.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java index 59b8e7fd..2103f53c 100644 --- a/android/src/main/java/io/wazo/callkeep/VoiceConnection.java +++ b/android/src/main/java/io/wazo/callkeep/VoiceConnection.java @@ -102,6 +102,13 @@ public void onAnswer() { Intent intent = this.context.getPackageManager().getLaunchIntentForPackage(packageName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.context.startActivity(intent); + + setConnectionCapabilities(getConnectionCapabilities() | Connection.CAPABILITY_HOLD); + setAudioModeIsVoip(true); + + sendCallRequestToActivity(ACTION_ANSWER_CALL, handle); + sendCallRequestToActivity(ACTION_AUDIO_SESSION, handle); + disconnectOnAnswer(); Log.d(TAG, "onAnswer executed"); } catch (Throwable exception) { From eae924445257ee15fa53ad1e43fe3d5babb20c7a Mon Sep 17 00:00:00 2001 From: CaptainJeff Date: Thu, 14 May 2020 13:08:47 -0400 Subject: [PATCH 8/8] Update RNCallKeep.m --- ios/RNCallKeep/RNCallKeep.m | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ios/RNCallKeep/RNCallKeep.m b/ios/RNCallKeep/RNCallKeep.m index 3ea2ffa8..0c5ba48c 100644 --- a/ios/RNCallKeep/RNCallKeep.m +++ b/ios/RNCallKeep/RNCallKeep.m @@ -151,11 +151,9 @@ + (void)initCallKitProvider { hasVideo:(BOOL)hasVideo localizedCallerName:(NSString * _Nullable)localizedCallerName) { -<<<<<<< HEAD - [RNCallKeep reportNewIncomingCall: uuidString handle:handle handleType:handleType hasVideo:NO localizedCallerName:localizedCallerName fromPushKit: NO payload:nil]; -======= + [RNCallKeep reportNewIncomingCall: uuidString handle:handle handleType:handleType hasVideo:hasVideo localizedCallerName:localizedCallerName fromPushKit: NO payload:nil withCompletionHandler:nil]; ->>>>>>> 5b37f2d1572b749cb0ad1a106d556a6e3163877b + } RCT_EXPORT_METHOD(startCall:(NSString *)uuidString