omikit-plugin 1.0.0 → 2.0.0

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 (47) hide show
  1. package/README.md +296 -66
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/omikitplugin/FLLocalCameraModule.kt +37 -0
  4. package/android/src/main/java/com/omikitplugin/FLLocalCameraView.kt +23 -0
  5. package/android/src/main/java/com/omikitplugin/FLRemoteCameraModule.kt +37 -0
  6. package/android/src/main/java/com/omikitplugin/FLRemoteCameraView.kt +23 -0
  7. package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +249 -85
  8. package/android/src/main/java/com/omikitplugin/OmikitPluginPackage.kt +21 -2
  9. package/android/src/main/java/com/omikitplugin/constants/constant.kt +23 -12
  10. package/ios/CallProcess/CallManager.swift +109 -71
  11. package/ios/Constant/Constant.swift +15 -10
  12. package/ios/OmikitPlugin.m +34 -2
  13. package/ios/OmikitPlugin.swift +69 -32
  14. package/ios/VideoCall/FLLocalCameraView.m +17 -0
  15. package/ios/VideoCall/FLLocalCameraView.swift +41 -80
  16. package/ios/VideoCall/FLRemoteCameraView.m +18 -0
  17. package/ios/VideoCall/FLRemoteCameraView.swift +39 -1
  18. package/lib/commonjs/index.js +32 -64
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/commonjs/omi_local_camera.js +15 -0
  21. package/lib/commonjs/omi_local_camera.js.map +1 -0
  22. package/lib/commonjs/omi_remote_camera.js +15 -0
  23. package/lib/commonjs/omi_remote_camera.js.map +1 -0
  24. package/lib/commonjs/omikit.js +98 -0
  25. package/lib/commonjs/omikit.js.map +1 -0
  26. package/lib/module/index.js +3 -51
  27. package/lib/module/index.js.map +1 -1
  28. package/lib/module/omi_local_camera.js +7 -0
  29. package/lib/module/omi_local_camera.js.map +1 -0
  30. package/lib/module/omi_remote_camera.js +7 -0
  31. package/lib/module/omi_remote_camera.js.map +1 -0
  32. package/lib/module/omikit.js +73 -0
  33. package/lib/module/omikit.js.map +1 -0
  34. package/lib/typescript/index.d.ts +3 -19
  35. package/lib/typescript/index.d.ts.map +1 -1
  36. package/lib/typescript/omi_local_camera.d.ts +5 -0
  37. package/lib/typescript/omi_local_camera.d.ts.map +1 -0
  38. package/lib/typescript/omi_remote_camera.d.ts +5 -0
  39. package/lib/typescript/omi_remote_camera.d.ts.map +1 -0
  40. package/lib/typescript/omikit.d.ts +26 -0
  41. package/lib/typescript/omikit.d.ts.map +1 -0
  42. package/omikit-plugin.podspec +1 -1
  43. package/package.json +1 -1
  44. package/src/index.tsx +3 -71
  45. package/src/omi_local_camera.tsx +11 -0
  46. package/src/omi_remote_camera.tsx +11 -0
  47. package/src/omikit.tsx +98 -0
@@ -16,8 +16,8 @@ class CallManager {
16
16
 
17
17
  static private var instance: CallManager? = nil // Instance
18
18
  private let omiLib = OMISIPLib.sharedInstance()
19
- var isSpeaker = false
20
19
  var videoManager: OMIVideoViewManager?
20
+ var isSpeaker = false
21
21
 
22
22
  /// Get instance
23
23
  static func shareInstance() -> CallManager {
@@ -41,15 +41,36 @@ class CallManager {
41
41
  }
42
42
  }
43
43
 
44
- func initEndpoint(params: [String: Any]){
45
- if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String {
46
- OmiClient.initWithUsername(userName, password: password, realm: realm)
44
+ private func requestPermission(isVideo: Bool) {
45
+ AVCaptureDevice.requestAccess(for: .audio) { _ in
46
+ print("request audio")
47
47
  }
48
- if let isVideoCall = params["isVideo"] as? Bool, isVideoCall == true {
49
- OmiClient.startOmiService(true)
50
- videoManager = OMIVideoViewManager.init()
48
+ if isVideo {
49
+ AVCaptureDevice.requestAccess(for: .video) { _ in
50
+ print("request video")
51
+ }
51
52
  }
52
- registerNotificationCenter()
53
+ }
54
+
55
+ func initWithApiKeyEndpoint(params: [String: Any]) -> Bool {
56
+ //request permission
57
+ var result = true
58
+ if let usrUuid = params["usrUuid"] as? String, let fullName = params["fullName"] as? String, let apiKey = params["apiKey"] as? String {
59
+ result = OmiClient.initWithUUID(usrUuid, fullName: fullName, apiKey: apiKey)
60
+ }
61
+ let isVideo = (params["isVideo"] as? Bool) ?? true
62
+ requestPermission(isVideo: isVideo)
63
+ return result
64
+ }
65
+
66
+
67
+ func initWithUserPasswordEndpoint(params: [String: Any]) -> Bool {
68
+ 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 {
69
+ OmiClient.initWithUsername(userName, password: password, realm: realm)
70
+ }
71
+ let isVideo = (params["isVideo"] as? Bool) ?? true
72
+ requestPermission(isVideo: isVideo)
73
+ return true
53
74
  }
54
75
 
55
76
  func registerNotificationCenter() {
@@ -68,15 +89,21 @@ class CallManager {
68
89
  )
69
90
  }
70
91
  }
71
-
92
+
72
93
  @objc func callDealloc(_ notification: NSNotification) {
73
94
  guard let userInfo = notification.userInfo,
74
95
  let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall else {
75
96
  return;
76
97
  }
77
98
  if (call.callState == .disconnected) {
78
- DispatchQueue.main.async {
79
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
99
+ DispatchQueue.main.async {[weak self] in
100
+ guard let self = self else { return }
101
+ if (self.videoManager != nil) {
102
+ self.videoManager = nil
103
+ }
104
+ DispatchQueue.main.async {
105
+ OmikitPlugin.instance.sendEvent(withName: CALL_END, body: [:])
106
+ }
80
107
  }
81
108
  }
82
109
  }
@@ -106,9 +133,13 @@ class CallManager {
106
133
  break
107
134
  case .confirmed:
108
135
  NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
109
- OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber])
110
- print(call.muted)
111
- OmikitPlugin.instance.sendOnMuteStatus()
136
+ if (videoManager == nil && call.isVideo) {
137
+ videoManager = OMIVideoViewManager.init()
138
+ }
139
+ isSpeaker = call.isVideo
140
+ OmikitPlugin.instance.sendEvent(withName: CALL_ESTABLISHED, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber])
141
+ OmikitPlugin.instance.sendMuteStatus()
142
+ OmikitPlugin.instance.sendSpeakerStatus()
112
143
  break
113
144
  case .disconnected:
114
145
  if (!call.connected) {
@@ -116,11 +147,14 @@ class CallManager {
116
147
  } else if (!call.userDidHangUp) {
117
148
  NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
118
149
  }
150
+ if (videoManager != nil) {
151
+ videoManager = nil
152
+ }
119
153
  print(call.uuid.uuidString)
120
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
154
+ OmikitPlugin.instance.sendEvent(withName: CALL_END, body: [:])
121
155
  break
122
156
  case .incoming:
123
- OmikitPlugin.instance.sendEvent(withName: incomingReceived, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber ?? ""])
157
+ OmikitPlugin.instance.sendEvent(withName: INCOMING_RECEIVED, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber ?? ""])
124
158
  break
125
159
  case .muted:
126
160
  print("muteddddddd")
@@ -135,23 +169,33 @@ class CallManager {
135
169
  }
136
170
 
137
171
  /// Start call
138
- func startCall(_ phoneNumber: String, isVideo: Bool) {
172
+ func startCall(_ phoneNumber: String, isVideo: Bool) -> Bool {
139
173
  if (isVideo) {
140
- OmiClient.startVideoCall(phoneNumber)
141
- return
174
+ return OmiClient.startVideoCall(phoneNumber)
175
+ }
176
+ return OmiClient.startCall(phoneNumber)
177
+ }
178
+
179
+ /// Start call
180
+ func startCallWithUuid(_ uuid: String, isVideo: Bool) -> Bool {
181
+ let phoneNumber = OmiClient.getPhone(uuid)
182
+ if let phone = phoneNumber {
183
+ if (isVideo) {
184
+ return OmiClient.startVideoCall(phone)
185
+ }
186
+ return OmiClient.startCall(phone)
142
187
  }
143
- OmiClient.startCall(phoneNumber)
188
+ return false
144
189
  }
145
190
 
146
191
  func endAvailableCall() {
147
192
  guard let call = getAvailableCall() else {
148
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
193
+ OmikitPlugin.instance.sendEvent(withName: CALL_END, body: [:])
149
194
  return
150
195
  }
151
196
  omiLib.callManager.end(call)
152
197
  }
153
198
 
154
-
155
199
  func endAllCalls() {
156
200
  omiLib.callManager.endAllCalls()
157
201
  }
@@ -173,7 +217,7 @@ class CallManager {
173
217
  /// Toogle mtue
174
218
  func toggleMute() {
175
219
  guard let call = getAvailableCall() else {
176
- return
220
+ return
177
221
  }
178
222
  try? call.toggleMute()
179
223
  }
@@ -188,32 +232,26 @@ class CallManager {
188
232
 
189
233
  /// Toogle speaker
190
234
  func toogleSpeaker() {
191
- do {
192
- if (!isSpeaker) {
193
- isSpeaker = true
194
- try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
195
-
196
- } else {
197
- isSpeaker = false
198
- try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
199
- }
200
- } catch (let error){
201
- NSLog("Error toogleSpeaker current call: \(error)")
202
-
235
+ if !isSpeaker {
236
+ try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
237
+ } else {
238
+ try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
203
239
  }
240
+ isSpeaker = !isSpeaker
241
+ OmikitPlugin.instance.sendSpeakerStatus()
204
242
  }
205
243
 
206
244
  func inputs() -> [[String: String]] {
207
- let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
208
- let results = inputs.map { item in
209
- return [
210
- "name": item.portName,
211
- "id": item.uid,
212
- ]
213
- }
214
- return results
245
+ let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
246
+ let results = inputs.map { item in
247
+ return [
248
+ "name": item.portName,
249
+ "id": item.uid,
250
+ ]
251
+ }
252
+ return results
215
253
  }
216
-
254
+
217
255
  func setInput(id: String) {
218
256
  let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
219
257
  if let newOutput = inputs.first(where: {$0.uid == id}) {
@@ -224,10 +262,10 @@ class CallManager {
224
262
  func outputs() -> [[String: String]] {
225
263
  let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
226
264
  var results = outputs.map { item in
227
- return [
228
- "name": item.portName,
229
- "id": item.uid,
230
- ]
265
+ return [
266
+ "name": item.portName,
267
+ "id": item.uid,
268
+ ]
231
269
  }
232
270
  let hasSpeaker = results.contains{ $0["name"] == "Speaker" }
233
271
  if (!hasSpeaker) {
@@ -277,29 +315,29 @@ class CallManager {
277
315
  }
278
316
  }
279
317
 
280
- // func getLocalPreviewView(callback: @escaping (UIView) -> Void) {
281
- // guard let videoManager = videoManager else { return }
282
- // videoManager.localView {previewView in
283
- // DispatchQueue.main.async {
284
- // if (previewView != nil) {
285
- // previewView!.contentMode = .scaleAspectFill
286
- // callback(previewView!)
287
- // }
288
- // }
289
- // }
290
- // }
291
- //
292
- // func getRemotePreviewView(callback: @escaping (UIView) -> Void) {
293
- // guard let videoManager = videoManager else { return }
294
- // videoManager.remoteView { previewView in
295
- // DispatchQueue.main.async {
296
- // if (previewView != nil) {
297
- // previewView!.contentMode = .scaleAspectFill
298
- // callback(previewView!)
299
- // }
300
- // }
301
- // }
302
- // }
318
+ func getLocalPreviewView(callback: @escaping (UIView) -> Void) {
319
+ guard let videoManager = videoManager else { return }
320
+ videoManager.localView {previewView in
321
+ DispatchQueue.main.async {
322
+ if (previewView != nil) {
323
+ previewView!.contentMode = .scaleAspectFill
324
+ callback(previewView!)
325
+ }
326
+ }
327
+ }
328
+ }
329
+
330
+ func getRemotePreviewView(callback: @escaping (UIView) -> Void) {
331
+ guard let videoManager = videoManager else { return }
332
+ videoManager.remoteView { previewView in
333
+ DispatchQueue.main.async {
334
+ if (previewView != nil) {
335
+ previewView!.contentMode = .scaleAspectFill
336
+ callback(previewView!)
337
+ }
338
+ }
339
+ }
340
+ }
303
341
  }
304
342
 
305
343
 
@@ -8,10 +8,12 @@
8
8
  import Foundation
9
9
 
10
10
 
11
- let INIT_CALL = "INIT_CALL"
11
+ let START_SERVICES = "START_SERVICES"
12
+ let CONFIG_NOTIFICATION = "CONFIG_NOTIFICATION"
13
+ let INIT_CALL_API_KEY = "INIT_CALL_API_KEY"
14
+ let INIT_CALL_USER_PASSWORD = "INIT_CALL_USER_PASSWORD"
12
15
  let UPDATE_TOKEN = "UPDATE_TOKEN"
13
16
  let START_CALL = "START_CALL"
14
- let JOIN_CALL = "JOIN_CALL"
15
17
  let END_CALL = "END_CALL"
16
18
  let TOGGLE_MUTE = "TOGGLE_MUTE"
17
19
  let TOGGLE_SPEAK = "TOGGLE_SPEAK"
@@ -22,15 +24,18 @@ let CAMERA_STATUS = "CAMERA_STATUS"
22
24
  let TOGGLE_VIDEO = "TOGGLE_VIDEO"
23
25
  let INPUTS = "INPUTS"
24
26
  let OUTPUTS = "OUTOUTS"
25
- let SETINPUT = "SET_INPUT"
26
- let SETOUTPUT = "SET_OUTPUT"
27
+ let SET_INPUT = "SET_INPUT"
28
+ let SET_OUTPUT = "SET_OUTPUT"
29
+ let JOIN_CALL = "JOIN_CALL"
30
+ let START_CALL_WITH_UUID = "START_CALL_WITH_UUID"
31
+ let LOG_OUT = "LOG_OUT"
27
32
 
28
33
  //LISTENER
29
- let onCallEstablished = "CALL_ESTABLISHED"
30
- let onCallEnd = "CALL_END"
31
- let incomingReceived = "INCOMING_RECEIVED"
32
- let onConnectionTimeout = "CONNECTION_TIMEOUT"
33
- let onSpeaker = "SPEAKER"
34
- let onMuted = "MUTED"
34
+ let CALL_ESTABLISHED = "CALL_ESTABLISHED"
35
+ let CALL_END = "CALL_END"
36
+ let INCOMING_RECEIVED = "INCOMING_RECEIVED"
37
+ let VIDEO = "VIDEO"
38
+ let SPEAKER = "SPEAKER"
39
+ let MUTED = "MUTED"
35
40
 
36
41
 
@@ -2,33 +2,65 @@
2
2
 
3
3
  @interface RCT_EXTERN_MODULE(OmikitPlugin, NSObject)
4
4
 
5
+ RCT_EXTERN_METHOD(startServices:
6
+ (RCTPromiseResolveBlock)resolve
7
+ withRejecter:(RCTPromiseRejectBlock)reject)
8
+
9
+ RCT_EXTERN_METHOD(configPushNotification:
10
+ (RCTPromiseResolveBlock)resolve
11
+ withRejecter:(RCTPromiseRejectBlock)reject)
12
+
5
13
  RCT_EXTERN_METHOD(getInitialCall:
6
14
  (RCTPromiseResolveBlock)resolve
7
15
  withRejecter:(RCTPromiseRejectBlock)reject)
8
- RCT_EXTERN_METHOD(initCall:(id)data
16
+
17
+ RCT_EXTERN_METHOD(initCallWithUserPassword:(id)data
9
18
  withResolver:(RCTPromiseResolveBlock)resolve
10
19
  withRejecter:(RCTPromiseRejectBlock)reject)
20
+
21
+ RCT_EXTERN_METHOD(initCallWithApiKey:(id)data
22
+ withResolver:(RCTPromiseResolveBlock)resolve
23
+ withRejecter:(RCTPromiseRejectBlock)reject)
24
+
11
25
  RCT_EXTERN_METHOD(updateToken:(id)data
12
26
  withResolver:(RCTPromiseResolveBlock)resolve
13
27
  withRejecter:(RCTPromiseRejectBlock)reject)
28
+
14
29
  RCT_EXTERN_METHOD(startCall:(id)data
15
30
  withResolver:(RCTPromiseResolveBlock)resolve
16
31
  withRejecter:(RCTPromiseRejectBlock)reject)
32
+
33
+ RCT_EXTERN_METHOD(startCallWithUuid:(id)data
34
+ withResolver:(RCTPromiseResolveBlock)resolve
35
+ withRejecter:(RCTPromiseRejectBlock)reject)
36
+
17
37
  RCT_EXTERN_METHOD(joinCall:
18
38
  (RCTPromiseResolveBlock)resolve
19
39
  withRejecter:(RCTPromiseRejectBlock)reject)
40
+
20
41
  RCT_EXTERN_METHOD(endCall:(RCTPromiseResolveBlock)resolve
21
42
  withRejecter:(RCTPromiseRejectBlock)reject)
43
+
22
44
  RCT_EXTERN_METHOD(toggleMute:
23
45
  (RCTPromiseResolveBlock)resolve
24
46
  withRejecter:(RCTPromiseRejectBlock)reject)
25
- RCT_EXTERN_METHOD(toggleSpeak:
47
+
48
+ RCT_EXTERN_METHOD(toggleSpeaker:
26
49
  (RCTPromiseResolveBlock)resolve
27
50
  withRejecter:(RCTPromiseRejectBlock)reject)
51
+
28
52
  RCT_EXTERN_METHOD(sendDTMF:(id)data
29
53
  withResolver: (RCTPromiseResolveBlock)resolve
30
54
  withRejecter:(RCTPromiseRejectBlock)reject)
31
55
 
56
+ RCT_EXTERN_METHOD(switchOmiCamera:
57
+ (RCTPromiseResolveBlock)resolve
58
+ withRejecter:(RCTPromiseRejectBlock)reject)
59
+
60
+ RCT_EXTERN_METHOD(toggleOmiVideo:
61
+ (RCTPromiseResolveBlock)resolve
62
+ withRejecter:(RCTPromiseRejectBlock)reject)
63
+
32
64
  + (BOOL)requiresMainQueueSetup
33
65
  {
34
66
  return YES;
@@ -12,16 +12,25 @@ class OmikitPlugin: RCTEventEmitter {
12
12
  OmikitPlugin.instance = self
13
13
  }
14
14
 
15
+ @objc(startServices:withRejecter:)
16
+ func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
17
+ CallManager.shareInstance().registerNotificationCenter()
18
+ resolve(true)
19
+ }
20
+
21
+ @objc(configPushNotification:withRejecter:)
22
+ func configPushNotification(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
23
+ resolve(true)
24
+ }
25
+
15
26
  @objc(getInitialCall:withRejecter:)
16
27
  func getInitialCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
17
28
  if let call = CallManager.shareInstance().getAvailableCall() {
18
- let callerNumber = call.callerNumber
19
- let status = call.lastStatus
20
- let muted = call.muted
21
29
  let data : [String: Any] = [
22
- "callerNumber" : callerNumber,
23
- "status": status,
24
- "muted": muted
30
+ "callerNumber" : call.callerNumber,
31
+ "status": call.lastStatus,
32
+ "muted": call.muted,
33
+ "speaker": call.speaker
25
34
  ]
26
35
  resolve(data)
27
36
  return
@@ -29,11 +38,19 @@ class OmikitPlugin: RCTEventEmitter {
29
38
  resolve(false)
30
39
  }
31
40
 
32
- @objc(initCall:withResolver:withRejecter:)
33
- func initCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
41
+ @objc(initCallWithUserPassword:withResolver:withRejecter:)
42
+ func initCallWithUserPassword(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
34
43
  if let dataOmi = data as? [String: Any] {
35
- CallManager.shareInstance().initEndpoint(params: dataOmi)
36
- resolve(true)
44
+ let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
45
+ resolve(result)
46
+ }
47
+ }
48
+
49
+ @objc(initCallWithApiKey:withResolver:withRejecter:)
50
+ func initCallWithApiKey(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
51
+ if let dataOmi = data as? [String: Any] {
52
+ let result = CallManager.shareInstance().initWithApiKeyEndpoint(params: dataOmi)
53
+ resolve(result)
37
54
  }
38
55
  }
39
56
 
@@ -50,9 +67,18 @@ class OmikitPlugin: RCTEventEmitter {
50
67
  if let dataOmi = data as? [String: Any] {
51
68
  let phoneNumber = dataOmi["phoneNumber"] as! String
52
69
  let isVideo = dataOmi["isVideo"] as? Bool
53
- CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo ?? false)
54
- sendOnMuteStatus()
55
- resolve(true)
70
+ let result = CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo ?? false)
71
+ resolve(result)
72
+ }
73
+ }
74
+
75
+ @objc(startCallWithUuid:withResolver:withRejecter:)
76
+ func startCallWithUuid(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
77
+ if let dataOmi = data as? [String: Any] {
78
+ let uuid = dataOmi["usrUuid"] as! String
79
+ let isVideo = dataOmi["isVideo"] as? Bool
80
+ let result = CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo ?? false)
81
+ resolve(result)
56
82
  }
57
83
  }
58
84
 
@@ -71,15 +97,15 @@ class OmikitPlugin: RCTEventEmitter {
71
97
  @objc(toggleMute:withRejecter:)
72
98
  func toggleMute(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
73
99
  CallManager.shareInstance().toggleMute()
74
- sendOnMuteStatus()
75
- resolve(true)
100
+ if let call = CallManager.shareInstance().getAvailableCall() {
101
+ resolve(call.muted)
102
+ }
76
103
  }
77
104
 
78
- @objc(toggleSpeak:withRejecter:)
79
- func toggleSpeak(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
80
- CallManager.shareInstance().toogleSpeaker()
81
- sendOnSpeakerStatus()
82
- resolve(true)
105
+ @objc(toggleSpeaker:withRejecter:)
106
+ func toggleSpeaker(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
107
+ CallManager.shareInstance().toogleSpeaker()
108
+ resolve(CallManager.shareInstance().isSpeaker)
83
109
  }
84
110
 
85
111
  @objc(sendDTMF:withResolver:withRejecter:)
@@ -90,26 +116,37 @@ class OmikitPlugin: RCTEventEmitter {
90
116
  }
91
117
  }
92
118
 
93
- func sendOnMuteStatus() {
119
+ @objc(switchOmiCamera:withRejecter:)
120
+ func switchOmiCamera(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
121
+ CallManager.shareInstance().switchCamera()
122
+ resolve(true)
123
+ }
124
+
125
+ @objc(toggleOmiVideo:withRejecter:)
126
+ func toggleOmiVideo(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
127
+ CallManager.shareInstance().toggleCamera()
128
+ resolve(true)
129
+ }
130
+
131
+ func sendMuteStatus() {
94
132
  if let call = CallManager.shareInstance().getAvailableCall() {
95
- if let isMuted = call.muted as? Bool {
96
- print("muteeeeed \(isMuted)")
97
- sendEvent(withName: onMuted, body: isMuted)
98
- }
133
+ sendEvent(withName: MUTED, body: call.muted)
99
134
  }
100
135
  }
101
136
 
102
- func sendOnSpeakerStatus() {
103
- sendEvent(withName: onSpeaker, body: CallManager.shareInstance().isSpeaker)
137
+ func sendSpeakerStatus() {
138
+ sendEvent(withName: SPEAKER, body: CallManager.shareInstance().isSpeaker)
139
+
104
140
  }
105
141
 
106
142
  override func supportedEvents() -> [String]! {
107
143
  return [
108
- incomingReceived,
109
- onCallEstablished,
110
- onCallEnd,
111
- onMuted,
112
- onSpeaker
144
+ INCOMING_RECEIVED,
145
+ CALL_ESTABLISHED,
146
+ CALL_END,
147
+ MUTED,
148
+ SPEAKER,
149
+ VIDEO
113
150
  ]
114
151
  }
115
152
  }
@@ -0,0 +1,17 @@
1
+ //
2
+ // FLLocalCameraView.m
3
+ // omikit-plugin
4
+ //
5
+ // Created by PRO 2019 16' on 03/04/2023.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTBridgeModule.h>
10
+ #import <React/RCTViewManager.h>
11
+
12
+
13
+ @interface RCT_EXTERN_MODULE(FLLocalCameraView, RCTViewManager)
14
+ RCT_EXTERN_METHOD(refresh:
15
+ (RCTPromiseResolveBlock)resolve
16
+ withRejecter:(RCTPromiseRejectBlock)reject)
17
+ @end
@@ -1,81 +1,42 @@
1
- ////
2
- //// LocalCameraView.swift
3
- //// omicall_flutter_plugin
4
- ////
5
- //// Created by PRO 2019 16' on 15/02/2023.
6
- ////
7
1
  //
8
- //import Foundation
9
- //import Flutter
10
- //import WebKit
11
- //import UIKit
12
- //import OmiKit
13
- //
14
- //class FLLocalCameraFactory: NSObject, FlutterPlatformViewFactory {
15
- // private var messenger: FlutterBinaryMessenger
16
- //
17
- // init(messenger: FlutterBinaryMessenger) {
18
- // self.messenger = messenger
19
- // super.init()
20
- // }
21
- //
22
- // func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
23
- // return FlutterStandardMessageCodec.sharedInstance()
24
- // }
25
- //
26
- // func create(
27
- // withFrame frame: CGRect,
28
- // viewIdentifier viewId: Int64,
29
- // arguments args: Any?
30
- // ) -> FlutterPlatformView {
31
- // return FLLocalCameraView(
32
- // frame: frame,
33
- // viewIdentifier: viewId,
34
- // arguments: args,
35
- // binaryMessenger: messenger
36
- // )
37
- // }
38
- //}
39
- //
40
- //class FLLocalCameraView: NSObject, FlutterPlatformView {
41
- // private var _view: OMIVideoPreviewView
42
- // private var _arg : [String : Any]?
43
- // private let methodChannel: FlutterMethodChannel?
44
- //
45
- // init(
46
- // frame: CGRect,
47
- // viewIdentifier viewId: Int64,
48
- // arguments args: Any?,
49
- // binaryMessenger messenger: FlutterBinaryMessenger?
50
- // ) {
51
- // _view = OMIVideoPreviewView.init()
52
- // _arg = args as? [String: Any]
53
- // methodChannel = FlutterMethodChannel(name: "local_camera_controller/\(viewId)", binaryMessenger: messenger!)
54
- // super.init()
55
- // methodChannel?.setMethodCallHandler(onMethodCall)
56
- // DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {[weak self] in
57
- // guard let self = self else { return }
58
- // self.setupViews()
59
- // })
60
- // }
61
- //
62
- // func onMethodCall(call: FlutterMethodCall, result: FlutterResult) {
63
- // switch(call.method){
64
- // case "switch":
65
- // break
66
- // default:
67
- // result(FlutterMethodNotImplemented)
68
- // }
69
- // }
70
- //
71
- // func view() -> UIView {
72
- // return _view
73
- // }
74
- //
75
- // func setupViews() {
76
- // CallManager.shareInstance().getLocalPreviewView(callback: {[weak self] previewView in
77
- // guard let self = self else { return }
78
- // self._view.setView(previewView)
79
- // })
80
- // }
81
- //}
2
+ // LocalCameraView.swift
3
+ // omicall_flutter_plugin
4
+ //
5
+ // Created by PRO 2019 16' on 15/02/2023.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+ import UIKit
11
+ import OmiKit
12
+
13
+ @objc(FLLocalCameraView)
14
+ class FLLocalCameraView: RCTViewManager {
15
+
16
+ private var _view: OMIVideoPreviewView
17
+
18
+ override init() {
19
+ _view = OMIVideoPreviewView.init()
20
+ super.init()
21
+ }
22
+
23
+ override class func requiresMainQueueSetup() -> Bool {
24
+ return true
25
+ }
26
+
27
+ override func view() -> UIView! {
28
+ return _view
29
+ }
30
+
31
+ @objc(refresh:withRejecter:)
32
+ func refresh(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
33
+ setupViews()
34
+ }
35
+
36
+ func setupViews() {
37
+ CallManager.shareInstance().getLocalPreviewView(callback: {[weak self] previewView in
38
+ guard let self = self else { return }
39
+ self._view.setView(previewView)
40
+ })
41
+ }
42
+ }