From b469805b2d0c9b23ca020cf9356ff137205f856c Mon Sep 17 00:00:00 2001
From: 464027401@qq.com <464027401@qq.com>
Date: 星期一, 27 九月 2021 10:22:10 +0800
Subject: [PATCH] 修复来点页面重复呼叫时alert位置不对问题
---
HDLLinPhoneSDK(OC)/HDLLinPhoneSDK/HDLLinphoneProviderDelegate.m | 418 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 209 insertions(+), 209 deletions(-)
diff --git "a/HDLLinPhoneSDK\357\274\210OC\357\274\211/HDLLinPhoneSDK/HDLLinphoneProviderDelegate.m" "b/HDLLinPhoneSDK\357\274\210OC\357\274\211/HDLLinPhoneSDK/HDLLinphoneProviderDelegate.m"
index 36ef23d..fa0b143 100644
--- "a/HDLLinPhoneSDK\357\274\210OC\357\274\211/HDLLinPhoneSDK/HDLLinphoneProviderDelegate.m"
+++ "b/HDLLinPhoneSDK\357\274\210OC\357\274\211/HDLLinPhoneSDK/HDLLinphoneProviderDelegate.m"
@@ -35,10 +35,10 @@
self.pendingCall = NULL;
self.pendingAddr = NULL;
self.pendingCallVideo = FALSE;
- CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
- [callController.callObserver setDelegate:self queue:dispatch_get_main_queue()];
- self.controller = callController;
- self.callKitCalls = 0;
+// CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
+// [callController.callObserver setDelegate:self queue:dispatch_get_main_queue()];
+// self.controller = callController;
+ self.callKCalls = 0;
if (!self) {
NSLog(@"ProviderDelegate not initialized...");
@@ -47,21 +47,21 @@
}
- (void)config {
- CXProviderConfiguration *config = [[CXProviderConfiguration alloc]
- initWithLocalizedName:[NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"]];
- config.ringtoneSound = @"notes_of_the_optimistic.caf";
- config.supportsVideo = TRUE;
- config.iconTemplateImageData = UIImagePNGRepresentation([UIImage imageNamed:@"callkit_logo"]);
-
- NSArray *ar = @[ [NSNumber numberWithInt:(int)CXHandleTypeGeneric] ];
- NSSet *handleTypes = [[NSSet alloc] initWithArray:ar];
- [config setSupportedHandleTypes:handleTypes];
- [config setMaximumCallGroups:2];
- [config setMaximumCallsPerCallGroup:1];
- //not show app's calls in tel's history
- //config.includesCallsInRecents = NO;
- self.provider = [[CXProvider alloc] initWithConfiguration:config];
- [self.provider setDelegate:self queue:dispatch_get_main_queue()];
+// CXProviderConfiguration *config = [[CXProviderConfiguration alloc]
+// initWithLocalizedName:[NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"]];
+// config.ringtoneSound = @"notes_of_the_optimistic.caf";
+// config.supportsVideo = TRUE;
+// config.iconTemplateImageData = UIImagePNGRepresentation([UIImage imageNamed:@"callkit_logo"]);
+//
+// NSArray *ar = @[ [NSNumber numberWithInt:(int)CXHandleTypeGeneric] ];
+// NSSet *handleTypes = [[NSSet alloc] initWithArray:ar];
+// [config setSupportedHandleTypes:handleTypes];
+// [config setMaximumCallGroups:2];
+// [config setMaximumCallsPerCallGroup:1];
+// //not show app's calls in tel's history
+// //config.includesCallsInRecents = NO;
+// self.provider = [[CXProvider alloc] initWithConfiguration:config];
+// [self.provider setDelegate:self queue:dispatch_get_main_queue()];
}
- (void)configAudioSession:(AVAudioSession *)audioSession {
@@ -87,32 +87,32 @@
}
}
-- (void)reportIncomingCall:(LinphoneCall *) call withUUID:(NSUUID *)uuid handle:(NSString *)handle video:(BOOL)video; {
- // Create update to describe the incoming call and caller
- CXCallUpdate *update = [[CXCallUpdate alloc] init];
- update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
- update.supportsDTMF = TRUE;
- update.supportsHolding = TRUE;
- update.supportsGrouping = TRUE;
- update.supportsUngrouping = TRUE;
- update.hasVideo = _pendingCallVideo = video;
-
- // Report incoming call to system
-// LOGD(@"CallKit: report new incoming call with call-id: [%@] and UUID: [%@]", [_calls objectForKey:uuid], uuid);
- [self.provider reportNewIncomingCallWithUUID:uuid
- update:update
- completion:^(NSError *error) {
- if (error) {
-// LOGE(@"CallKit: cannot complete incoming call with call-id: [%@] and UUID: [%@] from [%@] caused by [%@]",
-// [_calls objectForKey:uuid], uuid, handle, [error localizedDescription]);
- if ([error code] == CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb ||
- [error code] == CXErrorCodeIncomingCallErrorFilteredByBlockList)
- linphone_call_decline(call,LinphoneReasonBusy); /*to give a chance for other devices to answer*/
- else
- linphone_call_decline(call,LinphoneReasonUnknown);
- }
- }];
-}
+//- (void)reportIncomingCall:(LinphoneCall *) call withUUID:(NSUUID *)uuid handle:(NSString *)handle video:(BOOL)video; {
+// // Create update to describe the incoming call and caller
+// CXCallUpdate *update = [[CXCallUpdate alloc] init];
+// update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
+// update.supportsDTMF = TRUE;
+// update.supportsHolding = TRUE;
+// update.supportsGrouping = TRUE;
+// update.supportsUngrouping = TRUE;
+// update.hasVideo = _pendingCallVideo = video;
+//
+// // Report incoming call to system
+//// LOGD(@"CallKit: report new incoming call with call-id: [%@] and UUID: [%@]", [_calls objectForKey:uuid], uuid);
+// [self.provider reportNewIncomingCallWithUUID:uuid
+// update:update
+// completion:^(NSError *error) {
+// if (error) {
+//// LOGE(@"CallKit: cannot complete incoming call with call-id: [%@] and UUID: [%@] from [%@] caused by [%@]",
+//// [_calls objectForKey:uuid], uuid, handle, [error localizedDescription]);
+// if ([error code] == CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb ||
+// [error code] == CXErrorCodeIncomingCallErrorFilteredByBlockList)
+// linphone_call_decline(call,LinphoneReasonBusy); /*to give a chance for other devices to answer*/
+// else
+// linphone_call_decline(call,LinphoneReasonUnknown);
+// }
+// }];
+//}
- (void)setPendingCall:(LinphoneCall *)pendingCall {
if (pendingCall) {
@@ -127,177 +127,177 @@
#pragma mark - CXProviderDelegate Protocol
-- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
- NSUUID *uuid = action.callUUID;
- NSString *callID = [self.calls objectForKey:uuid]; // first, make sure this callid is not already involved in a call
-// LOGD(@"CallKit: Answering call with call-id: [%@] and UUID: [%@]", callID, uuid);
- [self configAudioSession:[AVAudioSession sharedInstance]];
- [action fulfill];
- LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
- if (!call)
- return;
+//- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
+// NSUUID *uuid = action.callUUID;
+// NSString *callID = [self.calls objectForKey:uuid]; // first, make sure this callid is not already involved in a call
+//// LOGD(@"CallKit: Answering call with call-id: [%@] and UUID: [%@]", callID, uuid);
+// [self configAudioSession:[AVAudioSession sharedInstance]];
+// [action fulfill];
+// LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
+// if (!call)
+// return;
+//
+// self.callKitCalls++;
+// self.pendingCall = call;
+//}
- self.callKitCalls++;
- self.pendingCall = call;
-}
-
-- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action {
- NSUUID *uuid = action.callUUID;
- NSString *callID = [self.calls objectForKey:uuid]; // first, make sure this callid is not already involved in a call
- NSLog(@"CallKit: Starting Call with call-id: [%@] and UUID: [%@]", callID, uuid);
- // To restart Audio Unit
- [self configAudioSession:[AVAudioSession sharedInstance]];
- [action fulfill];
- LinphoneCall *call;
- if (![callID isEqualToString:@""]) {
- call = linphone_core_get_current_call(LC);
- } else {
- call = [HDLLinphoneManager.instance callByCallId:callID];
- }
- if (call != NULL) {
- self.callKitCalls++;
- self.pendingCall = call;
- }
-}
-
-- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
- self.callKitCalls--;
- [action fulfill];
- if (linphone_core_is_in_conference(LC)) {
- HDLLinphoneManager.instance.conf = TRUE;
- linphone_core_terminate_conference(LC);
-// LOGD(@"CallKit: Ending the conference");
- } else if (linphone_core_get_calls_nb(LC) > 1) {
- HDLLinphoneManager.instance.conf = TRUE;
- linphone_core_terminate_all_calls(LC);
-// LOGD(@"CallKit: Ending all the ongoing calls");
- } else {
- NSUUID *uuid = action.callUUID;
- NSString *callID = [self.calls objectForKey:uuid];
- if (callID) {
-// LOGD(@"CallKit: Ending the call with call-id: [%@] and UUID: [%@]", callID, uuid);
- LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
- if (call) {
- linphone_call_terminate((LinphoneCall *)call);
- }
- [self.uuids removeObjectForKey:callID];
- [self.calls removeObjectForKey:uuid];
- }
- }
-}
-
-- (void)provider:(CXProvider *)provider performSetMutedCallAction:(nonnull CXSetMutedCallAction *)action {
- [action fulfill];
-// if ([[PhoneMainView.instance currentView] equal:CallView.compositeViewDescription]) {
-// CallView *view = (CallView *)[PhoneMainView.instance popToView:CallView.compositeViewDescription];
-// [view.microButton toggle];
+//- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action {
+// NSUUID *uuid = action.callUUID;
+// NSString *callID = [self.calls objectForKey:uuid]; // first, make sure this callid is not already involved in a call
+// NSLog(@"CallKit: Starting Call with call-id: [%@] and UUID: [%@]", callID, uuid);
+// // To restart Audio Unit
+// [self configAudioSession:[AVAudioSession sharedInstance]];
+// [action fulfill];
+// LinphoneCall *call;
+// if (![callID isEqualToString:@""]) {
+// call = linphone_core_get_current_call(LC);
+// } else {
+// call = [HDLLinphoneManager.instance callByCallId:callID];
// }
-}
+// if (call != NULL) {
+// self.callKitCalls++;
+// self.pendingCall = call;
+// }
+//}
-- (void)provider:(CXProvider *)provider performSetHeldCallAction:(nonnull CXSetHeldCallAction *)action {
- [action fulfill];
- if (linphone_core_is_in_conference(LC) && action.isOnHold) {
- linphone_core_leave_conference(LC);
-// LOGD(@"CallKit: Leaving conference");
- [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self];
- return;
- }
+//- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
+// self.callKitCalls--;
+// [action fulfill];
+// if (linphone_core_is_in_conference(LC)) {
+// HDLLinphoneManager.instance.conf = TRUE;
+// linphone_core_terminate_conference(LC);
+//// LOGD(@"CallKit: Ending the conference");
+// } else if (linphone_core_get_calls_nb(LC) > 1) {
+// HDLLinphoneManager.instance.conf = TRUE;
+// linphone_core_terminate_all_calls(LC);
+//// LOGD(@"CallKit: Ending all the ongoing calls");
+// } else {
+// NSUUID *uuid = action.callUUID;
+// NSString *callID = [self.calls objectForKey:uuid];
+// if (callID) {
+//// LOGD(@"CallKit: Ending the call with call-id: [%@] and UUID: [%@]", callID, uuid);
+// LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
+// if (call) {
+// linphone_call_terminate((LinphoneCall *)call);
+// }
+// [self.uuids removeObjectForKey:callID];
+// [self.calls removeObjectForKey:uuid];
+// }
+// }
+//}
- if (linphone_core_get_calls_nb(LC) > 1 && action.isOnHold) {
- linphone_core_pause_all_calls(LC);
-// LOGD(@"CallKit: Pausing all ongoing calls");
- return;
- }
+//- (void)provider:(CXProvider *)provider performSetMutedCallAction:(nonnull CXSetMutedCallAction *)action {
+// [action fulfill];
+//// if ([[PhoneMainView.instance currentView] equal:CallView.compositeViewDescription]) {
+//// CallView *view = (CallView *)[PhoneMainView.instance popToView:CallView.compositeViewDescription];
+//// [view.microButton toggle];
+//// }
+//}
- NSUUID *uuid = action.callUUID;
- NSString *callID = [self.calls objectForKey:uuid];
- if (!callID) {
- return;
- }
+//- (void)provider:(CXProvider *)provider performSetHeldCallAction:(nonnull CXSetHeldCallAction *)action {
+// [action fulfill];
+// if (linphone_core_is_in_conference(LC) && action.isOnHold) {
+// linphone_core_leave_conference(LC);
+//// LOGD(@"CallKit: Leaving conference");
+// [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self];
+// return;
+// }
+//
+// if (linphone_core_get_calls_nb(LC) > 1 && action.isOnHold) {
+// linphone_core_pause_all_calls(LC);
+//// LOGD(@"CallKit: Pausing all ongoing calls");
+// return;
+// }
+//
+// NSUUID *uuid = action.callUUID;
+// NSString *callID = [self.calls objectForKey:uuid];
+// if (!callID) {
+// return;
+// }
+//
+//// LOGD(@"CallKit: Call with call-id: [%@] and UUID: [%@] paused status changed to: []", callID, uuid, action.isOnHold ? @"Paused" : @"Resumed");
+// LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
+// if (!call)
+// return;
+//
+// if (action.isOnHold) {
+// HDLLinphoneManager.instance.speakerBeforePause = HDLLinphoneManager.instance.speakerEnabled;
+// linphone_call_pause((LinphoneCall *)call);
+// } else {
+// if (linphone_core_get_conference(LC)) {
+// linphone_core_enter_conference(LC);
+// [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self];
+// } else {
+// [self configAudioSession:[AVAudioSession sharedInstance]];
+// self.pendingCall = call;
+// }
+// }
+//}
-// LOGD(@"CallKit: Call with call-id: [%@] and UUID: [%@] paused status changed to: []", callID, uuid, action.isOnHold ? @"Paused" : @"Resumed");
- LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
- if (!call)
- return;
+//- (void)provider:(CXProvider *)provider performPlayDTMFCallAction:(CXPlayDTMFCallAction *)action {
+// [action fulfill];
+// NSUUID *uuid = action.callUUID;
+// NSString *callID = [self.calls objectForKey:uuid];
+//// LOGD(@"CallKit: playing DTMF for call with call-id: [%@] and UUID: [%@]", callID, uuid);
+// LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
+// char digit = action.digits.UTF8String[0];
+// linphone_call_send_dtmf((LinphoneCall *)call, digit);
+//}
- if (action.isOnHold) {
- HDLLinphoneManager.instance.speakerBeforePause = HDLLinphoneManager.instance.speakerEnabled;
- linphone_call_pause((LinphoneCall *)call);
- } else {
- if (linphone_core_get_conference(LC)) {
- linphone_core_enter_conference(LC);
- [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self];
- } else {
- [self configAudioSession:[AVAudioSession sharedInstance]];
- self.pendingCall = call;
- }
- }
-}
+//- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession {
+// NSLog(@"CallKit: Audio session activated");
+// // Now we can (re)start the call
+// if (self.pendingCall) {
+// LinphoneCallState state = linphone_call_get_state(self.pendingCall);
+// switch (state) {
+// case LinphoneCallIncomingReceived:
+// [HDLLinphoneManager.instance acceptCall:(LinphoneCall *)self.pendingCall evenWithVideo:_pendingCallVideo];
+// break;
+// case LinphoneCallPaused:
+// linphone_call_resume((LinphoneCall *)self.pendingCall);
+// break;
+// case LinphoneCallStreamsRunning:
+// // May happen when multiple calls
+// break;
+// default:
+// break;
+// }
+// } else {
+// if (_pendingAddr) {
+// [HDLLinphoneManager.instance doCall:_pendingAddr];
+// } else {
+//// LOGE(@"CallKit: No pending call");
+// }
+// }
+//
+// [self setPendingCall:NULL];
+// if (_pendingAddr)
+// linphone_address_unref(_pendingAddr);
+// _pendingAddr = NULL;
+// _pendingCallVideo = FALSE;
+//}
+//
+//- (void)provider:(CXProvider *)provider didDeactivateAudioSession:(nonnull AVAudioSession *)audioSession {
+// NSLog(@"CallKit : Audio session deactivated");
+// [self setPendingCall:NULL];
+// if (_pendingAddr)
+// linphone_address_unref(_pendingAddr);
+// _pendingAddr = NULL;
+// _pendingCallVideo = FALSE;
+//}
-- (void)provider:(CXProvider *)provider performPlayDTMFCallAction:(CXPlayDTMFCallAction *)action {
- [action fulfill];
- NSUUID *uuid = action.callUUID;
- NSString *callID = [self.calls objectForKey:uuid];
-// LOGD(@"CallKit: playing DTMF for call with call-id: [%@] and UUID: [%@]", callID, uuid);
- LinphoneCall *call = [HDLLinphoneManager.instance callByCallId:callID];
- char digit = action.digits.UTF8String[0];
- linphone_call_send_dtmf((LinphoneCall *)call, digit);
-}
-
-- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession {
- NSLog(@"CallKit: Audio session activated");
- // Now we can (re)start the call
- if (self.pendingCall) {
- LinphoneCallState state = linphone_call_get_state(self.pendingCall);
- switch (state) {
- case LinphoneCallIncomingReceived:
- [HDLLinphoneManager.instance acceptCall:(LinphoneCall *)self.pendingCall evenWithVideo:_pendingCallVideo];
- break;
- case LinphoneCallPaused:
- linphone_call_resume((LinphoneCall *)self.pendingCall);
- break;
- case LinphoneCallStreamsRunning:
- // May happen when multiple calls
- break;
- default:
- break;
- }
- } else {
- if (_pendingAddr) {
- [HDLLinphoneManager.instance doCall:_pendingAddr];
- } else {
-// LOGE(@"CallKit: No pending call");
- }
- }
-
- [self setPendingCall:NULL];
- if (_pendingAddr)
- linphone_address_unref(_pendingAddr);
- _pendingAddr = NULL;
- _pendingCallVideo = FALSE;
-}
-
-- (void)provider:(CXProvider *)provider didDeactivateAudioSession:(nonnull AVAudioSession *)audioSession {
- NSLog(@"CallKit : Audio session deactivated");
- [self setPendingCall:NULL];
- if (_pendingAddr)
- linphone_address_unref(_pendingAddr);
- _pendingAddr = NULL;
- _pendingCallVideo = FALSE;
-}
-
-- (void)providerDidReset:(CXProvider *)provider {
-// LOGD(@"CallKit: Provider reset");
- HDLLinphoneManager.instance.conf = TRUE;
- linphone_core_terminate_all_calls(LC);
- [self.calls removeAllObjects];
- [self.uuids removeAllObjects];
-}
-
-#pragma mark - CXCallObserverDelegate Protocol
-
-- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
- NSLog(@"CallKit: Call changed");
-}
+//- (void)providerDidReset:(CXProvider *)provider {
+//// LOGD(@"CallKit: Provider reset");
+// HDLLinphoneManager.instance.conf = TRUE;
+// linphone_core_terminate_all_calls(LC);
+// [self.calls removeAllObjects];
+// [self.uuids removeAllObjects];
+//}
+//
+//#pragma mark - CXCallObserverDelegate Protocol
+//
+//- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
+// NSLog(@"CallKit: Call changed");
+//}
@end
--
Gitblit v1.8.0