omikit-plugin 2.4.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +77 -35
  2. package/android/build.gradle +9 -6
  3. package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +73 -42
  4. package/android/src/main/java/com/omikitplugin/constants/constant.kt +1 -0
  5. package/ios/CallProcess/CallManager.swift +151 -181
  6. package/ios/CallProcess/CallState.swift +1 -0
  7. package/ios/Constant/Constant.swift +1 -1
  8. package/ios/Library/OmikitPlugin.m +18 -0
  9. package/ios/Library/OmikitPlugin.swift +41 -15
  10. package/lib/commonjs/index.js +11 -0
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/omi_call_state.js +1 -0
  13. package/lib/commonjs/omi_call_state.js.map +1 -1
  14. package/lib/commonjs/omi_start_call_status.js +21 -0
  15. package/lib/commonjs/omi_start_call_status.js.map +1 -0
  16. package/lib/commonjs/omikit.js +14 -6
  17. package/lib/commonjs/omikit.js.map +1 -1
  18. package/lib/module/index.js +1 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/omi_call_state.js +1 -0
  21. package/lib/module/omi_call_state.js.map +1 -1
  22. package/lib/module/omi_start_call_status.js +14 -0
  23. package/lib/module/omi_start_call_status.js.map +1 -0
  24. package/lib/module/omikit.js +11 -6
  25. package/lib/module/omikit.js.map +1 -1
  26. package/lib/typescript/index.d.ts +1 -0
  27. package/lib/typescript/index.d.ts.map +1 -1
  28. package/lib/typescript/omi_call_state.d.ts +2 -1
  29. package/lib/typescript/omi_call_state.d.ts.map +1 -1
  30. package/lib/typescript/omi_start_call_status.d.ts +13 -0
  31. package/lib/typescript/omi_start_call_status.d.ts.map +1 -0
  32. package/lib/typescript/omikit.d.ts +6 -2
  33. package/lib/typescript/omikit.d.ts.map +1 -1
  34. package/omikit-plugin.podspec +1 -1
  35. package/package.json +1 -1
  36. package/src/index.tsx +1 -0
  37. package/src/omi_call_state.tsx +1 -0
  38. package/src/omi_start_call_status.tsx +12 -0
  39. package/src/omikit.tsx +15 -7
@@ -44,31 +44,41 @@ class CallManager {
44
44
  }
45
45
  }
46
46
 
47
+ func configNotification(data: [String: Any]) {
48
+ let user = UserDefaults.standard
49
+ if let title = data["missedCallTitle"] as? String, let message = data["prefixMissedCallMessage"] as? String {
50
+ user.set(title, forKey: "omicall/missedCallTitle")
51
+ user.set(message, forKey: "omicall/prefixMissedCallMessage")
52
+ }
53
+ }
54
+
47
55
  private func requestPermission(isVideo: Bool) {
48
56
  AVCaptureDevice.requestAccess(for: .audio) { _ in
49
- print("request audio")
57
+ // print("request audio")
50
58
  }
51
59
  if isVideo {
52
60
  AVCaptureDevice.requestAccess(for: .video) { _ in
53
- print("request video")
61
+ // print("request video")
54
62
  }
55
63
  }
56
64
  }
57
65
 
58
66
  func initWithApiKeyEndpoint(params: [String: Any]) -> Bool {
59
67
  //request permission
60
- var result = true
68
+ var result = false
61
69
  if let usrUuid = params["usrUuid"] as? String, let fullName = params["fullName"] as? String, let apiKey = params["apiKey"] as? String {
62
70
  result = OmiClient.initWithUUID(usrUuid, fullName: fullName, apiKey: apiKey)
63
71
  }
64
- let isVideo = (params["isVideo"] as? Bool) ?? true
65
- requestPermission(isVideo: isVideo)
72
+ if (result) {
73
+ let isVideo = (params["isVideo"] as? Bool) ?? true
74
+ requestPermission(isVideo: isVideo)
75
+ }
66
76
  return result
67
77
  }
68
78
 
69
79
 
70
80
  func initWithUserPasswordEndpoint(params: [String: Any]) -> Bool {
71
- if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String, let host = params["host"] as? String {
81
+ if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String {
72
82
  OmiClient.initWithUsername(userName, password: password, realm: realm)
73
83
  }
74
84
  let isVideo = (params["isVideo"] as? Bool) ?? true
@@ -76,51 +86,6 @@ class CallManager {
76
86
  return true
77
87
  }
78
88
 
79
- func registerNotificationCenter() {
80
- DispatchQueue.main.async { [weak self] in
81
- guard let self = self else { return }
82
- NotificationCenter.default.removeObserver(CallManager.instance!)
83
- NotificationCenter.default.addObserver(CallManager.instance!,
84
- selector: #selector(self.callStateChanged(_:)),
85
- name: NSNotification.Name.OMICallStateChanged,
86
- object: nil
87
- )
88
- NotificationCenter.default.addObserver(CallManager.instance!,
89
- selector: #selector(self.callDealloc(_:)),
90
- name: NSNotification.Name.OMICallDealloc,
91
- object: nil
92
- )
93
- NotificationCenter.default.addObserver(CallManager.instance!,
94
- selector: #selector(self.switchBoardAnswer(_:)),
95
- name: NSNotification.Name.OMICallSwitchBoardAnswer,
96
- object: nil
97
- )
98
- NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.updateNetworkHealth(_:)), name: NSNotification.Name.OMICallNetworkQuality, object: nil)
99
- self.showMissedCall()
100
- }
101
- }
102
-
103
- @objc func updateNetworkHealth(_ notification: NSNotification) {
104
- guard let userInfo = notification.userInfo,
105
- let state = userInfo[OMINotificationNetworkStatusKey] as? Int else {
106
- return;
107
- }
108
- OmikitPlugin.instance.sendEvent(withName: CALL_QUALITY, body: ["quality": state])
109
- }
110
-
111
- func configNotification(data: [String: Any]) {
112
- let user = UserDefaults.standard
113
- if let prefix = data["prefix"] as? String, let userNameKey = data["userNameKey"] as? String {
114
- user.set(prefix, forKey: KEY_OMI_PREFIX)
115
- user.set(userNameKey, forKey: KEY_OMI_USER_NAME_KEY)
116
- }
117
- if let title = data["missedCallTitle"] as? String, let message = data["prefixMissedCallMessage"] as? String {
118
- let user = UserDefaults.standard
119
- user.set(title, forKey: "omicall/missedCallTitle")
120
- user.set(message, forKey: "omicall/prefixMissedCallMessage")
121
- }
122
- }
123
-
124
89
  func showMissedCall() {
125
90
  OmiClient.setMissedCall { call in
126
91
  UNUserNotificationCenter.current().getNotificationSettings { settings in
@@ -140,19 +105,44 @@ class CallManager {
140
105
  "omisdkIsVideo": call.isVideo,
141
106
  ]
142
107
  let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
143
- //getting the notification request
144
108
  let id = Int.random(in: 0..<10000000)
145
109
  let request = UNNotificationRequest(identifier: "\(id)", content: content, trigger: trigger)
146
- //adding the notification to notification center
147
110
  UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
148
111
  default:
149
- break // Do nothing
112
+ break
150
113
  }
151
114
  }
152
115
  }
153
116
  }
154
117
 
155
118
 
119
+ func registerNotificationCenter(showMissedCall: Bool) {
120
+ DispatchQueue.main.async { [weak self] in
121
+ guard let self = self else { return }
122
+ NotificationCenter.default.removeObserver(CallManager.instance!)
123
+ NotificationCenter.default.addObserver(CallManager.instance!,
124
+ selector: #selector(self.callStateChanged(_:)),
125
+ name: NSNotification.Name.OMICallStateChanged,
126
+ object: nil
127
+ )
128
+ NotificationCenter.default.addObserver(CallManager.instance!,
129
+ selector: #selector(self.callDealloc(_:)),
130
+ name: NSNotification.Name.OMICallDealloc,
131
+ object: nil
132
+ )
133
+ NotificationCenter.default.addObserver(CallManager.instance!,
134
+ selector: #selector(self.switchBoardAnswer(_:)),
135
+ name: NSNotification.Name.OMICallSwitchBoardAnswer,
136
+ object: nil
137
+ )
138
+ NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.updateNetworkHealth(_:)), name: NSNotification.Name.OMICallNetworkQuality, object: nil)
139
+ NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.audioChanged(_:)), name: NSNotification.Name.OMICallAudioRouteChange, object: nil)
140
+ if (showMissedCall) {
141
+ self.showMissedCall()
142
+ }
143
+ }
144
+ }
145
+
156
146
  func registerVideoEvent() {
157
147
  DispatchQueue.main.async {
158
148
  NotificationCenter.default.addObserver(CallManager.instance!,
@@ -169,13 +159,23 @@ class CallManager {
169
159
  }
170
160
  }
171
161
 
172
- @objc func switchBoardAnswer(_ notification: NSNotification) {
162
+ @objc func audioChanged(_ notification: NSNotification) {
173
163
  guard let userInfo = notification.userInfo,
174
- let sip = userInfo[OMINotificationSIPKey] as? String else {
164
+ let audioInfo = userInfo[OMINotificationCurrentAudioRouteKey] as? [[String: String]] else {
175
165
  return;
176
166
  }
177
- guestPhone = sip
178
- OmikitPlugin.instance.sendEvent(withName: SWITCHBOARD_ANSWER, body: ["sip": sip])
167
+ OmikitPlugin.instance?.sendEvent(withName: AUDIO_CHANGE, body: [
168
+ "data": audioInfo,
169
+ ])
170
+
171
+ }
172
+
173
+ @objc func updateNetworkHealth(_ notification: NSNotification) {
174
+ guard let userInfo = notification.userInfo,
175
+ let state = userInfo[OMINotificationNetworkStatusKey] as? Int else {
176
+ return;
177
+ }
178
+ OmikitPlugin.instance.sendEvent(withName: CALL_QUALITY, body: ["quality": state])
179
179
  }
180
180
 
181
181
  @objc func videoUpdate(_ notification: NSNotification) {
@@ -192,6 +192,15 @@ class CallManager {
192
192
  }
193
193
  }
194
194
 
195
+ @objc func switchBoardAnswer(_ notification: NSNotification) {
196
+ guard let userInfo = notification.userInfo,
197
+ let sip = userInfo[OMINotificationSIPKey] as? String else {
198
+ return;
199
+ }
200
+ guestPhone = sip
201
+ OmikitPlugin.instance.sendEvent(withName: SWITCHBOARD_ANSWER, body: ["sip": sip])
202
+ }
203
+
195
204
  @objc func callDealloc(_ notification: NSNotification) {
196
205
  if (tempCallInfo != nil) {
197
206
  tempCallInfo!["status"] = CallState.disconnected.rawValue
@@ -201,30 +210,36 @@ class CallManager {
201
210
 
202
211
  @objc fileprivate func callStateChanged(_ notification: NSNotification) {
203
212
  guard let userInfo = notification.userInfo,
204
- let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall else {
213
+ let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall,
214
+ let callState = userInfo[OMINotificationUserInfoCallStateKey] as? Int else {
205
215
  return;
206
216
  }
207
- print("call state")
208
- print(call.callState)
209
- switch (call.callState) {
210
- case .calling:
211
- NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
217
+ // print("call state")
218
+ // print(call.callState)
219
+ switch (callState) {
220
+ case OMICallState.calling.rawValue:
221
+ // NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
212
222
  var callInfo = baseInfoFromCall(call: call)
213
223
  callInfo["status"] = CallState.calling.rawValue
214
224
  OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
215
225
  break
216
- case .early:
226
+ case OMICallState.early.rawValue:
217
227
  var callInfo = baseInfoFromCall(call: call)
218
228
  callInfo["status"] = CallState.early.rawValue
219
229
  OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
220
230
  break
221
- case .connecting:
231
+ case OMICallState.connecting.rawValue:
222
232
  var callInfo = baseInfoFromCall(call: call)
223
233
  callInfo["status"] = CallState.connecting.rawValue
224
234
  OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
225
235
  break
226
- case .confirmed:
227
- NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call)")
236
+ case OMICallState.hold.rawValue:
237
+ var callInfo = baseInfoFromCall(call: call)
238
+ callInfo["status"] = CallState.hold.rawValue
239
+ OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
240
+ break
241
+ case OMICallState.confirmed.rawValue:
242
+ // NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call)")
228
243
  if (videoManager == nil && call.isVideo) {
229
244
  videoManager = OMIVideoViewManager.init()
230
245
  }
@@ -235,7 +250,7 @@ class CallManager {
235
250
  OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
236
251
  OmikitPlugin.instance.sendMuteStatus()
237
252
  break
238
- case .incoming:
253
+ case OMICallState.incoming.rawValue:
239
254
  guestPhone = call.callerNumber ?? ""
240
255
  DispatchQueue.main.async {[weak self] in
241
256
  guard let self = self else { return }
@@ -247,12 +262,12 @@ class CallManager {
247
262
  }
248
263
  }
249
264
  break
250
- case .disconnected:
251
- if (!call.connected) {
252
- NSLog("Call never connected, in DISCONNECTED state, with UUID: \(call.uuid)")
253
- } else if (!call.userDidHangUp) {
254
- NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
255
- }
265
+ case OMICallState.disconnected.rawValue:
266
+ // if (!call.connected) {
267
+ // NSLog("Call never connected, in DISCONNECTED state, with UUID: \(call.uuid)")
268
+ // } else if (!call.userDidHangUp) {
269
+ // NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
270
+ // }
256
271
  tempCallInfo = getCallInfo(call: call)
257
272
  if (videoManager != nil) {
258
273
  videoManager = nil
@@ -268,33 +283,50 @@ class CallManager {
268
283
  }
269
284
  }
270
285
 
286
+ private func getCallInfo(call: OMICall) -> [String: Any] {
287
+ var direction = "outbound"
288
+ if (guestPhone.count < 10) {
289
+ direction = "inbound"
290
+ }
291
+ let user = OmiClient.getCurrentSip()
292
+ let status = call.callState == .confirmed ? "answered" : "no_answered"
293
+ let timeEnd = Int(Date().timeIntervalSince1970)
294
+ return [
295
+ "transaction_id" : call.omiId,
296
+ "direction" : direction,
297
+ "source_number" : user,
298
+ "destination_number" : guestPhone,
299
+ "time_start_to_answer" : call.createDate,
300
+ "time_end" : timeEnd,
301
+ "sip_user": user,
302
+ "disposition" : lastStatusCall == nil ? "no_answered" : "answered",
303
+ ]
304
+ }
305
+
306
+
271
307
  /// Start call
272
- func startCall(_ phoneNumber: String, isVideo: Bool) -> Bool {
308
+ func startCall(_ phoneNumber: String, isVideo: Bool, completion: @escaping (_ : Int) -> Void) {
273
309
  guestPhone = phoneNumber
274
- let auth = AVAudioSession.sharedInstance().recordPermission
275
- if (auth == .granted) {
276
- if (isVideo) {
277
- return OmiClient.startVideoCall(phoneNumber)
310
+ OmiClient.startCall(phoneNumber, isVideo: isVideo) { status in
311
+ DispatchQueue.main.async {
312
+ completion(status.rawValue)
278
313
  }
279
- return OmiClient.startCall(phoneNumber)
280
314
  }
281
- return false
282
315
  }
283
316
 
284
317
  /// Start call
285
- func startCallWithUuid(_ uuid: String, isVideo: Bool) -> Bool {
286
- let auth = AVAudioSession.sharedInstance().recordPermission
287
- if (auth == .granted) {
288
- let phoneNumber = OmiClient.getPhone(uuid)
289
- if let phone = phoneNumber {
290
- guestPhone = phoneNumber ?? ""
291
- if (isVideo) {
292
- return OmiClient.startVideoCall(phone)
318
+ func startCallWithUuid(_ uuid: String, isVideo: Bool, completion: @escaping (_ : Int) -> Void) {
319
+ let phoneNumber = OmiClient.getPhone(uuid)
320
+ if let phone = phoneNumber {
321
+ guestPhone = phoneNumber ?? ""
322
+ OmiClient.startCall(phone, isVideo: isVideo) { status in
323
+ DispatchQueue.main.async {
324
+ completion(status.rawValue)
293
325
  }
294
- return OmiClient.startCall(phone)
295
326
  }
327
+ return
296
328
  }
297
- return false
329
+ completion(OMIStartCallStatus.invalidUuid.rawValue)
298
330
  }
299
331
 
300
332
  func endAvailableCall() -> [String: Any] {
@@ -355,81 +387,16 @@ class CallManager {
355
387
  OmikitPlugin.instance.sendSpeakerStatus()
356
388
  }
357
389
 
358
- func logout() {
359
- OmiClient.logout()
360
- }
361
-
362
- func getCurrentUser(completion: @escaping (([String: Any]) -> Void)) {
363
- let prefs = UserDefaults.standard
364
- if let user = prefs.value(forKey: "User") as? String {
365
- getUserInfo(phone: user, completion: completion)
366
- }
367
- }
368
-
369
- func getGuestUser(completion: @escaping (([String: Any]) -> Void)) {
370
- getUserInfo(phone: guestPhone, completion: completion)
371
- }
372
-
373
- func getUserInfo(phone: String, completion: @escaping (([String: Any]) -> Void)) {
374
- if let account = OmiClient.getAccountInfo(phone) as? [String: Any] {
375
- completion(account)
376
- }
377
- }
378
-
379
- func inputs() -> [[String: String]] {
380
- let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
381
- let results = inputs.map { item in
382
- return [
383
- "name": item.portName,
384
- "id": item.uid,
385
- ]
386
- }
387
- return results
388
- }
389
-
390
- func setInput(id: String) {
391
- let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
392
- if let newOutput = inputs.first(where: {$0.uid == id}) {
393
- try? AVAudioSession.sharedInstance().setPreferredInput(newOutput)
394
- }
390
+ func getAudioOutputs() -> [[String: String]] {
391
+ return OmiClient.getAudioInDevices()
395
392
  }
396
393
 
397
- func outputs() -> [[String: String]] {
398
- let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
399
- var results = outputs.map { item in
400
- return [
401
- "name": item.portName,
402
- "id": item.uid,
403
- ]
404
- }
405
- let hasSpeaker = results.contains{ $0["name"] == "Speaker" }
406
- if (!hasSpeaker) {
407
- results.append([
408
- "name": "Speaker",
409
- "id": "Speaker",
410
- ])
411
- } else {
412
- results.append([
413
- "name": "Off Speaker",
414
- "id": "Off Speaker",
415
- ])
416
- }
417
- return results
394
+ func setAudioOutputs(portType: String) {
395
+ return OmiClient.setAudioOutputs(portType)
418
396
  }
419
397
 
420
- func setOutput(id: String) {
421
- if (id == "Speaker") {
422
- try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
423
- return
424
- }
425
- if (id == "Off Speaker") {
426
- try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
427
- return
428
- }
429
- let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
430
- if let newOutput = outputs.first(where: {$0.uid == id}) {
431
- try? AVAudioSession.sharedInstance().setPreferredInput(newOutput)
432
- }
398
+ func getCurrentAudio() -> [[String: String]] {
399
+ return OmiClient.getCurrentAudio()
433
400
  }
434
401
 
435
402
  //video call
@@ -460,25 +427,28 @@ class CallManager {
460
427
  return videoManager.createView(forVideoRemote: frame)
461
428
  }
462
429
 
463
- private func getCallInfo(call: OMICall) -> [String: Any] {
464
- var direction = "outbound"
465
- if (guestPhone.count < 10) {
466
- direction = "inbound"
430
+ func logout() {
431
+ OmiClient.logout()
432
+ }
433
+
434
+ func getCurrentUser(completion: @escaping (([String: Any]) -> Void)) {
435
+ if let sip = OmiClient.getCurrentSip() {
436
+ getUserInfo(phone: sip, completion: completion)
437
+ } else {
438
+ completion([:])
439
+ }
440
+ }
441
+
442
+ func getGuestUser(completion: @escaping (([String: Any]) -> Void)) {
443
+ getUserInfo(phone: guestPhone, completion: completion)
444
+ }
445
+
446
+ func getUserInfo(phone: String, completion: @escaping (([String: Any]) -> Void)) {
447
+ if let account = OmiClient.getAccountInfo(phone) as? [String: Any] {
448
+ completion(account)
449
+ } else {
450
+ completion([:])
467
451
  }
468
- let prefs = UserDefaults.standard
469
- let user = prefs.value(forKey: "User") as? String
470
- let status = call.callState == .confirmed ? "answered" : "no_answered"
471
- let timeEnd = Int(Date().timeIntervalSince1970)
472
- return [
473
- "transaction_id" : call.omiId,
474
- "direction" : direction,
475
- "source_number" : user,
476
- "destination_number" : guestPhone,
477
- "time_start_to_answer" : call.createDate,
478
- "time_end" : timeEnd,
479
- "sip_user": user,
480
- "disposition" : lastStatusCall == nil ? "no_answered" : "answered",
481
- ]
482
452
  }
483
453
 
484
454
  private func baseInfoFromCall(call: OMICall) -> [String: Any] {
@@ -13,4 +13,5 @@ enum CallState: Int {
13
13
  case confirmed
14
14
  case incoming
15
15
  case disconnected
16
+ case hold
16
17
  }
@@ -43,4 +43,4 @@ let REMOTE_VIDEO_READY = "REMOTE_VIDEO_READY"
43
43
  let CLICK_MISSED_CALL = "CLICK_MISSED_CALL"
44
44
  let SWITCHBOARD_ANSWER = "SWITCHBOARD_ANSWER"
45
45
  let CALL_QUALITY = "CALL_QUALITY"
46
-
46
+ let AUDIO_CHANGE = "AUDIO_CHANGE"
@@ -60,25 +60,43 @@ RCT_EXTERN_METHOD(switchOmiCamera:
60
60
  RCT_EXTERN_METHOD(toggleOmiVideo:
61
61
  (RCTPromiseResolveBlock)resolve
62
62
  withRejecter:(RCTPromiseRejectBlock)reject)
63
+
63
64
  RCT_EXTERN_METHOD(logout:
64
65
  (RCTPromiseResolveBlock)resolve
65
66
  withRejecter:(RCTPromiseRejectBlock)reject)
67
+
66
68
  RCT_EXTERN_METHOD(registerVideoEvent:
67
69
  (RCTPromiseResolveBlock)resolve
68
70
  withRejecter:(RCTPromiseRejectBlock)reject)
71
+
69
72
  RCT_EXTERN_METHOD(removeVideoEvent:
70
73
  (RCTPromiseResolveBlock)resolve
71
74
  withRejecter:(RCTPromiseRejectBlock)reject)
75
+
72
76
  RCT_EXTERN_METHOD(getCurrentUser:
73
77
  (RCTPromiseResolveBlock)resolve
74
78
  withRejecter:(RCTPromiseRejectBlock)reject)
79
+
75
80
  RCT_EXTERN_METHOD(getGuestUser:
76
81
  (RCTPromiseResolveBlock)resolve
77
82
  withRejecter:(RCTPromiseRejectBlock)reject)
83
+
78
84
  RCT_EXTERN_METHOD(getUserInfo: (id)data
79
85
  withResolver:(RCTPromiseResolveBlock)resolve
80
86
  withRejecter:(RCTPromiseRejectBlock)reject)
81
87
 
88
+ RCT_EXTERN_METHOD(getAudio:
89
+ (RCTPromiseResolveBlock)resolve
90
+ withRejecter:(RCTPromiseRejectBlock)reject)
91
+
92
+ RCT_EXTERN_METHOD(setAudio: (id)data
93
+ withResolver:(RCTPromiseResolveBlock)resolve
94
+ withRejecter:(RCTPromiseRejectBlock)reject)
95
+
96
+ RCT_EXTERN_METHOD(getCurrentAudio:
97
+ (RCTPromiseResolveBlock)resolve
98
+ withRejecter:(RCTPromiseRejectBlock)reject)
99
+
82
100
  + (BOOL)requiresMainQueueSetup
83
101
  {
84
102
  return YES;
@@ -14,7 +14,7 @@ public class OmikitPlugin: RCTEventEmitter {
14
14
 
15
15
  @objc(startServices:withRejecter:)
16
16
  func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
17
- CallManager.shareInstance().registerNotificationCenter()
17
+ CallManager.shareInstance().registerNotificationCenter(showMissedCall: true)
18
18
  resolve(true)
19
19
  }
20
20
 
@@ -33,13 +33,12 @@ public class OmikitPlugin: RCTEventEmitter {
33
33
  "callerNumber" : call.callerNumber,
34
34
  "status": call.lastStatus,
35
35
  "muted": call.muted,
36
- "speaker": call.speaker,
37
- "isVideo": call.isVideo
36
+ "isVideo": call.isVideo,
38
37
  ]
39
38
  resolve(data)
40
39
  return
41
40
  }
42
- resolve(false)
41
+ resolve(nil)
43
42
  }
44
43
 
45
44
  @objc(initCallWithUserPassword:withResolver:withRejecter:)
@@ -67,22 +66,30 @@ public class OmikitPlugin: RCTEventEmitter {
67
66
  }
68
67
 
69
68
  @objc(startCall:withResolver:withRejecter:)
70
- func startCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
69
+ func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
71
70
  if let dataOmi = data as? [String: Any] {
72
71
  let phoneNumber = dataOmi["phoneNumber"] as! String
73
- let isVideo = dataOmi["isVideo"] as? Bool
74
- let result = CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo ?? false)
75
- resolve(result)
72
+ var isVideo = false
73
+ if let isVideoCall = dataOmi["isVideo"] as? Bool {
74
+ isVideo = isVideoCall
75
+ }
76
+ CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
77
+ resolve(callResult)
78
+ }
76
79
  }
77
80
  }
78
81
 
79
82
  @objc(startCallWithUuid:withResolver:withRejecter:)
80
- func startCallWithUuid(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
83
+ func startCallWithUuid(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
81
84
  if let dataOmi = data as? [String: Any] {
82
85
  let uuid = dataOmi["usrUuid"] as! String
83
- let isVideo = dataOmi["isVideo"] as? Bool
84
- let result = CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo ?? false)
85
- resolve(result)
86
+ var isVideo = false
87
+ if let isVideoCall = dataOmi["isVideo"] as? Bool {
88
+ isVideo = isVideoCall
89
+ }
90
+ CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
91
+ resolve(callResult)
92
+ }
86
93
  }
87
94
  }
88
95
 
@@ -104,6 +111,7 @@ public class OmikitPlugin: RCTEventEmitter {
104
111
  if let call = CallManager.shareInstance().getAvailableCall() {
105
112
  resolve(call.muted)
106
113
  }
114
+ sendMuteStatus()
107
115
  }
108
116
 
109
117
  @objc(toggleSpeaker:withRejecter:)
@@ -171,6 +179,25 @@ public class OmikitPlugin: RCTEventEmitter {
171
179
  }
172
180
  }
173
181
 
182
+ @objc(getAudio:withRejecter:)
183
+ func getAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
184
+ let audios = CallManager.shareInstance().getAudioOutputs()
185
+ resolve(audios)
186
+ }
187
+
188
+ @objc(setAudio:withResolver:withRejecter:)
189
+ func setAudio(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
190
+ if let dataOmi = data as? [String: Any] {
191
+ let portType = dataOmi["portType"] as! String
192
+ CallManager.shareInstance().setAudioOutputs(portType: portType)
193
+ }
194
+ }
195
+
196
+ @objc(getCurrentAudio:withRejecter:)
197
+ func getCurrentAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
198
+ let currentAudio = CallManager.shareInstance().getCurrentAudio()
199
+ resolve(currentAudio)
200
+ }
174
201
 
175
202
  func sendMuteStatus() {
176
203
  if let call = CallManager.shareInstance().getAvailableCall() {
@@ -183,7 +210,6 @@ public class OmikitPlugin: RCTEventEmitter {
183
210
  }
184
211
 
185
212
  @objc public func didReceive(data: [String: Any]) {
186
- print(data)
187
213
  if let callerNumber = data["omisdkCallerNumber"] as? String, let isVideo = data["omisdkIsVideo"] as? Bool {
188
214
  sendEvent(withName: CLICK_MISSED_CALL, body: [
189
215
  "callerNumber": callerNumber,
@@ -192,7 +218,6 @@ public class OmikitPlugin: RCTEventEmitter {
192
218
  }
193
219
  }
194
220
 
195
-
196
221
  public override func supportedEvents() -> [String]! {
197
222
  return [
198
223
  CALL_STATE_CHANGED,
@@ -201,7 +226,8 @@ public class OmikitPlugin: RCTEventEmitter {
201
226
  REMOTE_VIDEO_READY,
202
227
  CLICK_MISSED_CALL,
203
228
  SWITCHBOARD_ANSWER,
204
- CALL_QUALITY
229
+ CALL_QUALITY,
230
+ AUDIO_CHANGE,
205
231
  ]
206
232
  }
207
233
  }
@@ -47,4 +47,15 @@ Object.keys(_omi_call_state).forEach(function (key) {
47
47
  }
48
48
  });
49
49
  });
50
+ var _omi_start_call_status = require("./omi_start_call_status");
51
+ Object.keys(_omi_start_call_status).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _omi_start_call_status[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _omi_start_call_status[key];
58
+ }
59
+ });
60
+ });
50
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_omikit","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_omi_local_camera","_omi_remote_camera","_omi_call_state"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,kBAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,kBAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,kBAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,kBAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,eAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,eAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,eAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,eAAA,CAAAP,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":["_omikit","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_omi_local_camera","_omi_remote_camera","_omi_call_state","_omi_start_call_status"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,kBAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,kBAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,kBAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,kBAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,eAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,eAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,eAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,eAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,sBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,sBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,sBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,sBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA"}