react-native-webrtc-nitro 1.1.0 → 1.2.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/android/src/main/java/com/webrtc/HybridCamera.kt +0 -1
- package/android/src/main/java/com/webrtc/HybridMicrophone.kt +0 -1
- package/android/src/main/java/com/webrtc/HybridPermissions.kt +95 -0
- package/cpp/Hybrid/HybridMediaDevices.cpp +23 -19
- package/ios/HybridCamera.swift +1 -3
- package/ios/HybridMicrophone.swift +1 -3
- package/ios/HybridPermissions.swift +63 -0
- package/lib/commonjs/index.js +11 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/Permissions.nitro.js +9 -0
- package/lib/commonjs/specs/Permissions.nitro.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/Permissions.nitro.js +6 -0
- package/lib/module/specs/Permissions.nitro.js.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/Permissions.nitro.d.ts +17 -0
- package/lib/typescript/src/specs/Permissions.nitro.d.ts.map +1 -0
- package/nitro.json +4 -0
- package/nitrogen/generated/android/Webrtc+autolinking.cmake +2 -0
- package/nitrogen/generated/android/WebrtcOnLoad.cpp +10 -0
- package/nitrogen/generated/android/c++/JHybridPermissionsSpec.cpp +91 -0
- package/nitrogen/generated/android/c++/JHybridPermissionsSpec.hpp +66 -0
- package/nitrogen/generated/android/c++/JPermissionDescriptor.hpp +58 -0
- package/nitrogen/generated/android/c++/JPermissionName.hpp +59 -0
- package/nitrogen/generated/android/c++/JPermissionState.hpp +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/HybridPermissionsSpec.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionDescriptor.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionName.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionState.kt +22 -0
- package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Bridge.cpp +25 -0
- package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Bridge.hpp +63 -0
- package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Umbrella.hpp +14 -0
- package/nitrogen/generated/ios/WebrtcAutolinking.mm +8 -0
- package/nitrogen/generated/ios/WebrtcAutolinking.swift +15 -0
- package/nitrogen/generated/ios/c++/HybridPermissionsSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridPermissionsSpecSwift.hpp +92 -0
- package/nitrogen/generated/ios/swift/Func_void_PermissionState.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridPermissionsSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridPermissionsSpec_cxx.swift +157 -0
- package/nitrogen/generated/ios/swift/PermissionDescriptor.swift +36 -0
- package/nitrogen/generated/ios/swift/PermissionName.swift +40 -0
- package/nitrogen/generated/ios/swift/PermissionState.swift +44 -0
- package/nitrogen/generated/shared/c++/HybridPermissionsSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridPermissionsSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/PermissionDescriptor.hpp +76 -0
- package/nitrogen/generated/shared/c++/PermissionName.hpp +76 -0
- package/nitrogen/generated/shared/c++/PermissionState.hpp +80 -0
- package/package.json +4 -5
- package/src/index.ts +1 -0
- package/src/specs/Permissions.nitro.ts +22 -0
- package/android/src/main/java/com/webrtc/Permission.kt +0 -58
- package/ios/Permission.swift +0 -26
|
@@ -35,7 +35,6 @@ class HybridMicrophone : HybridMicrophoneSpec() {
|
|
|
35
35
|
override fun open(pipeId: String): Promise<Unit> {
|
|
36
36
|
this.pipeId = pipeId
|
|
37
37
|
return Promise.async {
|
|
38
|
-
requestPermission(android.Manifest.permission.RECORD_AUDIO)
|
|
39
38
|
|
|
40
39
|
audioRecord = AudioRecord(
|
|
41
40
|
MediaRecorder.AudioSource.VOICE_COMMUNICATION,
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
package com.webrtc
|
|
2
|
+
|
|
3
|
+
import android.content.pm.PackageManager
|
|
4
|
+
import androidx.core.content.ContextCompat
|
|
5
|
+
import androidx.annotation.Keep
|
|
6
|
+
import com.facebook.react.modules.core.PermissionAwareActivity
|
|
7
|
+
import com.facebook.react.modules.core.PermissionListener
|
|
8
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
9
|
+
import kotlin.random.Random
|
|
10
|
+
import kotlinx.coroutines.CompletableDeferred
|
|
11
|
+
import kotlinx.coroutines.Dispatchers
|
|
12
|
+
import kotlinx.coroutines.withContext
|
|
13
|
+
import com.margelo.nitro.NitroModules
|
|
14
|
+
import com.margelo.nitro.core.Promise
|
|
15
|
+
import com.margelo.nitro.webrtc.HybridPermissionsSpec
|
|
16
|
+
import com.margelo.nitro.webrtc.PermissionDescriptor
|
|
17
|
+
import com.margelo.nitro.webrtc.PermissionState
|
|
18
|
+
import com.margelo.nitro.webrtc.PermissionName
|
|
19
|
+
|
|
20
|
+
@Keep
|
|
21
|
+
@DoNotStrip
|
|
22
|
+
class HybridPermissions : HybridPermissionsSpec() {
|
|
23
|
+
|
|
24
|
+
override fun query(permissionDesc: PermissionDescriptor): Promise<PermissionState> {
|
|
25
|
+
return Promise.async {
|
|
26
|
+
val permission = when (permissionDesc.name) {
|
|
27
|
+
PermissionName.MICROPHONE -> android.Manifest.permission.RECORD_AUDIO
|
|
28
|
+
PermissionName.CAMERA -> android.Manifest.permission.CAMERA
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
val context = NitroModules.applicationContext
|
|
32
|
+
?: throw RuntimeException("ReactApplicationContext is not available")
|
|
33
|
+
|
|
34
|
+
val currentActivity = context.currentActivity
|
|
35
|
+
?: throw RuntimeException("No current Activity")
|
|
36
|
+
val status = ContextCompat.checkSelfPermission(context, permission)
|
|
37
|
+
|
|
38
|
+
if (status == PackageManager.PERMISSION_GRANTED) {
|
|
39
|
+
PermissionState.GRANTED
|
|
40
|
+
} else if (status == PackageManager.PERMISSION_DENIED && !currentActivity.shouldShowRequestPermissionRationale(
|
|
41
|
+
permission
|
|
42
|
+
)
|
|
43
|
+
) {
|
|
44
|
+
PermissionState.PROMPT
|
|
45
|
+
} else {
|
|
46
|
+
PermissionState.DENIED
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override fun request(permissionDesc: PermissionDescriptor): Promise<PermissionState> {
|
|
52
|
+
return Promise.async {
|
|
53
|
+
val permission = when (permissionDesc.name) {
|
|
54
|
+
PermissionName.MICROPHONE -> android.Manifest.permission.RECORD_AUDIO
|
|
55
|
+
PermissionName.CAMERA -> android.Manifest.permission.CAMERA
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
val context = NitroModules.applicationContext
|
|
59
|
+
?: throw RuntimeException("ReactApplicationContext is not available")
|
|
60
|
+
|
|
61
|
+
val currentActivity = context.currentActivity
|
|
62
|
+
?: throw RuntimeException("No current Activity")
|
|
63
|
+
|
|
64
|
+
if (currentActivity !is PermissionAwareActivity) {
|
|
65
|
+
throw RuntimeException("Current activity doesn't support permissions")
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
val code = Random.nextInt(0, 1000)
|
|
69
|
+
val deferred = CompletableDeferred<PermissionState>()
|
|
70
|
+
|
|
71
|
+
val listener = object : PermissionListener {
|
|
72
|
+
override fun onRequestPermissionsResult(
|
|
73
|
+
requestCode: Int,
|
|
74
|
+
permissions: Array<String>,
|
|
75
|
+
grantResults: IntArray
|
|
76
|
+
): Boolean {
|
|
77
|
+
if (requestCode != code) return false
|
|
78
|
+
|
|
79
|
+
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
80
|
+
deferred.complete(PermissionState.GRANTED)
|
|
81
|
+
} else {
|
|
82
|
+
deferred.complete(PermissionState.DENIED)
|
|
83
|
+
}
|
|
84
|
+
return true
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
withContext(Dispatchers.Main) {
|
|
89
|
+
currentActivity.requestPermissions(arrayOf(permission), code, listener)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
deferred.await()
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -10,25 +10,29 @@ auto
|
|
|
10
10
|
HybridMediaDevices::getMockMedia (const MediaStreamConstraints &constraints)
|
|
11
11
|
-> std::shared_ptr<Promise<std::shared_ptr<HybridMediaStreamSpec>>>
|
|
12
12
|
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
13
|
+
return Promise<std::shared_ptr<HybridMediaStreamSpec>>::async (
|
|
14
|
+
[constraints] ()
|
|
15
|
+
{
|
|
16
|
+
auto hybridMediaStreams = std::make_shared<HybridMediaStream> ();
|
|
17
|
+
if (constraints.audio.value_or (false))
|
|
18
|
+
{
|
|
19
|
+
auto hybridAudioTrack
|
|
20
|
+
= std::make_shared<HybridMediaStreamTrack> ("audio");
|
|
21
|
+
hybridAudioTrack->mockMicrophone
|
|
22
|
+
= std::make_shared<MockMicrophone> (
|
|
23
|
+
hybridAudioTrack->get_srcPipeId ());
|
|
24
|
+
hybridMediaStreams->addTrack (hybridAudioTrack);
|
|
25
|
+
}
|
|
26
|
+
if (constraints.video.value_or (false))
|
|
27
|
+
{
|
|
28
|
+
auto hybridVideoTrack
|
|
29
|
+
= std::make_shared<HybridMediaStreamTrack> ("video");
|
|
30
|
+
hybridVideoTrack->mockCamera = std::make_shared<MockCamera> (
|
|
31
|
+
hybridVideoTrack->get_srcPipeId ());
|
|
32
|
+
hybridMediaStreams->addTrack (hybridVideoTrack);
|
|
33
|
+
}
|
|
34
|
+
return hybridMediaStreams;
|
|
35
|
+
});
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
auto
|
package/ios/HybridCamera.swift
CHANGED
|
@@ -95,10 +95,8 @@ public class HybridCamera: HybridCameraSpec {
|
|
|
95
95
|
throw RuntimeError.error(withMessage: "Pipe ID cannot be empty")
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
try cameraManager.prepare()
|
|
99
|
-
|
|
100
98
|
return Promise.async {
|
|
101
|
-
try
|
|
99
|
+
try self.cameraManager.prepare()
|
|
102
100
|
self.pipeId = pipeId
|
|
103
101
|
self.cameraManager.addActivePipeId(pipeId)
|
|
104
102
|
}
|
|
@@ -87,10 +87,8 @@ public class HybridMicrophone: HybridMicrophoneSpec {
|
|
|
87
87
|
throw RuntimeError.error(withMessage: "Pipe ID cannot be empty")
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
try microphoneManager.prepare()
|
|
91
|
-
|
|
92
90
|
return Promise.async {
|
|
93
|
-
try
|
|
91
|
+
try self.microphoneManager.prepare()
|
|
94
92
|
self.pipeId = pipeId
|
|
95
93
|
self.microphoneManager.addActivePipeId(pipeId)
|
|
96
94
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HybridPermissions.swift
|
|
3
|
+
// Pods
|
|
4
|
+
//
|
|
5
|
+
// Created by kaizhi-singtown on 2025/11/27.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import NitroModules
|
|
10
|
+
|
|
11
|
+
public class HybridPermissions: HybridPermissionsSpec {
|
|
12
|
+
public func query(permissionDesc: PermissionDescriptor) throws -> Promise<PermissionState> {
|
|
13
|
+
return Promise.async {
|
|
14
|
+
|
|
15
|
+
let mediaType: AVMediaType
|
|
16
|
+
switch permissionDesc.name {
|
|
17
|
+
case .camera:
|
|
18
|
+
mediaType = .video
|
|
19
|
+
case .microphone:
|
|
20
|
+
mediaType = .audio
|
|
21
|
+
default:
|
|
22
|
+
return .denied
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let status = AVCaptureDevice.authorizationStatus(for: mediaType)
|
|
26
|
+
switch status {
|
|
27
|
+
case .authorized:
|
|
28
|
+
return .granted
|
|
29
|
+
case .denied, .restricted:
|
|
30
|
+
return .denied
|
|
31
|
+
case .notDetermined:
|
|
32
|
+
return .prompt
|
|
33
|
+
@unknown default:
|
|
34
|
+
return .denied
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public func request(permissionDesc: PermissionDescriptor) throws -> Promise<PermissionState> {
|
|
40
|
+
return Promise.async {
|
|
41
|
+
let mediaType: AVMediaType
|
|
42
|
+
switch permissionDesc.name {
|
|
43
|
+
case .camera:
|
|
44
|
+
mediaType = .video
|
|
45
|
+
case .microphone:
|
|
46
|
+
mediaType = .audio
|
|
47
|
+
default:
|
|
48
|
+
return .denied
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let granted = await withCheckedContinuation { (continuation) in
|
|
52
|
+
AVCaptureDevice.requestAccess(for: mediaType) { ok in
|
|
53
|
+
continuation.resume(returning: ok)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if granted {
|
|
57
|
+
return .granted
|
|
58
|
+
} else {
|
|
59
|
+
return .denied
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -14,6 +14,17 @@ Object.keys(_WebrtcView).forEach(function (key) {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
+
var _Permissions = require("./specs/Permissions.nitro");
|
|
18
|
+
Object.keys(_Permissions).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _Permissions[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _Permissions[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
17
28
|
var _MediaDevices = require("./specs/MediaDevices.nitro");
|
|
18
29
|
Object.keys(_MediaDevices).forEach(function (key) {
|
|
19
30
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_WebrtcView","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_MediaDevices","_MediaStream","_MediaStreamTrack","_RTCPeerConnection","_RTCRtpSender","_RTCRtpReceiver","_RTCRtpTransceiver","_MediaRecorder"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,
|
|
1
|
+
{"version":3,"names":["_WebrtcView","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_Permissions","_MediaDevices","_MediaStream","_MediaStreamTrack","_RTCPeerConnection","_RTCRtpSender","_RTCRtpReceiver","_RTCRtpTransceiver","_MediaRecorder"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Permissions = void 0;
|
|
7
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
8
|
+
const PermissionsExport = exports.Permissions = _reactNativeNitroModules.NitroModules.createHybridObject('Permissions');
|
|
9
|
+
//# sourceMappingURL=Permissions.nitro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","PermissionsExport","exports","Permissions","NitroModules","createHybridObject"],"sourceRoot":"../../../src","sources":["specs/Permissions.nitro.ts"],"mappings":";;;;;;AACA,IAAAA,wBAAA,GAAAC,OAAA;AAiBA,MAAMC,iBAAiB,GAAAC,OAAA,CAAAC,WAAA,GACrBC,qCAAY,CAACC,kBAAkB,CAAc,aAAa,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,oBAAoB;AAClC,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;AACzC,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,4BAA4B;AAC1C,cAAc,8BAA8B;AAC5C,cAAc,iCAAiC;AAC/C,cAAc,6BAA6B","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,oBAAoB;AAClC,cAAc,2BAA2B;AACzC,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;AACzC,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,4BAA4B;AAC1C,cAAc,8BAA8B;AAC5C,cAAc,iCAAiC;AAC/C,cAAc,6BAA6B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","PermissionsExport","createHybridObject","Permissions"],"sourceRoot":"../../../src","sources":["specs/Permissions.nitro.ts"],"mappings":";;AACA,SAASA,YAAY,QAAQ,4BAA4B;AAiBzD,MAAMC,iBAAiB,GACrBD,YAAY,CAACE,kBAAkB,CAAc,aAAa,CAAC;AAE7D,SAASD,iBAAiB,IAAIE,WAAW","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export type PermissionState = 'denied' | 'granted' | 'prompt';
|
|
3
|
+
type PermissionName = 'camera' | 'microphone';
|
|
4
|
+
export interface PermissionDescriptor {
|
|
5
|
+
name: PermissionName;
|
|
6
|
+
}
|
|
7
|
+
interface Permissions extends HybridObject<{
|
|
8
|
+
ios: 'swift';
|
|
9
|
+
android: 'kotlin';
|
|
10
|
+
}> {
|
|
11
|
+
query(permissionDesc: PermissionDescriptor): Promise<PermissionState>;
|
|
12
|
+
request(permissionDesc: PermissionDescriptor): Promise<PermissionState>;
|
|
13
|
+
}
|
|
14
|
+
declare const PermissionsExport: Permissions;
|
|
15
|
+
type PermissionsExport = Permissions;
|
|
16
|
+
export { PermissionsExport as Permissions };
|
|
17
|
+
//# sourceMappingURL=Permissions.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Permissions.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/Permissions.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAC7D,KAAK,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;AAE7C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,UAAU,WAAY,SAAQ,YAAY,CAAC;IACzC,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAC;IACA,KAAK,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACrE,OAAO,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACxE;AAED,QAAA,MAAM,iBAAiB,aACsC,CAAA;AAC7D,KAAK,iBAAiB,GAAG,WAAW,CAAA;AACpC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA"}
|
package/nitro.json
CHANGED
|
@@ -39,6 +39,7 @@ target_sources(
|
|
|
39
39
|
../nitrogen/generated/shared/c++/HybridMediaStreamSpec.cpp
|
|
40
40
|
../nitrogen/generated/shared/c++/HybridMediaStreamTrackSpec.cpp
|
|
41
41
|
../nitrogen/generated/shared/c++/HybridMicrophoneSpec.cpp
|
|
42
|
+
../nitrogen/generated/shared/c++/HybridPermissionsSpec.cpp
|
|
42
43
|
../nitrogen/generated/shared/c++/HybridRTCPeerConnectionSpec.cpp
|
|
43
44
|
../nitrogen/generated/shared/c++/HybridRTCRtpReceiverSpec.cpp
|
|
44
45
|
../nitrogen/generated/shared/c++/HybridRTCRtpSenderSpec.cpp
|
|
@@ -48,6 +49,7 @@ target_sources(
|
|
|
48
49
|
# Android-specific Nitrogen C++ sources
|
|
49
50
|
../nitrogen/generated/android/c++/JHybridCameraSpec.cpp
|
|
50
51
|
../nitrogen/generated/android/c++/JHybridMicrophoneSpec.cpp
|
|
52
|
+
../nitrogen/generated/android/c++/JHybridPermissionsSpec.cpp
|
|
51
53
|
../nitrogen/generated/android/c++/JHybridWebrtcViewSpec.cpp
|
|
52
54
|
../nitrogen/generated/android/c++/views/JHybridWebrtcViewStateUpdater.cpp
|
|
53
55
|
)
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#include "JHybridCameraSpec.hpp"
|
|
19
19
|
#include "JHybridMicrophoneSpec.hpp"
|
|
20
|
+
#include "JHybridPermissionsSpec.hpp"
|
|
20
21
|
#include "JHybridWebrtcViewSpec.hpp"
|
|
21
22
|
#include "views/JHybridWebrtcViewStateUpdater.hpp"
|
|
22
23
|
#include <NitroModules/DefaultConstructableObject.hpp>
|
|
@@ -40,10 +41,19 @@ int initialize(JavaVM* vm) {
|
|
|
40
41
|
// Register native JNI methods
|
|
41
42
|
margelo::nitro::webrtc::JHybridCameraSpec::registerNatives();
|
|
42
43
|
margelo::nitro::webrtc::JHybridMicrophoneSpec::registerNatives();
|
|
44
|
+
margelo::nitro::webrtc::JHybridPermissionsSpec::registerNatives();
|
|
43
45
|
margelo::nitro::webrtc::JHybridWebrtcViewSpec::registerNatives();
|
|
44
46
|
margelo::nitro::webrtc::views::JHybridWebrtcViewStateUpdater::registerNatives();
|
|
45
47
|
|
|
46
48
|
// Register Nitro Hybrid Objects
|
|
49
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
50
|
+
"Permissions",
|
|
51
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
52
|
+
static DefaultConstructableObject<JHybridPermissionsSpec::javaobject> object("com/webrtc/HybridPermissions");
|
|
53
|
+
auto instance = object.create();
|
|
54
|
+
return instance->cthis()->shared();
|
|
55
|
+
}
|
|
56
|
+
);
|
|
47
57
|
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
48
58
|
"Microphone",
|
|
49
59
|
[]() -> std::shared_ptr<HybridObject> {
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JHybridPermissionsSpec.cpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#include "JHybridPermissionsSpec.hpp"
|
|
9
|
+
|
|
10
|
+
// Forward declaration of `PermissionState` to properly resolve imports.
|
|
11
|
+
namespace margelo::nitro::webrtc { enum class PermissionState; }
|
|
12
|
+
// Forward declaration of `PermissionDescriptor` to properly resolve imports.
|
|
13
|
+
namespace margelo::nitro::webrtc { struct PermissionDescriptor; }
|
|
14
|
+
// Forward declaration of `PermissionName` to properly resolve imports.
|
|
15
|
+
namespace margelo::nitro::webrtc { enum class PermissionName; }
|
|
16
|
+
|
|
17
|
+
#include "PermissionState.hpp"
|
|
18
|
+
#include <NitroModules/Promise.hpp>
|
|
19
|
+
#include <NitroModules/JPromise.hpp>
|
|
20
|
+
#include "JPermissionState.hpp"
|
|
21
|
+
#include "PermissionDescriptor.hpp"
|
|
22
|
+
#include "JPermissionDescriptor.hpp"
|
|
23
|
+
#include "PermissionName.hpp"
|
|
24
|
+
#include "JPermissionName.hpp"
|
|
25
|
+
|
|
26
|
+
namespace margelo::nitro::webrtc {
|
|
27
|
+
|
|
28
|
+
jni::local_ref<JHybridPermissionsSpec::jhybriddata> JHybridPermissionsSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
|
29
|
+
return makeCxxInstance(jThis);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void JHybridPermissionsSpec::registerNatives() {
|
|
33
|
+
registerHybrid({
|
|
34
|
+
makeNativeMethod("initHybrid", JHybridPermissionsSpec::initHybrid),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
size_t JHybridPermissionsSpec::getExternalMemorySize() noexcept {
|
|
39
|
+
static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
|
|
40
|
+
return method(_javaPart);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void JHybridPermissionsSpec::dispose() noexcept {
|
|
44
|
+
static const auto method = javaClassStatic()->getMethod<void()>("dispose");
|
|
45
|
+
method(_javaPart);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
std::string JHybridPermissionsSpec::toString() {
|
|
49
|
+
static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
|
|
50
|
+
auto javaString = method(_javaPart);
|
|
51
|
+
return javaString->toStdString();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Properties
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
// Methods
|
|
58
|
+
std::shared_ptr<Promise<PermissionState>> JHybridPermissionsSpec::query(const PermissionDescriptor& permissionDesc) {
|
|
59
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JPermissionDescriptor> /* permissionDesc */)>("query");
|
|
60
|
+
auto __result = method(_javaPart, JPermissionDescriptor::fromCpp(permissionDesc));
|
|
61
|
+
return [&]() {
|
|
62
|
+
auto __promise = Promise<PermissionState>::create();
|
|
63
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
64
|
+
auto __result = jni::static_ref_cast<JPermissionState>(__boxedResult);
|
|
65
|
+
__promise->resolve(__result->toCpp());
|
|
66
|
+
});
|
|
67
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
68
|
+
jni::JniException __jniError(__throwable);
|
|
69
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
70
|
+
});
|
|
71
|
+
return __promise;
|
|
72
|
+
}();
|
|
73
|
+
}
|
|
74
|
+
std::shared_ptr<Promise<PermissionState>> JHybridPermissionsSpec::request(const PermissionDescriptor& permissionDesc) {
|
|
75
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JPermissionDescriptor> /* permissionDesc */)>("request");
|
|
76
|
+
auto __result = method(_javaPart, JPermissionDescriptor::fromCpp(permissionDesc));
|
|
77
|
+
return [&]() {
|
|
78
|
+
auto __promise = Promise<PermissionState>::create();
|
|
79
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
80
|
+
auto __result = jni::static_ref_cast<JPermissionState>(__boxedResult);
|
|
81
|
+
__promise->resolve(__result->toCpp());
|
|
82
|
+
});
|
|
83
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
84
|
+
jni::JniException __jniError(__throwable);
|
|
85
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
86
|
+
});
|
|
87
|
+
return __promise;
|
|
88
|
+
}();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
} // namespace margelo::nitro::webrtc
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// HybridPermissionsSpec.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <NitroModules/JHybridObject.hpp>
|
|
11
|
+
#include <fbjni/fbjni.h>
|
|
12
|
+
#include "HybridPermissionsSpec.hpp"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
namespace margelo::nitro::webrtc {
|
|
18
|
+
|
|
19
|
+
using namespace facebook;
|
|
20
|
+
|
|
21
|
+
class JHybridPermissionsSpec: public jni::HybridClass<JHybridPermissionsSpec, JHybridObject>,
|
|
22
|
+
public virtual HybridPermissionsSpec {
|
|
23
|
+
public:
|
|
24
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/HybridPermissionsSpec;";
|
|
25
|
+
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
|
|
26
|
+
static void registerNatives();
|
|
27
|
+
|
|
28
|
+
protected:
|
|
29
|
+
// C++ constructor (called from Java via `initHybrid()`)
|
|
30
|
+
explicit JHybridPermissionsSpec(jni::alias_ref<jhybridobject> jThis) :
|
|
31
|
+
HybridObject(HybridPermissionsSpec::TAG),
|
|
32
|
+
HybridBase(jThis),
|
|
33
|
+
_javaPart(jni::make_global(jThis)) {}
|
|
34
|
+
|
|
35
|
+
public:
|
|
36
|
+
~JHybridPermissionsSpec() override {
|
|
37
|
+
// Hermes GC can destroy JS objects on a non-JNI Thread.
|
|
38
|
+
jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public:
|
|
42
|
+
size_t getExternalMemorySize() noexcept override;
|
|
43
|
+
void dispose() noexcept override;
|
|
44
|
+
std::string toString() override;
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
inline const jni::global_ref<JHybridPermissionsSpec::javaobject>& getJavaPart() const noexcept {
|
|
48
|
+
return _javaPart;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
// Properties
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
public:
|
|
56
|
+
// Methods
|
|
57
|
+
std::shared_ptr<Promise<PermissionState>> query(const PermissionDescriptor& permissionDesc) override;
|
|
58
|
+
std::shared_ptr<Promise<PermissionState>> request(const PermissionDescriptor& permissionDesc) override;
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
friend HybridBase;
|
|
62
|
+
using HybridBase::HybridBase;
|
|
63
|
+
jni::global_ref<JHybridPermissionsSpec::javaobject> _javaPart;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
} // namespace margelo::nitro::webrtc
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JPermissionDescriptor.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "PermissionDescriptor.hpp"
|
|
12
|
+
|
|
13
|
+
#include "JPermissionName.hpp"
|
|
14
|
+
#include "PermissionName.hpp"
|
|
15
|
+
|
|
16
|
+
namespace margelo::nitro::webrtc {
|
|
17
|
+
|
|
18
|
+
using namespace facebook;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The C++ JNI bridge between the C++ struct "PermissionDescriptor" and the the Kotlin data class "PermissionDescriptor".
|
|
22
|
+
*/
|
|
23
|
+
struct JPermissionDescriptor final: public jni::JavaClass<JPermissionDescriptor> {
|
|
24
|
+
public:
|
|
25
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/PermissionDescriptor;";
|
|
26
|
+
|
|
27
|
+
public:
|
|
28
|
+
/**
|
|
29
|
+
* Convert this Java/Kotlin-based struct to the C++ struct PermissionDescriptor by copying all values to C++.
|
|
30
|
+
*/
|
|
31
|
+
[[maybe_unused]]
|
|
32
|
+
[[nodiscard]]
|
|
33
|
+
PermissionDescriptor toCpp() const {
|
|
34
|
+
static const auto clazz = javaClassStatic();
|
|
35
|
+
static const auto fieldName = clazz->getField<JPermissionName>("name");
|
|
36
|
+
jni::local_ref<JPermissionName> name = this->getFieldValue(fieldName);
|
|
37
|
+
return PermissionDescriptor(
|
|
38
|
+
name->toCpp()
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public:
|
|
43
|
+
/**
|
|
44
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
45
|
+
*/
|
|
46
|
+
[[maybe_unused]]
|
|
47
|
+
static jni::local_ref<JPermissionDescriptor::javaobject> fromCpp(const PermissionDescriptor& value) {
|
|
48
|
+
using JSignature = JPermissionDescriptor(jni::alias_ref<JPermissionName>);
|
|
49
|
+
static const auto clazz = javaClassStatic();
|
|
50
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
51
|
+
return create(
|
|
52
|
+
clazz,
|
|
53
|
+
JPermissionName::fromCpp(value.name)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
} // namespace margelo::nitro::webrtc
|