omikit-plugin 4.0.2 → 4.1.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.
- package/README.md +654 -37
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/omikitplugin/OmiLocalCameraView.kt +94 -0
- package/android/src/main/java/com/omikitplugin/OmiRemoteCameraView.kt +117 -0
- package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +24 -17
- package/android/src/main/java/com/omikitplugin/OmikitPluginPackage.kt +11 -8
- package/ios/CallProcess/CallManager.swift +99 -29
- package/ios/Library/OmikitPlugin.m +18 -0
- package/ios/Library/OmikitPlugin.swift +233 -1
- package/ios/OmikitPlugin-Bridging-Header.h +1 -0
- package/ios/OmikitPlugin.xcodeproj/project.pbxproj +4 -4
- package/ios/VideoCall/OmiLocalCameraViewBridge.m +14 -0
- package/ios/VideoCall/OmiLocalCameraViewManager.swift +41 -0
- package/ios/VideoCall/OmiRemoteCameraViewBridge.m +14 -0
- package/ios/VideoCall/OmiRemoteCameraViewManager.swift +40 -0
- package/lib/commonjs/NativeOmikitPlugin.js +2 -1
- package/lib/commonjs/NativeOmikitPlugin.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/omi_audio_type.js +5 -7
- package/lib/commonjs/omi_audio_type.js.map +1 -1
- package/lib/commonjs/omi_call_state.js +5 -3
- package/lib/commonjs/omi_call_state.js.map +1 -1
- package/lib/commonjs/omi_local_camera.js +19 -17
- package/lib/commonjs/omi_local_camera.js.map +1 -1
- package/lib/commonjs/omi_remote_camera.js +20 -17
- package/lib/commonjs/omi_remote_camera.js.map +1 -1
- package/lib/commonjs/omi_start_call_status.js +5 -24
- package/lib/commonjs/omi_start_call_status.js.map +1 -1
- package/lib/commonjs/omikit.js +56 -3
- package/lib/commonjs/omikit.js.map +1 -1
- package/lib/commonjs/types/index.d.js.map +1 -1
- package/lib/module/NativeOmikitPlugin.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/omi_audio_type.js +4 -7
- package/lib/module/omi_audio_type.js.map +1 -1
- package/lib/module/omi_call_state.js +4 -3
- package/lib/module/omi_call_state.js.map +1 -1
- package/lib/module/omi_local_camera.js +19 -18
- package/lib/module/omi_local_camera.js.map +1 -1
- package/lib/module/omi_remote_camera.js +20 -18
- package/lib/module/omi_remote_camera.js.map +1 -1
- package/lib/module/omi_start_call_status.js +4 -24
- package/lib/module/omi_start_call_status.js.map +1 -1
- package/lib/module/omikit.js +49 -1
- package/lib/module/omikit.js.map +1 -1
- package/lib/module/types/index.d.js.map +1 -1
- package/omikit-plugin.podspec +1 -1
- package/package.json +2 -11
- package/react-native.config.js +14 -0
- package/src/NativeOmikitPlugin.ts +1 -0
- package/src/omi_call_state.tsx +1 -0
- package/src/omi_local_camera.tsx +15 -19
- package/src/omi_remote_camera.tsx +16 -19
- package/src/omikit.tsx +63 -0
- package/src/types/index.d.ts +344 -62
- package/android/src/main/java/com/omikitplugin/FLLocalCameraModule.kt +0 -34
- package/android/src/main/java/com/omikitplugin/FLLocalCameraView.kt +0 -44
- package/android/src/main/java/com/omikitplugin/FLRemoteCameraModule.kt +0 -37
- package/android/src/main/java/com/omikitplugin/FLRemoteCameraView.kt +0 -23
- package/ios/VideoCall/FLLocalCameraView.m +0 -17
- package/ios/VideoCall/FLLocalCameraView.swift +0 -44
- package/ios/VideoCall/FLRemoteCameraView.m +0 -18
- package/ios/VideoCall/FLRemoteCameraView.swift +0 -124
|
@@ -92,7 +92,6 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
92
92
|
reject("INVALID_DATA", "Expected a dictionary with user credentials.", nil)
|
|
93
93
|
return
|
|
94
94
|
}
|
|
95
|
-
// ✅ Bước 2: Gọi initWithUserPasswordEndpoint() và kiểm tra kết quả
|
|
96
95
|
let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
|
|
97
96
|
if result {
|
|
98
97
|
resolve(true)
|
|
@@ -203,6 +202,170 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
203
202
|
}
|
|
204
203
|
|
|
205
204
|
|
|
205
|
+
// Configure camera view style (iOS Fabric mode — native window rendering)
|
|
206
|
+
// target: "local" or "remote"
|
|
207
|
+
@objc(setCameraConfig:resolver:rejecter:)
|
|
208
|
+
func setCameraConfig(_ data: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
209
|
+
let target = data["target"] as? String ?? "local"
|
|
210
|
+
|
|
211
|
+
DispatchQueue.main.async {
|
|
212
|
+
let callManager = CallManager.shareInstance()
|
|
213
|
+
let view: UIView?
|
|
214
|
+
if target == "remote" {
|
|
215
|
+
view = callManager.remoteContainerView
|
|
216
|
+
} else {
|
|
217
|
+
view = callManager.localContainerView
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
guard let targetView = view else {
|
|
221
|
+
resolve(false)
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Frame: x, y, width, height
|
|
226
|
+
if let x = data["x"] as? CGFloat,
|
|
227
|
+
let y = data["y"] as? CGFloat,
|
|
228
|
+
let width = data["width"] as? CGFloat,
|
|
229
|
+
let height = data["height"] as? CGFloat {
|
|
230
|
+
targetView.frame = CGRect(x: x, y: y, width: width, height: height)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Border radius
|
|
234
|
+
if let borderRadius = data["borderRadius"] as? CGFloat {
|
|
235
|
+
targetView.layer.cornerRadius = borderRadius
|
|
236
|
+
targetView.clipsToBounds = true
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Border width + color
|
|
240
|
+
if let borderWidth = data["borderWidth"] as? CGFloat {
|
|
241
|
+
targetView.layer.borderWidth = borderWidth
|
|
242
|
+
}
|
|
243
|
+
if let borderColor = data["borderColor"] as? String {
|
|
244
|
+
targetView.layer.borderColor = Self.parseColor(borderColor).cgColor
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Background color
|
|
248
|
+
if let bgColor = data["backgroundColor"] as? String {
|
|
249
|
+
targetView.backgroundColor = Self.parseColor(bgColor)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Opacity
|
|
253
|
+
if let opacity = data["opacity"] as? CGFloat {
|
|
254
|
+
targetView.alpha = opacity
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Hidden
|
|
258
|
+
if let hidden = data["hidden"] as? Bool {
|
|
259
|
+
targetView.isHidden = hidden
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Scale mode (contentMode for video sublayers)
|
|
263
|
+
// "fill" = aspect fill, "fit" = aspect fit, "stretch" = scale to fill
|
|
264
|
+
if let scaleMode = data["scaleMode"] as? String {
|
|
265
|
+
let mode: UIView.ContentMode
|
|
266
|
+
switch scaleMode {
|
|
267
|
+
case "fit":
|
|
268
|
+
mode = .scaleAspectFit
|
|
269
|
+
case "stretch":
|
|
270
|
+
mode = .scaleToFill
|
|
271
|
+
default: // "fill"
|
|
272
|
+
mode = .scaleAspectFill
|
|
273
|
+
}
|
|
274
|
+
targetView.contentMode = mode
|
|
275
|
+
// Apply to all sublayers/subviews (Metal/GL rendering layers)
|
|
276
|
+
for subview in targetView.subviews {
|
|
277
|
+
subview.contentMode = mode
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
resolve(true)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Parse hex color string (#RRGGBB or #RRGGBBAA) to UIColor
|
|
286
|
+
private static func parseColor(_ hex: String) -> UIColor {
|
|
287
|
+
var hexStr = hex.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
288
|
+
if hexStr.hasPrefix("#") { hexStr.removeFirst() }
|
|
289
|
+
var rgbValue: UInt64 = 0
|
|
290
|
+
Scanner(string: hexStr).scanHexInt64(&rgbValue)
|
|
291
|
+
if hexStr.count == 8 {
|
|
292
|
+
return UIColor(
|
|
293
|
+
red: CGFloat((rgbValue >> 24) & 0xFF) / 255.0,
|
|
294
|
+
green: CGFloat((rgbValue >> 16) & 0xFF) / 255.0,
|
|
295
|
+
blue: CGFloat((rgbValue >> 8) & 0xFF) / 255.0,
|
|
296
|
+
alpha: CGFloat(rgbValue & 0xFF) / 255.0
|
|
297
|
+
)
|
|
298
|
+
}
|
|
299
|
+
return UIColor(
|
|
300
|
+
red: CGFloat((rgbValue >> 16) & 0xFF) / 255.0,
|
|
301
|
+
green: CGFloat((rgbValue >> 8) & 0xFF) / 255.0,
|
|
302
|
+
blue: CGFloat(rgbValue & 0xFF) / 255.0,
|
|
303
|
+
alpha: 1.0
|
|
304
|
+
)
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Create video containers and add to window — called from JS when video call screen mounts.
|
|
308
|
+
// On Fabric, RCTViewManager.view() is NOT called, so we create containers here.
|
|
309
|
+
// Remote covers top portion of screen, local is PiP. User can adjust via setCameraConfig().
|
|
310
|
+
@objc(setupVideoContainers:rejecter:)
|
|
311
|
+
func setupVideoContainers(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
312
|
+
NSLog("📹 [OmikitPlugin] setupVideoContainers: CALLED from JS")
|
|
313
|
+
DispatchQueue.main.async {
|
|
314
|
+
NSLog("📹 [OmikitPlugin] setupVideoContainers: on main thread")
|
|
315
|
+
let manager = CallManager.shareInstance()
|
|
316
|
+
|
|
317
|
+
guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else {
|
|
318
|
+
resolve(false)
|
|
319
|
+
return
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// Create remote container
|
|
323
|
+
if manager.remoteContainerView == nil {
|
|
324
|
+
let remote = UIView()
|
|
325
|
+
remote.backgroundColor = .black
|
|
326
|
+
remote.clipsToBounds = true
|
|
327
|
+
manager.remoteContainerView = remote
|
|
328
|
+
}
|
|
329
|
+
// Create local container
|
|
330
|
+
if manager.localContainerView == nil {
|
|
331
|
+
let local = UIView()
|
|
332
|
+
local.backgroundColor = UIColor(red: 0.118, green: 0.192, blue: 0.314, alpha: 1.0)
|
|
333
|
+
local.clipsToBounds = true
|
|
334
|
+
local.layer.cornerRadius = 12
|
|
335
|
+
manager.localContainerView = local
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
guard let remote = manager.remoteContainerView,
|
|
339
|
+
let local = manager.localContainerView else {
|
|
340
|
+
resolve(false)
|
|
341
|
+
return
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Add to window if not already
|
|
345
|
+
if remote.superview == nil {
|
|
346
|
+
let controlsHeight: CGFloat = 200
|
|
347
|
+
remote.frame = CGRect(x: 0, y: 0, width: window.bounds.width, height: window.bounds.height - controlsHeight)
|
|
348
|
+
remote.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]
|
|
349
|
+
remote.isUserInteractionEnabled = false
|
|
350
|
+
window.addSubview(remote)
|
|
351
|
+
NSLog("📹 [OmikitPlugin] setupVideoContainers: added remote to window")
|
|
352
|
+
}
|
|
353
|
+
if local.superview == nil {
|
|
354
|
+
let pipW: CGFloat = 120
|
|
355
|
+
let pipH: CGFloat = 160
|
|
356
|
+
local.frame = CGRect(x: window.bounds.width - pipW - 16, y: 56, width: pipW, height: pipH)
|
|
357
|
+
local.autoresizingMask = [.flexibleLeftMargin, .flexibleBottomMargin]
|
|
358
|
+
local.isUserInteractionEnabled = false
|
|
359
|
+
window.addSubview(local)
|
|
360
|
+
NSLog("📹 [OmikitPlugin] setupVideoContainers: added local to window")
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Trigger SDK video setup
|
|
364
|
+
manager.setupVideo()
|
|
365
|
+
resolve(true)
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
206
369
|
@objc(switchOmiCamera:rejecter:)
|
|
207
370
|
func switchOmiCamera(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
208
371
|
CallManager.shareInstance().switchCamera()
|
|
@@ -228,6 +391,75 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
228
391
|
CallManager.shareInstance().registerVideoEvent()
|
|
229
392
|
resolve(true)
|
|
230
393
|
}
|
|
394
|
+
|
|
395
|
+
/// Find a UIView by nativeID in the view hierarchy
|
|
396
|
+
private func findViewByNativeID(_ nativeID: String, in root: UIView?) -> UIView? {
|
|
397
|
+
guard let root = root else { return nil }
|
|
398
|
+
if root.accessibilityIdentifier == nativeID {
|
|
399
|
+
return root
|
|
400
|
+
}
|
|
401
|
+
for subview in root.subviews {
|
|
402
|
+
if let found = findViewByNativeID(nativeID, in: subview) {
|
|
403
|
+
return found
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return nil
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
@objc(attachRemoteView:resolver:rejecter:)
|
|
410
|
+
func attachRemoteView(_ nativeID: String, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
411
|
+
DispatchQueue.main.async {
|
|
412
|
+
let manager = CallManager.shareInstance()
|
|
413
|
+
guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
|
|
414
|
+
let targetView = self.findViewByNativeID(nativeID, in: window) else {
|
|
415
|
+
NSLog("📹 [OmikitPlugin] attachRemoteView: view with nativeID=\(nativeID) not found")
|
|
416
|
+
resolve(false)
|
|
417
|
+
return
|
|
418
|
+
}
|
|
419
|
+
let container = manager.remoteContainerView ?? {
|
|
420
|
+
let v = UIView()
|
|
421
|
+
v.backgroundColor = .black
|
|
422
|
+
v.clipsToBounds = true
|
|
423
|
+
manager.remoteContainerView = v
|
|
424
|
+
return v
|
|
425
|
+
}()
|
|
426
|
+
container.removeFromSuperview()
|
|
427
|
+
container.frame = targetView.bounds
|
|
428
|
+
container.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
429
|
+
targetView.addSubview(container)
|
|
430
|
+
NSLog("📹 [OmikitPlugin] Attached remote container to view nativeID=\(nativeID)")
|
|
431
|
+
manager.setupVideo()
|
|
432
|
+
resolve(true)
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
@objc(attachLocalView:resolver:rejecter:)
|
|
437
|
+
func attachLocalView(_ nativeID: String, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
438
|
+
DispatchQueue.main.async {
|
|
439
|
+
let manager = CallManager.shareInstance()
|
|
440
|
+
guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
|
|
441
|
+
let targetView = self.findViewByNativeID(nativeID, in: window) else {
|
|
442
|
+
NSLog("📹 [OmikitPlugin] attachLocalView: view with nativeID=\(nativeID) not found")
|
|
443
|
+
resolve(false)
|
|
444
|
+
return
|
|
445
|
+
}
|
|
446
|
+
let container = manager.localContainerView ?? {
|
|
447
|
+
let v = UIView()
|
|
448
|
+
v.backgroundColor = UIColor(red: 0.118, green: 0.192, blue: 0.314, alpha: 1.0)
|
|
449
|
+
v.clipsToBounds = true
|
|
450
|
+
v.layer.cornerRadius = 12
|
|
451
|
+
manager.localContainerView = v
|
|
452
|
+
return v
|
|
453
|
+
}()
|
|
454
|
+
container.removeFromSuperview()
|
|
455
|
+
container.frame = targetView.bounds
|
|
456
|
+
container.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
457
|
+
targetView.addSubview(container)
|
|
458
|
+
NSLog("📹 [OmikitPlugin] Attached local container to view nativeID=\(nativeID)")
|
|
459
|
+
manager.setupVideo()
|
|
460
|
+
resolve(true)
|
|
461
|
+
}
|
|
462
|
+
}
|
|
231
463
|
|
|
232
464
|
@objc(removeVideoEvent:rejecter:)
|
|
233
465
|
func removeVideoEvent(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
C8FBCFCE29A5F49600AA4A22 /* CallManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallManager.swift; sourceTree = "<group>"; };
|
|
31
31
|
C8FBCFCF29A5F49600AA4A22 /* StringUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringUtils.swift; sourceTree = "<group>"; };
|
|
32
32
|
C8FBCFD029A5F49600AA4A22 /* NSUserActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSUserActivity.swift; sourceTree = "<group>"; };
|
|
33
|
-
C8FBCFD229A5F49600AA4A22 /*
|
|
34
|
-
C8FBCFD329A5F49600AA4A22 /*
|
|
33
|
+
C8FBCFD229A5F49600AA4A22 /* OmiLocalCameraViewManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OmiLocalCameraViewManager.swift; sourceTree = "<group>"; };
|
|
34
|
+
C8FBCFD329A5F49600AA4A22 /* OmiRemoteCameraViewManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OmiRemoteCameraViewManager.swift; sourceTree = "<group>"; };
|
|
35
35
|
C8FBCFD529A5F49600AA4A22 /* Constant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constant.swift; sourceTree = "<group>"; };
|
|
36
36
|
F4FF95D5245B92E700C19C63 /* OmikitPlugin-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OmikitPlugin-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
37
37
|
F4FF95D6245B92E800C19C63 /* OmikitPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OmikitPlugin.swift; sourceTree = "<group>"; };
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
C8FBCFD129A5F49600AA4A22 /* VideoCall */ = {
|
|
84
84
|
isa = PBXGroup;
|
|
85
85
|
children = (
|
|
86
|
-
C8FBCFD229A5F49600AA4A22 /*
|
|
87
|
-
C8FBCFD329A5F49600AA4A22 /*
|
|
86
|
+
C8FBCFD229A5F49600AA4A22 /* OmiLocalCameraViewManager.swift */,
|
|
87
|
+
C8FBCFD329A5F49600AA4A22 /* OmiRemoteCameraViewManager.swift */,
|
|
88
88
|
);
|
|
89
89
|
path = VideoCall;
|
|
90
90
|
sourceTree = "<group>";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//
|
|
2
|
+
// OmiLocalCameraViewBridge.m
|
|
3
|
+
// omikit-plugin
|
|
4
|
+
//
|
|
5
|
+
// Bridge for OmiLocalCameraView — exposes Swift ViewManager to ObjC runtime.
|
|
6
|
+
// RCT_EXTERN_MODULE is REQUIRED to prevent linker from stripping Swift symbols.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <Foundation/Foundation.h>
|
|
10
|
+
#import <React/RCTBridgeModule.h>
|
|
11
|
+
#import <React/RCTViewManager.h>
|
|
12
|
+
|
|
13
|
+
@interface RCT_EXTERN_MODULE(OmiLocalCameraView, RCTViewManager)
|
|
14
|
+
@end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//
|
|
2
|
+
// OmiLocalCameraViewManager.swift
|
|
3
|
+
// omikit-plugin
|
|
4
|
+
//
|
|
5
|
+
// Plain UIView container for OMIVideoCallManager.
|
|
6
|
+
// SDK creates and manages camera preview subview internally.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import React
|
|
11
|
+
import UIKit
|
|
12
|
+
import OmiKit
|
|
13
|
+
|
|
14
|
+
@objc(OmiLocalCameraView)
|
|
15
|
+
class OmiLocalCameraViewManager: RCTViewManager {
|
|
16
|
+
|
|
17
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
18
|
+
return true
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override func view() -> UIView! {
|
|
22
|
+
// Create fresh container each time and register with CallManager
|
|
23
|
+
let container = UIView()
|
|
24
|
+
container.backgroundColor = UIColor(red: 0.118, green: 0.192, blue: 0.314, alpha: 1.0)
|
|
25
|
+
container.clipsToBounds = true
|
|
26
|
+
container.layer.cornerRadius = 12
|
|
27
|
+
NSLog("📹 [OmiLocalCameraViewManager] view() called — creating container")
|
|
28
|
+
CallManager.shareInstance().localContainerView = container
|
|
29
|
+
return container
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@objc(refresh:withRejecter:)
|
|
33
|
+
func refresh(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
34
|
+
// With new SDK API, refresh is handled by SDK automatically
|
|
35
|
+
// prepareForVideoDisplay handles local camera restart if needed
|
|
36
|
+
DispatchQueue.main.async {
|
|
37
|
+
OMIVideoCallManager.shared().prepareForVideoDisplay()
|
|
38
|
+
}
|
|
39
|
+
resolve(true)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//
|
|
2
|
+
// OmiRemoteCameraViewBridge.m
|
|
3
|
+
// omikit-plugin
|
|
4
|
+
//
|
|
5
|
+
// Bridge for OmiRemoteCameraView — exposes Swift ViewManager to ObjC runtime.
|
|
6
|
+
// RCT_EXTERN_MODULE is REQUIRED to prevent linker from stripping Swift symbols.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <Foundation/Foundation.h>
|
|
10
|
+
#import <React/RCTBridgeModule.h>
|
|
11
|
+
#import <React/RCTViewManager.h>
|
|
12
|
+
|
|
13
|
+
@interface RCT_EXTERN_MODULE(OmiRemoteCameraView, RCTViewManager)
|
|
14
|
+
@end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//
|
|
2
|
+
// OmiRemoteCameraViewManager.swift
|
|
3
|
+
// omikit-plugin
|
|
4
|
+
//
|
|
5
|
+
// Plain UIView container for OMIVideoCallManager.
|
|
6
|
+
// SDK creates and manages Metal (OMIVideoPreviewView) subview internally.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import React
|
|
11
|
+
import UIKit
|
|
12
|
+
import OmiKit
|
|
13
|
+
|
|
14
|
+
@objc(OmiRemoteCameraView)
|
|
15
|
+
class OmiRemoteCameraViewManager: RCTViewManager {
|
|
16
|
+
|
|
17
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
18
|
+
return true
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override func view() -> UIView! {
|
|
22
|
+
// Create fresh container each time and register with CallManager
|
|
23
|
+
let container = UIView()
|
|
24
|
+
container.backgroundColor = .black
|
|
25
|
+
container.clipsToBounds = true
|
|
26
|
+
NSLog("📹 [OmiRemoteCameraViewManager] view() called — creating container")
|
|
27
|
+
CallManager.shareInstance().remoteContainerView = container
|
|
28
|
+
return container
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@objc(refresh:withRejecter:)
|
|
32
|
+
func refresh(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
33
|
+
// With new SDK API, refresh just calls prepareForVideoDisplay
|
|
34
|
+
// SDK handles reconnecting Metal view to container automatically
|
|
35
|
+
DispatchQueue.main.async {
|
|
36
|
+
OMIVideoCallManager.shared().prepareForVideoDisplay()
|
|
37
|
+
}
|
|
38
|
+
resolve(true)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -5,5 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
|
-
var _default =
|
|
8
|
+
var _default = _reactNative.TurboModuleRegistry.get('OmikitPlugin');
|
|
9
|
+
exports.default = _default;
|
|
9
10
|
//# sourceMappingURL=NativeOmikitPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_default","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","get","exports","default"],"sourceRoot":"../../src","sources":["NativeOmikitPlugin.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GA+JpCC,gCAAmB,CAACC,GAAG,CAAO,cAAc,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
|
|
@@ -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","_omi_start_call_status","_omi_audio_type"],"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;AACA,IAAAS,eAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,eAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,eAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,eAAA,CAAAT,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","_omi_audio_type"],"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;AACA,IAAAS,eAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,eAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,eAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,eAAA,CAAAT,GAAA;IAAA;EAAA;AAAA"}
|
|
@@ -7,14 +7,12 @@ exports.OmiAudioType = void 0;
|
|
|
7
7
|
/**
|
|
8
8
|
* Audio output types for setAudio()
|
|
9
9
|
*/
|
|
10
|
-
let OmiAudioType
|
|
10
|
+
let OmiAudioType; // Wired headphones
|
|
11
|
+
exports.OmiAudioType = OmiAudioType;
|
|
12
|
+
(function (OmiAudioType) {
|
|
11
13
|
OmiAudioType[OmiAudioType["receiver"] = 0] = "receiver";
|
|
12
|
-
// Phone receiver (earpiece)
|
|
13
14
|
OmiAudioType[OmiAudioType["speaker"] = 1] = "speaker";
|
|
14
|
-
// Phone speaker
|
|
15
15
|
OmiAudioType[OmiAudioType["bluetooth"] = 2] = "bluetooth";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return OmiAudioType;
|
|
19
|
-
}({});
|
|
16
|
+
OmiAudioType[OmiAudioType["headphones"] = 3] = "headphones";
|
|
17
|
+
})(OmiAudioType || (exports.OmiAudioType = OmiAudioType = {}));
|
|
20
18
|
//# sourceMappingURL=omi_audio_type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OmiAudioType","exports"],"sourceRoot":"../../src","sources":["omi_audio_type.tsx"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAGYA,YAAY,
|
|
1
|
+
{"version":3,"names":["OmiAudioType","exports"],"sourceRoot":"../../src","sources":["omi_audio_type.tsx"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAGYA,YAAY,EAIJ;AAAAC,OAAA,CAAAD,YAAA,GAAAA,YAAA;AAAA,WAJRA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;AAAA,GAAZA,YAAY,KAAAC,OAAA,CAAAD,YAAA,GAAZA,YAAY"}
|
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.OmiCallState = void 0;
|
|
7
|
-
let OmiCallState
|
|
7
|
+
let OmiCallState;
|
|
8
|
+
exports.OmiCallState = OmiCallState;
|
|
9
|
+
(function (OmiCallState) {
|
|
8
10
|
OmiCallState[OmiCallState["unknown"] = 0] = "unknown";
|
|
9
11
|
OmiCallState[OmiCallState["calling"] = 1] = "calling";
|
|
10
12
|
OmiCallState[OmiCallState["incoming"] = 2] = "incoming";
|
|
@@ -13,6 +15,6 @@ let OmiCallState = exports.OmiCallState = /*#__PURE__*/function (OmiCallState) {
|
|
|
13
15
|
OmiCallState[OmiCallState["confirmed"] = 5] = "confirmed";
|
|
14
16
|
OmiCallState[OmiCallState["disconnected"] = 6] = "disconnected";
|
|
15
17
|
OmiCallState[OmiCallState["hold"] = 7] = "hold";
|
|
16
|
-
|
|
17
|
-
}({});
|
|
18
|
+
OmiCallState[OmiCallState["disconnecting"] = 12] = "disconnecting";
|
|
19
|
+
})(OmiCallState || (exports.OmiCallState = OmiCallState = {}));
|
|
18
20
|
//# sourceMappingURL=omi_call_state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OmiCallState","exports"],"sourceRoot":"../../src","sources":["omi_call_state.tsx"],"mappings":";;;;;;IAAYA,YAAY,
|
|
1
|
+
{"version":3,"names":["OmiCallState","exports"],"sourceRoot":"../../src","sources":["omi_call_state.tsx"],"mappings":";;;;;;IAAYA,YAAY;AAAAC,OAAA,CAAAD,YAAA,GAAAA,YAAA;AAAA,WAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;AAAA,GAAZA,YAAY,KAAAC,OAAA,CAAAD,YAAA,GAAZA,YAAY"}
|
|
@@ -6,25 +6,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.OmiLocalCameraView = void 0;
|
|
7
7
|
exports.refreshLocalCamera = refreshLocalCamera;
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
-
// Safe
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
// Safe requireNativeComponent — returns fallback View if native config not available
|
|
10
|
+
let OmiLocalCameraViewNative = _reactNative.View;
|
|
11
|
+
try {
|
|
12
|
+
var _UIManager$getViewMan;
|
|
13
|
+
const {
|
|
14
|
+
UIManager,
|
|
15
|
+
requireNativeComponent
|
|
16
|
+
} = require('react-native');
|
|
17
|
+
if (_reactNative.Platform.OS === 'android' || (_UIManager$getViewMan = UIManager.getViewManagerConfig) !== null && _UIManager$getViewMan !== void 0 && _UIManager$getViewMan.call(UIManager, 'OmiLocalCameraView')) {
|
|
18
|
+
OmiLocalCameraViewNative = requireNativeComponent('OmiLocalCameraView');
|
|
15
19
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return getLocalCameraView()[prop];
|
|
21
|
-
}
|
|
22
|
-
});
|
|
20
|
+
} catch (_) {
|
|
21
|
+
// Fallback to plain View — iOS Fabric uses native window rendering instead
|
|
22
|
+
}
|
|
23
|
+
const OmiLocalCameraView = OmiLocalCameraViewNative;
|
|
23
24
|
|
|
24
|
-
//
|
|
25
|
-
|
|
25
|
+
// Imperative refresh method
|
|
26
|
+
exports.OmiLocalCameraView = OmiLocalCameraView;
|
|
27
|
+
const OmiLocalCamera = _reactNative.NativeModules.OmiLocalCameraView;
|
|
26
28
|
function refreshLocalCamera() {
|
|
27
|
-
if (!
|
|
28
|
-
return
|
|
29
|
+
if (!OmiLocalCamera) return Promise.resolve(false);
|
|
30
|
+
return OmiLocalCamera.refresh();
|
|
29
31
|
}
|
|
30
32
|
//# sourceMappingURL=omi_local_camera.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","OmiLocalCameraViewNative","View","_UIManager$getViewMan","UIManager","requireNativeComponent","Platform","OS","getViewManagerConfig","call","_","OmiLocalCameraView","exports","OmiLocalCamera","NativeModules","refreshLocalCamera","Promise","resolve","refresh"],"sourceRoot":"../../src","sources":["omi_local_camera.tsx"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA,IAAIC,wBAA6B,GAAGC,iBAAI;AACxC,IAAI;EAAA,IAAAC,qBAAA;EACF,MAAM;IAAEC,SAAS;IAAEC;EAAuB,CAAC,GAAGL,OAAO,CAAC,cAAc,CAAC;EACrE,IAAIM,qBAAQ,CAACC,EAAE,KAAK,SAAS,KAAAJ,qBAAA,GAAIC,SAAS,CAACI,oBAAoB,cAAAL,qBAAA,eAA9BA,qBAAA,CAAAM,IAAA,CAAAL,SAAS,EAAwB,oBAAoB,CAAC,EAAE;IACvFH,wBAAwB,GAAGI,sBAAsB,CAAC,oBAAoB,CAAC;EACzE;AACF,CAAC,CAAC,OAAOK,CAAC,EAAE;EACV;AAAA;AAGK,MAAMC,kBAAkB,GAAGV,wBAAwB;;AAE1D;AAAAW,OAAA,CAAAD,kBAAA,GAAAA,kBAAA;AACA,MAAME,cAAc,GAAGC,0BAAa,CAACH,kBAAkB;AAChD,SAASI,kBAAkBA,CAAA,EAAqB;EACrD,IAAI,CAACF,cAAc,EAAE,OAAOG,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;EAClD,OAAOJ,cAAc,CAACK,OAAO,EAAE;AACjC"}
|
|
@@ -6,25 +6,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.OmiRemoteCameraView = void 0;
|
|
7
7
|
exports.refreshRemoteCamera = refreshRemoteCamera;
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
-
// Safe
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
// Safe requireNativeComponent — returns fallback View if native config not available
|
|
10
|
+
let OmiRemoteCameraViewNative = _reactNative.View;
|
|
11
|
+
try {
|
|
12
|
+
var _UIManager$getViewMan;
|
|
13
|
+
const {
|
|
14
|
+
UIManager,
|
|
15
|
+
requireNativeComponent
|
|
16
|
+
} = require('react-native');
|
|
17
|
+
// Only attempt on Android or Old Arch iOS where ViewManager config exists
|
|
18
|
+
if (_reactNative.Platform.OS === 'android' || (_UIManager$getViewMan = UIManager.getViewManagerConfig) !== null && _UIManager$getViewMan !== void 0 && _UIManager$getViewMan.call(UIManager, 'OmiRemoteCameraView')) {
|
|
19
|
+
OmiRemoteCameraViewNative = requireNativeComponent('OmiRemoteCameraView');
|
|
15
20
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return getRemoteCameraView()[prop];
|
|
21
|
-
}
|
|
22
|
-
});
|
|
21
|
+
} catch (_) {
|
|
22
|
+
// Fallback to plain View — iOS Fabric uses native window rendering instead
|
|
23
|
+
}
|
|
24
|
+
const OmiRemoteCameraView = OmiRemoteCameraViewNative;
|
|
23
25
|
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
+
// Imperative refresh method
|
|
27
|
+
exports.OmiRemoteCameraView = OmiRemoteCameraView;
|
|
28
|
+
const OmiRemoteCamera = _reactNative.NativeModules.OmiRemoteCameraView;
|
|
26
29
|
function refreshRemoteCamera() {
|
|
27
|
-
if (!
|
|
28
|
-
return
|
|
30
|
+
if (!OmiRemoteCamera) return Promise.resolve(false);
|
|
31
|
+
return OmiRemoteCamera.refresh();
|
|
29
32
|
}
|
|
30
33
|
//# sourceMappingURL=omi_remote_camera.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","OmiRemoteCameraViewNative","View","_UIManager$getViewMan","UIManager","requireNativeComponent","Platform","OS","getViewManagerConfig","call","_","OmiRemoteCameraView","exports","OmiRemoteCamera","NativeModules","refreshRemoteCamera","Promise","resolve","refresh"],"sourceRoot":"../../src","sources":["omi_remote_camera.tsx"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA,IAAIC,yBAA8B,GAAGC,iBAAI;AACzC,IAAI;EAAA,IAAAC,qBAAA;EACF,MAAM;IAAEC,SAAS;IAAEC;EAAuB,CAAC,GAAGL,OAAO,CAAC,cAAc,CAAC;EACrE;EACA,IAAIM,qBAAQ,CAACC,EAAE,KAAK,SAAS,KAAAJ,qBAAA,GAAIC,SAAS,CAACI,oBAAoB,cAAAL,qBAAA,eAA9BA,qBAAA,CAAAM,IAAA,CAAAL,SAAS,EAAwB,qBAAqB,CAAC,EAAE;IACxFH,yBAAyB,GAAGI,sBAAsB,CAAC,qBAAqB,CAAC;EAC3E;AACF,CAAC,CAAC,OAAOK,CAAC,EAAE;EACV;AAAA;AAGK,MAAMC,mBAAmB,GAAGV,yBAAyB;;AAE5D;AAAAW,OAAA,CAAAD,mBAAA,GAAAA,mBAAA;AACA,MAAME,eAAe,GAAGC,0BAAa,CAACH,mBAAmB;AAClD,SAASI,mBAAmBA,CAAA,EAAqB;EACtD,IAAI,CAACF,eAAe,EAAE,OAAOG,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;EACnD,OAAOJ,eAAe,CAACK,OAAO,EAAE;AAClC"}
|
|
@@ -8,43 +8,24 @@ exports.OmiStartCallStatus = void 0;
|
|
|
8
8
|
* Status codes returned by startCall() function
|
|
9
9
|
* Use these to handle different call initiation results
|
|
10
10
|
*/
|
|
11
|
-
let OmiStartCallStatus
|
|
12
|
-
|
|
11
|
+
let OmiStartCallStatus; // No network connection available
|
|
12
|
+
exports.OmiStartCallStatus = OmiStartCallStatus;
|
|
13
|
+
(function (OmiStartCallStatus) {
|
|
13
14
|
OmiStartCallStatus[OmiStartCallStatus["invalidUuid"] = 0] = "invalidUuid";
|
|
14
|
-
// Invalid user UUID
|
|
15
15
|
OmiStartCallStatus[OmiStartCallStatus["invalidPhoneNumber"] = 1] = "invalidPhoneNumber";
|
|
16
|
-
// Invalid phone number format
|
|
17
16
|
OmiStartCallStatus[OmiStartCallStatus["samePhoneNumber"] = 2] = "samePhoneNumber";
|
|
18
|
-
// Cannot call same phone number
|
|
19
17
|
OmiStartCallStatus[OmiStartCallStatus["maxRetry"] = 3] = "maxRetry";
|
|
20
|
-
// Maximum retry attempts reached
|
|
21
|
-
// Permission errors (4, 450-452)
|
|
22
18
|
OmiStartCallStatus[OmiStartCallStatus["permissionDenied"] = 4] = "permissionDenied";
|
|
23
|
-
// Microphone/Camera permission denied
|
|
24
19
|
OmiStartCallStatus[OmiStartCallStatus["permissionMicrophone"] = 450] = "permissionMicrophone";
|
|
25
|
-
// Microphone permission required (Android 15+)
|
|
26
20
|
OmiStartCallStatus[OmiStartCallStatus["permissionCamera"] = 451] = "permissionCamera";
|
|
27
|
-
// Camera permission required (Android 15+)
|
|
28
21
|
OmiStartCallStatus[OmiStartCallStatus["permissionOverlay"] = 452] = "permissionOverlay";
|
|
29
|
-
// System alert window permission required (Android 15+)
|
|
30
|
-
// Call errors (5-7)
|
|
31
22
|
OmiStartCallStatus[OmiStartCallStatus["couldNotFindEndpoint"] = 5] = "couldNotFindEndpoint";
|
|
32
|
-
// Could not find endpoint
|
|
33
23
|
OmiStartCallStatus[OmiStartCallStatus["accountRegisterFailed"] = 6] = "accountRegisterFailed";
|
|
34
|
-
// Account registration failed
|
|
35
24
|
OmiStartCallStatus[OmiStartCallStatus["startCallFailed"] = 7] = "startCallFailed";
|
|
36
|
-
// Start call failed
|
|
37
|
-
// Success statuses (8, 407)
|
|
38
25
|
OmiStartCallStatus[OmiStartCallStatus["startCallSuccess"] = 8] = "startCallSuccess";
|
|
39
|
-
// Call initiated successfully (Android)
|
|
40
26
|
OmiStartCallStatus[OmiStartCallStatus["startCallSuccessIOS"] = 407] = "startCallSuccessIOS";
|
|
41
|
-
// Call initiated successfully (iOS)
|
|
42
|
-
// Other errors (9+)
|
|
43
27
|
OmiStartCallStatus[OmiStartCallStatus["haveAnotherCall"] = 9] = "haveAnotherCall";
|
|
44
|
-
// Already have another call in progress
|
|
45
28
|
OmiStartCallStatus[OmiStartCallStatus["accountTurnOffNumberInternal"] = 10] = "accountTurnOffNumberInternal";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return OmiStartCallStatus;
|
|
49
|
-
}({});
|
|
29
|
+
OmiStartCallStatus[OmiStartCallStatus["noNetwork"] = 11] = "noNetwork";
|
|
30
|
+
})(OmiStartCallStatus || (exports.OmiStartCallStatus = OmiStartCallStatus = {}));
|
|
50
31
|
//# sourceMappingURL=omi_start_call_status.js.map
|