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.
- package/README.md +296 -66
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/omikitplugin/FLLocalCameraModule.kt +37 -0
- package/android/src/main/java/com/omikitplugin/FLLocalCameraView.kt +23 -0
- package/android/src/main/java/com/omikitplugin/FLRemoteCameraModule.kt +37 -0
- package/android/src/main/java/com/omikitplugin/FLRemoteCameraView.kt +23 -0
- package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +249 -85
- package/android/src/main/java/com/omikitplugin/OmikitPluginPackage.kt +21 -2
- package/android/src/main/java/com/omikitplugin/constants/constant.kt +23 -12
- package/ios/CallProcess/CallManager.swift +109 -71
- package/ios/Constant/Constant.swift +15 -10
- package/ios/OmikitPlugin.m +34 -2
- package/ios/OmikitPlugin.swift +69 -32
- package/ios/VideoCall/FLLocalCameraView.m +17 -0
- package/ios/VideoCall/FLLocalCameraView.swift +41 -80
- package/ios/VideoCall/FLRemoteCameraView.m +18 -0
- package/ios/VideoCall/FLRemoteCameraView.swift +39 -1
- package/lib/commonjs/index.js +32 -64
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/omi_local_camera.js +15 -0
- package/lib/commonjs/omi_local_camera.js.map +1 -0
- package/lib/commonjs/omi_remote_camera.js +15 -0
- package/lib/commonjs/omi_remote_camera.js.map +1 -0
- package/lib/commonjs/omikit.js +98 -0
- package/lib/commonjs/omikit.js.map +1 -0
- package/lib/module/index.js +3 -51
- package/lib/module/index.js.map +1 -1
- package/lib/module/omi_local_camera.js +7 -0
- package/lib/module/omi_local_camera.js.map +1 -0
- package/lib/module/omi_remote_camera.js +7 -0
- package/lib/module/omi_remote_camera.js.map +1 -0
- package/lib/module/omikit.js +73 -0
- package/lib/module/omikit.js.map +1 -0
- package/lib/typescript/index.d.ts +3 -19
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/omi_local_camera.d.ts +5 -0
- package/lib/typescript/omi_local_camera.d.ts.map +1 -0
- package/lib/typescript/omi_remote_camera.d.ts +5 -0
- package/lib/typescript/omi_remote_camera.d.ts.map +1 -0
- package/lib/typescript/omikit.d.ts +26 -0
- package/lib/typescript/omikit.d.ts.map +1 -0
- package/omikit-plugin.podspec +1 -1
- package/package.json +1 -1
- package/src/index.tsx +3 -71
- package/src/omi_local_camera.tsx +11 -0
- package/src/omi_remote_camera.tsx +11 -0
- 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
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
private func requestPermission(isVideo: Bool) {
|
|
45
|
+
AVCaptureDevice.requestAccess(for: .audio) { _ in
|
|
46
|
+
print("request audio")
|
|
47
47
|
}
|
|
48
|
-
if
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
if isVideo {
|
|
49
|
+
AVCaptureDevice.requestAccess(for: .video) { _ in
|
|
50
|
+
print("request video")
|
|
51
|
+
}
|
|
51
52
|
}
|
|
52
|
-
|
|
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
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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:
|
|
154
|
+
OmikitPlugin.instance.sendEvent(withName: CALL_END, body: [:])
|
|
121
155
|
break
|
|
122
156
|
case .incoming:
|
|
123
|
-
OmikitPlugin.instance.sendEvent(withName:
|
|
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
|
-
|
|
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
|
-
|
|
188
|
+
return false
|
|
144
189
|
}
|
|
145
190
|
|
|
146
191
|
func endAvailableCall() {
|
|
147
192
|
guard let call = getAvailableCall() else {
|
|
148
|
-
OmikitPlugin.instance.sendEvent(withName:
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
|
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
|
|
26
|
-
let
|
|
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
|
|
30
|
-
let
|
|
31
|
-
let
|
|
32
|
-
let
|
|
33
|
-
let
|
|
34
|
-
let
|
|
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
|
|
package/ios/OmikitPlugin.m
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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;
|
package/ios/OmikitPlugin.swift
CHANGED
|
@@ -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":
|
|
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(
|
|
33
|
-
func
|
|
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().
|
|
36
|
-
resolve(
|
|
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
|
-
|
|
55
|
-
|
|
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
|
-
|
|
75
|
-
|
|
100
|
+
if let call = CallManager.shareInstance().getAvailableCall() {
|
|
101
|
+
resolve(call.muted)
|
|
102
|
+
}
|
|
76
103
|
}
|
|
77
104
|
|
|
78
|
-
@objc(
|
|
79
|
-
func
|
|
80
|
-
CallManager.shareInstance().toogleSpeaker()
|
|
81
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
103
|
-
sendEvent(withName:
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
+
}
|