@cloudflare/realtimekit-react-native 0.1.2-staging.9 → 0.1.3-staging.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/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/BackgroundTimer/RNBackgroundTimer.java +3 -3
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/Constants.java +4 -4
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/CoreModule.java +1 -1
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/CorePackage.java +6 -6
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/ForegroundService.java +5 -5
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/NotificationHelper.java +2 -2
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/RNPermissionsModule.java +2 -2
- package/android/src/main/java/com/{reactnativecore/DyteHelperModule.java → cloudflare/realtimekit/RTKHelperModule.java} +12 -12
- package/android/src/main/java/com/{reactnativecore/DyteHolder.java → cloudflare/realtimekit/RTKHolder.java} +2 -2
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/AppRTCBluetoothManager.java +4 -4
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/AppRTCProximitySensor.java +4 -4
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/AppRTCUtils.java +1 -1
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/InCallManagerModule.java +4 -4
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/InCallProximityManager.java +3 -3
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/InCallWakeLockUtils.java +2 -2
- package/android/src/main/java/com/{reactnativecore → cloudflare/realtimekit}/incallmanager/ThreadUtils.java +1 -1
- package/app.plugin.js +1 -1
- package/ios/RNInCallManager.m +26 -18
- package/ios/{DyteRNBackgroundTimer.h → RTKRNBackgroundTimer.h} +1 -1
- package/ios/{DyteRNBackgroundTimer.m → RTKRNBackgroundTimer.m} +2 -2
- package/ios/{DyteRNPermissionHandlerNotifications.h → RTKRNPermissionHandlerNotifications.h} +2 -2
- package/ios/{DyteRNPermissionHandlerNotifications.m → RTKRNPermissionHandlerNotifications.m} +3 -3
- package/ios/{DyteRNPermissions.h → RTKRNPermissions.h} +2 -2
- package/ios/{DyteRNPermissions.m → RTKRNPermissions.m} +33 -33
- package/ios/{DyteScreensharePickerView.h → RTKScreensharePickerView.h} +1 -1
- package/ios/{DyteScreensharePickerView.m → RTKScreensharePickerView.m} +2 -2
- package/ios/permissions/RTKRNPermissionHandlerBluetoothPeripheral.h +4 -0
- package/ios/permissions/{DyteRNPermissionHandlerBluetoothPeripheral.m → RTKRNPermissionHandlerBluetoothPeripheral.m} +3 -3
- package/ios/permissions/RTKRNPermissionHandlerCamera.h +5 -0
- package/ios/permissions/{DyteRNPermissionHandlerCamera.m → RTKRNPermissionHandlerCamera.m} +2 -2
- package/ios/permissions/RTKRNPermissionHandlerMicrophone.h +5 -0
- package/ios/permissions/{DyteRNPermissionHandlerMicrophone.m → RTKRNPermissionHandlerMicrophone.m} +2 -2
- package/ios/permissions/{DyteRNPermissionHandlerPhotoLibrary.h → RTKRNPermissionHandlerPhotoLibrary.h} +2 -2
- package/ios/permissions/{DyteRNPermissionHandlerPhotoLibrary.m → RTKRNPermissionHandlerPhotoLibrary.m} +2 -2
- package/ios/screenshare/{DyteDarwinNotificationCenter.swift → RTKDarwinNotificationCenter.swift} +4 -4
- package/ios/screenshare/{DyteScreenshareAtomic.swift → RTKScreenshareAtomic.swift} +1 -1
- package/ios/screenshare/{DyteScreenshareHandler.swift → RTKScreenshareHandler.swift} +8 -8
- package/ios/screenshare/{DyteScreenshareUploader.swift → RTKScreenshareUploader.swift} +6 -6
- package/ios/screenshare/{DyteSocketConnection.swift → RTKSocketConnection.swift} +3 -3
- package/lib/BackgroundHandler.js +19 -9
- package/lib/LocalMediaHandler.d.ts +0 -3
- package/lib/LocalMediaHandler.js +26 -46
- package/lib/PermissionHandler.js +7 -7
- package/lib/ReactContext.d.ts +4 -4
- package/lib/ReactContext.js +5 -5
- package/lib/ReactHooks.d.ts +1 -1
- package/lib/ReactHooks.js +1 -1
- package/package.json +1 -1
- package/plugin/build/{withDyte.js → withRTK.js} +1 -1
- package/plugin/src/{withDyte.ts → withRTK.ts} +4 -1
- package/plugin/tsconfig.tsbuildinfo +1 -1
- package/LICENSE +0 -13
- package/ios/permissions/DyteRNPermissionHandlerBluetoothPeripheral.h +0 -4
- package/ios/permissions/DyteRNPermissionHandlerCamera.h +0 -5
- package/ios/permissions/DyteRNPermissionHandlerMicrophone.h +0 -5
- /package/plugin/build/{withDyte.d.ts → withRTK.d.ts} +0 -0
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissions.h"
|
|
2
2
|
#import <React/RCTLog.h>
|
|
3
3
|
#import <React/RCTConvert.h>
|
|
4
|
-
#import "
|
|
5
|
-
#import "
|
|
6
|
-
#import "
|
|
7
|
-
#import "
|
|
8
|
-
#import "
|
|
4
|
+
#import "RTKRNPermissionHandlerBluetoothPeripheral.h"
|
|
5
|
+
#import "RTKRNPermissionHandlerCamera.h"
|
|
6
|
+
#import "RTKRNPermissionHandlerMicrophone.h"
|
|
7
|
+
#import "RTKRNPermissionHandlerPhotoLibrary.h"
|
|
8
|
+
#import "RTKRNPermissionHandlerNotifications.h"
|
|
9
9
|
|
|
10
10
|
static NSString* SETTING_KEY = @"@RNPermissions:Requested";
|
|
11
11
|
|
|
12
12
|
@implementation RCTConvert(RNPermission)
|
|
13
13
|
|
|
14
14
|
RCT_ENUM_CONVERTER(RNPermission, (@{
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
15
|
+
[RTKRNPermissionHandlerBluetoothPeripheral handlerUniqueId]: @(RNPermissionBluetoothPeripheral),
|
|
16
|
+
[RTKRNPermissionHandlerCamera handlerUniqueId]: @(RNPermissionCamera),
|
|
17
|
+
[RTKRNPermissionHandlerMicrophone handlerUniqueId]: @(RNPermissionMicrophone),
|
|
18
|
+
[RTKRNPermissionHandlerPhotoLibrary handlerUniqueId]: @(RNPermissionPhotoLibrary),
|
|
19
19
|
}), RNPermissionUnknown, integerValue);
|
|
20
20
|
|
|
21
21
|
@end
|
|
22
22
|
|
|
23
|
-
@interface
|
|
23
|
+
@interface RTKRNPermissions()
|
|
24
24
|
|
|
25
|
-
@property (nonatomic, strong) NSMutableDictionary<NSString *, id<
|
|
25
|
+
@property (nonatomic, strong) NSMutableDictionary<NSString *, id<RTKRNPermissionHandler>> *_Nonnull handlers;
|
|
26
26
|
|
|
27
27
|
@end
|
|
28
28
|
|
|
29
|
-
@implementation
|
|
29
|
+
@implementation RTKRNPermissions
|
|
30
30
|
|
|
31
31
|
RCT_EXPORT_MODULE();
|
|
32
32
|
|
|
@@ -42,10 +42,10 @@ RCT_EXPORT_MODULE();
|
|
|
42
42
|
NSMutableArray<NSString *> *available = [NSMutableArray new];
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
[available addObject:[
|
|
46
|
-
[available addObject:[
|
|
47
|
-
[available addObject:[
|
|
48
|
-
[available addObject:[
|
|
45
|
+
[available addObject:[RTKRNPermissionHandlerBluetoothPeripheral handlerUniqueId]];
|
|
46
|
+
[available addObject:[RTKRNPermissionHandlerCamera handlerUniqueId]];
|
|
47
|
+
[available addObject:[RTKRNPermissionHandlerMicrophone handlerUniqueId]];
|
|
48
|
+
[available addObject:[RTKRNPermissionHandlerPhotoLibrary handlerUniqueId]];
|
|
49
49
|
|
|
50
50
|
#if RCT_DEV
|
|
51
51
|
if ([available count] == 0) {
|
|
@@ -74,23 +74,23 @@ RCT_EXPORT_MODULE();
|
|
|
74
74
|
#endif
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
- (id<
|
|
78
|
-
id<
|
|
77
|
+
- (id<RTKRNPermissionHandler> _Nullable)handlerForPermission:(RNPermission)permission {
|
|
78
|
+
id<RTKRNPermissionHandler> handler = nil;
|
|
79
79
|
|
|
80
80
|
switch (permission) {
|
|
81
81
|
|
|
82
82
|
case RNPermissionBluetoothPeripheral:
|
|
83
|
-
handler = [
|
|
83
|
+
handler = [RTKRNPermissionHandlerBluetoothPeripheral new];
|
|
84
84
|
break;
|
|
85
85
|
|
|
86
86
|
case RNPermissionCamera:
|
|
87
|
-
handler = [
|
|
87
|
+
handler = [RTKRNPermissionHandlerCamera new];
|
|
88
88
|
break;
|
|
89
89
|
case RNPermissionMicrophone:
|
|
90
|
-
handler = [
|
|
90
|
+
handler = [RTKRNPermissionHandlerMicrophone new];
|
|
91
91
|
break;
|
|
92
92
|
case RNPermissionPhotoLibrary:
|
|
93
|
-
handler = [
|
|
93
|
+
handler = [RTKRNPermissionHandlerPhotoLibrary new];
|
|
94
94
|
break;
|
|
95
95
|
case RNPermissionUnknown:
|
|
96
96
|
break; // RCTConvert prevents this case
|
|
@@ -116,7 +116,7 @@ RCT_EXPORT_MODULE();
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
- (NSString *)lockHandler:(id<
|
|
119
|
+
- (NSString *)lockHandler:(id<RTKRNPermissionHandler>)handler {
|
|
120
120
|
if (_handlers == nil) {
|
|
121
121
|
_handlers = [NSMutableDictionary new];
|
|
122
122
|
}
|
|
@@ -172,7 +172,7 @@ RCT_REMAP_METHOD(check,
|
|
|
172
172
|
checkWithPermission:(RNPermission)permission
|
|
173
173
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
174
174
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
175
|
-
id<
|
|
175
|
+
id<RTKRNPermissionHandler> handler = [self handlerForPermission:permission];
|
|
176
176
|
NSString *lockId = [self lockHandler:handler];
|
|
177
177
|
|
|
178
178
|
[handler checkWithResolver:^(RNPermissionStatus status) {
|
|
@@ -188,7 +188,7 @@ RCT_REMAP_METHOD(request,
|
|
|
188
188
|
requestWithPermission:(RNPermission)permission
|
|
189
189
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
190
190
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
191
|
-
id<
|
|
191
|
+
id<RTKRNPermissionHandler> handler = [self handlerForPermission:permission];
|
|
192
192
|
NSString *lockId = [self lockHandler:handler]; [handler requestWithResolver:^(RNPermissionStatus status) {
|
|
193
193
|
resolve([self stringForStatus:status]);
|
|
194
194
|
[self unlockHandler:lockId];
|
|
@@ -201,9 +201,9 @@ RCT_REMAP_METHOD(request,
|
|
|
201
201
|
RCT_REMAP_METHOD(checkNotifications,
|
|
202
202
|
checkNotificationsWithResolver:(RCTPromiseResolveBlock)resolve
|
|
203
203
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
204
|
-
#if __has_include("
|
|
205
|
-
|
|
206
|
-
NSString *lockId = [self lockHandler:(id<
|
|
204
|
+
#if __has_include("RTKRNPermissionHandlerNotifications.h")
|
|
205
|
+
RTKRNPermissionHandlerNotifications *handler = [RTKRNPermissionHandlerNotifications new];
|
|
206
|
+
NSString *lockId = [self lockHandler:(id<RTKRNPermissionHandler>)handler];
|
|
207
207
|
|
|
208
208
|
[handler checkWithResolver:^(RNPermissionStatus status, NSDictionary * _Nonnull settings) {
|
|
209
209
|
resolve(@{ @"status": [self stringForStatus:status], @"settings": settings });
|
|
@@ -221,9 +221,9 @@ RCT_REMAP_METHOD(requestNotifications,
|
|
|
221
221
|
requestNotificationsWithOptions:(NSArray<NSString *> * _Nonnull)options
|
|
222
222
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
223
223
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
224
|
-
#if __has_include("
|
|
225
|
-
|
|
226
|
-
NSString *lockId = [self lockHandler:(id<
|
|
224
|
+
#if __has_include("RTKRNPermissionHandlerNotifications.h")
|
|
225
|
+
RTKRNPermissionHandlerNotifications *handler = [RTKRNPermissionHandlerNotifications new];
|
|
226
|
+
NSString *lockId = [self lockHandler:(id<RTKRNPermissionHandler>)handler];
|
|
227
227
|
|
|
228
228
|
[handler requestWithResolver:^(RNPermissionStatus status, NSDictionary * _Nonnull settings) {
|
|
229
229
|
resolve(@{ @"status": [self stringForStatus:status], @"settings": settings });
|
|
@@ -241,7 +241,7 @@ RCT_REMAP_METHOD(openLimitedPhotoLibraryPicker,
|
|
|
241
241
|
openLimitedPhotoLibraryPickerWithResolver:(RCTPromiseResolveBlock)resolve
|
|
242
242
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
RTKRNPermissionHandlerPhotoLibrary *handler = [RTKRNPermissionHandlerPhotoLibrary new];
|
|
245
245
|
[handler openLimitedPhotoLibraryPickerWithResolver:resolve rejecter:reject];
|
|
246
246
|
}
|
|
247
247
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissionHandlerBluetoothPeripheral.h"
|
|
2
2
|
|
|
3
3
|
@import CoreBluetooth;
|
|
4
4
|
|
|
5
|
-
@interface
|
|
5
|
+
@interface RTKRNPermissionHandlerBluetoothPeripheral() <CBPeripheralManagerDelegate>
|
|
6
6
|
|
|
7
7
|
@property (nonatomic, strong) CBPeripheralManager* manager;
|
|
8
8
|
@property (nonatomic, strong) void (^resolve)(RNPermissionStatus status);
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
@end
|
|
12
12
|
|
|
13
|
-
@implementation
|
|
13
|
+
@implementation RTKRNPermissionHandlerBluetoothPeripheral
|
|
14
14
|
|
|
15
15
|
+ (NSArray<NSString *> * _Nonnull)usageDescriptionKeys {
|
|
16
16
|
return @[
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissionHandlerCamera.h"
|
|
2
2
|
//#import <React/RCTLog.h>
|
|
3
3
|
|
|
4
4
|
@import AVFoundation;
|
|
5
5
|
|
|
6
|
-
@implementation
|
|
6
|
+
@implementation RTKRNPermissionHandlerCamera
|
|
7
7
|
|
|
8
8
|
+ (NSArray<NSString *> * _Nonnull)usageDescriptionKeys {
|
|
9
9
|
return @[@"NSCameraUsageDescription"];
|
package/ios/permissions/{DyteRNPermissionHandlerMicrophone.m → RTKRNPermissionHandlerMicrophone.m}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissionHandlerMicrophone.h"
|
|
2
2
|
|
|
3
3
|
@import AVFoundation;
|
|
4
4
|
|
|
5
|
-
@implementation
|
|
5
|
+
@implementation RTKRNPermissionHandlerMicrophone
|
|
6
6
|
|
|
7
7
|
+ (NSArray<NSString *> * _Nonnull)usageDescriptionKeys {
|
|
8
8
|
return @[@"NSMicrophoneUsageDescription"];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissions.h"
|
|
2
2
|
|
|
3
|
-
@interface
|
|
3
|
+
@interface RTKRNPermissionHandlerPhotoLibrary : NSObject<RTKRNPermissionHandler>
|
|
4
4
|
|
|
5
5
|
- (void)openLimitedPhotoLibraryPickerWithResolver:(RCTPromiseResolveBlock _Nonnull)resolve
|
|
6
6
|
rejecter:(RCTPromiseRejectBlock _Nonnull)reject;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
#import "
|
|
1
|
+
#import "RTKRNPermissionHandlerPhotoLibrary.h"
|
|
2
2
|
#import <React/RCTUtils.h>
|
|
3
3
|
|
|
4
4
|
@import Photos;
|
|
5
5
|
@import PhotosUI;
|
|
6
6
|
|
|
7
|
-
@implementation
|
|
7
|
+
@implementation RTKRNPermissionHandlerPhotoLibrary
|
|
8
8
|
|
|
9
9
|
+ (NSArray<NSString *> * _Nonnull)usageDescriptionKeys {
|
|
10
10
|
return @[@"NSPhotoLibraryUsageDescription"];
|
package/ios/screenshare/{DyteDarwinNotificationCenter.swift → RTKDarwinNotificationCenter.swift}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import Foundation
|
|
2
2
|
|
|
3
|
-
enum
|
|
3
|
+
enum RTKDarwinNotification: String {
|
|
4
4
|
case broadcastStarted = "iOS_BroadcastStarted"
|
|
5
5
|
case broadcastStopped = "iOS_BroadcastStopped"
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class RTKDarwinNotificationCenter {
|
|
9
9
|
|
|
10
|
-
static let shared =
|
|
10
|
+
static let shared = RTKDarwinNotificationCenter()
|
|
11
11
|
|
|
12
12
|
private let notificationCenter: CFNotificationCenter
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@ class DyteDarwinNotificationCenter {
|
|
|
15
15
|
notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
func postNotification(_ name:
|
|
18
|
+
func postNotification(_ name: RTKDarwinNotification) {
|
|
19
19
|
CFNotificationCenterPostNotification(notificationCenter, CFNotificationName(rawValue: name.rawValue as CFString), nil, nil, true)
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -2,8 +2,8 @@ import ReplayKit
|
|
|
2
2
|
|
|
3
3
|
open class RTKScreenshareHandler: RPBroadcastSampleHandler {
|
|
4
4
|
|
|
5
|
-
private var clientConnection:
|
|
6
|
-
private var uploader:
|
|
5
|
+
private var clientConnection: RTKSocketConnection?
|
|
6
|
+
private var uploader: RTKScreenshareUploader?
|
|
7
7
|
private var frameCount: Int = 0
|
|
8
8
|
|
|
9
9
|
private let appGroupIdentifier: String
|
|
@@ -19,10 +19,10 @@ open class RTKScreenshareHandler: RPBroadcastSampleHandler {
|
|
|
19
19
|
self.appGroupIdentifier = appGroupIdentifier
|
|
20
20
|
self.bundleIdentifier = bundleIdentifier
|
|
21
21
|
super.init()
|
|
22
|
-
if let connection =
|
|
22
|
+
if let connection = RTKSocketConnection(filePath: socketFilePath) {
|
|
23
23
|
clientConnection = connection
|
|
24
24
|
setupConnection()
|
|
25
|
-
uploader =
|
|
25
|
+
uploader = RTKScreenshareUploader(connection: connection, bundleIdentifier: bundleIdentifier)
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -34,7 +34,7 @@ open class RTKScreenshareHandler: RPBroadcastSampleHandler {
|
|
|
34
34
|
public override func broadcastStarted(withSetupInfo setupInfo: [String: NSObject]?) {
|
|
35
35
|
// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
|
|
36
36
|
frameCount = 0
|
|
37
|
-
|
|
37
|
+
RTKDarwinNotificationCenter.shared.postNotification(.broadcastStarted)
|
|
38
38
|
openConnection()
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -48,7 +48,7 @@ open class RTKScreenshareHandler: RPBroadcastSampleHandler {
|
|
|
48
48
|
|
|
49
49
|
public override func broadcastFinished() {
|
|
50
50
|
// User has requested to finish the broadcast.
|
|
51
|
-
|
|
51
|
+
RTKDarwinNotificationCenter.shared.postNotification(.broadcastStopped)
|
|
52
52
|
clientConnection?.close()
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -76,8 +76,8 @@ private extension RTKScreenshareHandler {
|
|
|
76
76
|
self?.finishBroadcastWithError(error)
|
|
77
77
|
} else {
|
|
78
78
|
// the displayed failure message is more user friendly when using NSError instead of Error
|
|
79
|
-
let
|
|
80
|
-
let customError = NSError(domain: RPRecordingErrorDomain, code:
|
|
79
|
+
let RTKScreenSharingStopped = 10001
|
|
80
|
+
let customError = NSError(domain: RPRecordingErrorDomain, code: RTKScreenSharingStopped, userInfo: [NSLocalizedDescriptionKey: "Screen sharing stopped"])
|
|
81
81
|
self?.finishBroadcastWithError(customError)
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -5,19 +5,19 @@ private enum Constants {
|
|
|
5
5
|
static let bufferMaxLength = 10240
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class RTKScreenshareUploader {
|
|
9
9
|
|
|
10
10
|
private static var imageContext = CIContext(options: nil)
|
|
11
11
|
|
|
12
|
-
@
|
|
13
|
-
private var connection:
|
|
12
|
+
@RTKScreenshareAtomic private var isReady = false
|
|
13
|
+
private var connection: RTKSocketConnection
|
|
14
14
|
|
|
15
15
|
private var dataToSend: Data?
|
|
16
16
|
private var byteIndex = 0
|
|
17
17
|
|
|
18
18
|
private let serialQueue: DispatchQueue
|
|
19
19
|
|
|
20
|
-
init(connection:
|
|
20
|
+
init(connection: RTKSocketConnection, bundleIdentifier: String) {
|
|
21
21
|
self.connection = connection
|
|
22
22
|
self.serialQueue = DispatchQueue(label: bundleIdentifier)
|
|
23
23
|
|
|
@@ -42,7 +42,7 @@ class DyteScreenshareUploader {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
private extension
|
|
45
|
+
private extension RTKScreenshareUploader {
|
|
46
46
|
|
|
47
47
|
func setupConnection() {
|
|
48
48
|
connection.didOpen = { [weak self] in
|
|
@@ -133,7 +133,7 @@ private extension DyteScreenshareUploader {
|
|
|
133
133
|
|
|
134
134
|
let options: [CIImageRepresentationOption: Float] = [kCGImageDestinationLossyCompressionQuality as CIImageRepresentationOption: 1.0]
|
|
135
135
|
|
|
136
|
-
return
|
|
136
|
+
return RTKScreenshareUploader.imageContext.jpegRepresentation(of: image, colorSpace: colorSpace, options: options)
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Foundation
|
|
2
2
|
|
|
3
|
-
class
|
|
3
|
+
class RTKSocketConnection: NSObject {
|
|
4
4
|
var didOpen: (() -> Void)?
|
|
5
5
|
var didClose: ((Error?) -> Void)?
|
|
6
6
|
var streamHasSpaceAvailable: (() -> Void)?
|
|
@@ -67,7 +67,7 @@ class DyteSocketConnection: NSObject {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
extension
|
|
70
|
+
extension RTKSocketConnection: StreamDelegate {
|
|
71
71
|
|
|
72
72
|
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
|
|
73
73
|
switch eventCode {
|
|
@@ -101,7 +101,7 @@ extension DyteSocketConnection: StreamDelegate {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
private extension
|
|
104
|
+
private extension RTKSocketConnection {
|
|
105
105
|
|
|
106
106
|
func setupAddress() -> Bool {
|
|
107
107
|
var addr = sockaddr_un()
|
package/lib/BackgroundHandler.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeviceEventEmitter, NativeAppEventEmitter, NativeEventEmitter, NativeModules, Platform, } from 'react-native';
|
|
2
|
-
const {
|
|
3
|
-
const Emitter = new NativeEventEmitter(
|
|
2
|
+
const { RTKRNBackgroundTimer } = NativeModules;
|
|
3
|
+
const Emitter = new NativeEventEmitter(RTKRNBackgroundTimer);
|
|
4
4
|
class BackgroundTimer {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.uniqueId = 0;
|
|
@@ -13,7 +13,9 @@ class BackgroundTimer {
|
|
|
13
13
|
delete this.callbacks[id];
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
|
|
16
|
+
Platform.OS === 'android'
|
|
17
|
+
? RTKRNBackgroundTimer.backgroundTimerSetTimeout(id, this.callbacks[id].timeout)
|
|
18
|
+
: RTKRNBackgroundTimer.setTimeout(id, this.callbacks[id].timeout);
|
|
17
19
|
}
|
|
18
20
|
callback();
|
|
19
21
|
}
|
|
@@ -21,11 +23,15 @@ class BackgroundTimer {
|
|
|
21
23
|
}
|
|
22
24
|
// Original API
|
|
23
25
|
start(delay = 0) {
|
|
24
|
-
return
|
|
26
|
+
return Platform.OS === 'android'
|
|
27
|
+
? RTKRNBackgroundTimer.backgroundTimerStart(delay)
|
|
28
|
+
: RTKRNBackgroundTimer.start(delay);
|
|
25
29
|
}
|
|
26
30
|
stop() {
|
|
27
31
|
Emitter.removeAllListeners('backgroundTimer.timeout');
|
|
28
|
-
return
|
|
32
|
+
return Platform.OS === 'android'
|
|
33
|
+
? RTKRNBackgroundTimer.backgroundTimerStop()
|
|
34
|
+
: RTKRNBackgroundTimer.stop();
|
|
29
35
|
}
|
|
30
36
|
runBackgroundTimer(callback, delay) {
|
|
31
37
|
const EventEmitter = Platform.select({
|
|
@@ -57,13 +63,15 @@ class BackgroundTimer {
|
|
|
57
63
|
interval: false,
|
|
58
64
|
timeout,
|
|
59
65
|
};
|
|
60
|
-
|
|
66
|
+
Platform.OS === 'android'
|
|
67
|
+
? RTKRNBackgroundTimer.backgroundTimerSetTimeout(timeoutId, timeout)
|
|
68
|
+
: RTKRNBackgroundTimer.setTimeout(timeoutId, timeout);
|
|
61
69
|
return timeoutId;
|
|
62
70
|
}
|
|
63
71
|
clearTimeout(timeoutId) {
|
|
64
72
|
if (this.callbacks[timeoutId]) {
|
|
65
73
|
delete this.callbacks[timeoutId];
|
|
66
|
-
//
|
|
74
|
+
// RTKRNBackgroundTimer.clearTimeout(timeoutId);
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
setInterval(callback, timeout) {
|
|
@@ -74,13 +82,15 @@ class BackgroundTimer {
|
|
|
74
82
|
interval: true,
|
|
75
83
|
timeout,
|
|
76
84
|
};
|
|
77
|
-
|
|
85
|
+
Platform.OS === 'android'
|
|
86
|
+
? RTKRNBackgroundTimer.backgroundTimerSetTimeout(intervalId, timeout)
|
|
87
|
+
: RTKRNBackgroundTimer.setTimeout(intervalId, timeout);
|
|
78
88
|
return intervalId;
|
|
79
89
|
}
|
|
80
90
|
clearInterval(intervalId) {
|
|
81
91
|
if (this.callbacks[intervalId]) {
|
|
82
92
|
delete this.callbacks[intervalId];
|
|
83
|
-
//
|
|
93
|
+
// RTKRNBackgroundTimer.clearTimeout(intervalId);
|
|
84
94
|
}
|
|
85
95
|
}
|
|
86
96
|
}
|
|
@@ -112,14 +112,11 @@ export default class LocalMediaHandler extends EventEmitter {
|
|
|
112
112
|
on(event: keyof typeof MediaEvents, listener: (...args: any[]) => void): this;
|
|
113
113
|
destruct(): void;
|
|
114
114
|
destructMediaHandler(): Promise<void>;
|
|
115
|
-
cleanUpTracks(): void;
|
|
116
|
-
destructor(): void;
|
|
117
115
|
removeAllTracks(): void;
|
|
118
116
|
private stopAudioTrack;
|
|
119
117
|
removeAudioTrack(): void;
|
|
120
118
|
private stopVideoTrack;
|
|
121
119
|
removeVideoTrack(): void;
|
|
122
|
-
removeAllListeners(event?: keyof typeof MediaEvents): this;
|
|
123
120
|
}
|
|
124
121
|
export interface RNLocalMediaHandler {
|
|
125
122
|
new (): LocalMediaHandler;
|
package/lib/LocalMediaHandler.js
CHANGED
|
@@ -26,7 +26,7 @@ import { AppState, NativeEventEmitter, NativeModules, PermissionsAndroid, Platfo
|
|
|
26
26
|
import BackgroundTimer from './BackgroundHandler';
|
|
27
27
|
import InCallManger from './NativeAudioManager';
|
|
28
28
|
import { setupPermissions } from './PermissionHandler';
|
|
29
|
-
const {
|
|
29
|
+
const { RTKHelper, BroadcastEventEmitter } = NativeModules;
|
|
30
30
|
const broadcastEmitter = new NativeEventEmitter(BroadcastEventEmitter);
|
|
31
31
|
// eslint-disable-next-line no-shadow
|
|
32
32
|
export var MediaEvents;
|
|
@@ -49,7 +49,7 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
49
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
50
|
if (Platform.OS !== 'android')
|
|
51
51
|
return;
|
|
52
|
-
const val = yield
|
|
52
|
+
const val = yield RTKHelper.isForegroundServiceRunning();
|
|
53
53
|
if (!val) {
|
|
54
54
|
if (Platform.Version >= 33) {
|
|
55
55
|
const res = yield PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS);
|
|
@@ -58,10 +58,10 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
if (Platform.Version >= 26) {
|
|
61
|
-
yield
|
|
61
|
+
yield RTKHelper.createNotificationChannel();
|
|
62
62
|
}
|
|
63
63
|
try {
|
|
64
|
-
yield
|
|
64
|
+
yield RTKHelper.startService();
|
|
65
65
|
}
|
|
66
66
|
catch (e) {
|
|
67
67
|
console.warn('Failed to start foreground service', e);
|
|
@@ -677,7 +677,7 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
677
677
|
if (this.screenShareEnabled && Platform.OS !== 'ios') {
|
|
678
678
|
this.removeScreenShareTracks();
|
|
679
679
|
try {
|
|
680
|
-
yield
|
|
680
|
+
yield RTKHelper.stopService();
|
|
681
681
|
}
|
|
682
682
|
catch (e) {
|
|
683
683
|
console.warn('Failed to stop foreground service', e);
|
|
@@ -685,7 +685,7 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
685
685
|
return;
|
|
686
686
|
}
|
|
687
687
|
if (Platform.OS === 'ios' && this.screenShareEnabled) {
|
|
688
|
-
NativeModules.
|
|
688
|
+
NativeModules.RTKScreensharePickerView.showScreenSharePickerView();
|
|
689
689
|
return;
|
|
690
690
|
}
|
|
691
691
|
if (Platform.OS === 'android') {
|
|
@@ -698,7 +698,7 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
698
698
|
catch (e) {
|
|
699
699
|
console.warn('Failed to start screenshare', e);
|
|
700
700
|
this.screenShareEnabled = false;
|
|
701
|
-
yield
|
|
701
|
+
yield RTKHelper.stopService();
|
|
702
702
|
this._pendingScreenShare = false;
|
|
703
703
|
}
|
|
704
704
|
finally {
|
|
@@ -706,7 +706,7 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
706
706
|
}
|
|
707
707
|
}
|
|
708
708
|
if (Platform.OS === 'ios') {
|
|
709
|
-
NativeModules.
|
|
709
|
+
NativeModules.RTKScreensharePickerView.showScreenSharePickerView();
|
|
710
710
|
}
|
|
711
711
|
});
|
|
712
712
|
}
|
|
@@ -805,48 +805,37 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
805
805
|
return super.on(event, listener);
|
|
806
806
|
}
|
|
807
807
|
destruct() {
|
|
808
|
-
|
|
808
|
+
// TODO: Do not remove native broadcast listeners when going OFF_STAGE in webinar
|
|
809
|
+
// this.#localMediaUtils.destruct();
|
|
810
|
+
if (Platform.OS === 'android')
|
|
811
|
+
__classPrivateFieldGet(this, _LocalMediaHandler_appStateSubscription, "f").remove();
|
|
812
|
+
BackgroundTimer.stop();
|
|
813
|
+
try {
|
|
814
|
+
if (Platform.OS === 'android')
|
|
815
|
+
RTKHelper.stopService();
|
|
816
|
+
}
|
|
817
|
+
catch (_err) { }
|
|
818
|
+
InCallManger.stop(undefined);
|
|
819
|
+
// NOTE: This is a no-op, it's functions are handled in web-core
|
|
820
|
+
// this.destructMediaHandler();
|
|
809
821
|
}
|
|
810
822
|
destructMediaHandler() {
|
|
811
823
|
return __awaiter(this, void 0, void 0, function* () {
|
|
812
824
|
this.removeAllTracks();
|
|
813
825
|
this.removeAllListeners();
|
|
814
|
-
this.cleanUpTracks();
|
|
815
|
-
__classPrivateFieldGet(this, _LocalMediaHandler_localMediaUtils, "f").destruct();
|
|
816
|
-
try {
|
|
817
|
-
if (Platform.OS === 'android')
|
|
818
|
-
yield DyteHelper.stopService();
|
|
819
|
-
}
|
|
820
|
-
catch (e) {
|
|
821
|
-
console.warn('Failed to stop foreground service', e);
|
|
822
|
-
}
|
|
823
|
-
InCallManger.stop(undefined);
|
|
824
826
|
});
|
|
825
827
|
}
|
|
826
|
-
cleanUpTracks() {
|
|
827
|
-
var _a, _b, _c, _d;
|
|
828
|
-
(_a = this.audioTrack) === null || _a === void 0 ? void 0 : _a.stop();
|
|
829
|
-
(_b = this.rawAudioTrack) === null || _b === void 0 ? void 0 : _b.stop();
|
|
830
|
-
(_c = this.videoTrack) === null || _c === void 0 ? void 0 : _c.stop();
|
|
831
|
-
(_d = this.rawVideoTrack) === null || _d === void 0 ? void 0 : _d.stop();
|
|
832
|
-
this.destructor();
|
|
833
|
-
}
|
|
834
|
-
destructor() {
|
|
835
|
-
if (Platform.OS === 'android')
|
|
836
|
-
__classPrivateFieldGet(this, _LocalMediaHandler_appStateSubscription, "f").remove();
|
|
837
|
-
broadcastEmitter.removeAllListeners('iOS_BroadcastStarted');
|
|
838
|
-
broadcastEmitter.removeAllListeners('iOS_BroadcastStopped');
|
|
839
|
-
BackgroundTimer.stop();
|
|
840
|
-
}
|
|
841
828
|
removeAllTracks() {
|
|
842
829
|
this.removeAudioTrack();
|
|
843
830
|
this.removeVideoTrack();
|
|
844
831
|
this.removeScreenShareTracks();
|
|
845
832
|
}
|
|
846
833
|
stopAudioTrack() {
|
|
847
|
-
var _a, _b;
|
|
848
|
-
(_a = this.
|
|
849
|
-
(_b = this.audioTrack) === null || _b === void 0 ? void 0 : _b.
|
|
834
|
+
var _a, _b, _c, _d;
|
|
835
|
+
(_a = this.rawAudioTrack) === null || _a === void 0 ? void 0 : _a.stop();
|
|
836
|
+
(_b = this.audioTrack) === null || _b === void 0 ? void 0 : _b.stop();
|
|
837
|
+
(_c = this.rawAudioTrack) === null || _c === void 0 ? void 0 : _c.release();
|
|
838
|
+
(_d = this.audioTrack) === null || _d === void 0 ? void 0 : _d.release();
|
|
850
839
|
this.audioEnabled = false;
|
|
851
840
|
}
|
|
852
841
|
removeAudioTrack() {
|
|
@@ -866,15 +855,6 @@ class LocalMediaHandler extends EventEmitter {
|
|
|
866
855
|
this.videoTrack = undefined;
|
|
867
856
|
this.rawVideoTrack = undefined;
|
|
868
857
|
}
|
|
869
|
-
removeAllListeners(event) {
|
|
870
|
-
if (event === 'SCREENSHARE_TRACK_CHANGE' ||
|
|
871
|
-
event === 'DEVICE_LIST_UPDATED' ||
|
|
872
|
-
event === 'DEVICE_CHANGE' ||
|
|
873
|
-
!event) {
|
|
874
|
-
return null;
|
|
875
|
-
}
|
|
876
|
-
return super.removeAllListeners(event);
|
|
877
|
-
}
|
|
878
858
|
}
|
|
879
859
|
_LocalMediaHandler_localMediaUtils = new WeakMap(), _LocalMediaHandler_appState = new WeakMap(), _LocalMediaHandler_appStateSubscription = new WeakMap(), _LocalMediaHandler_interval = new WeakMap();
|
|
880
860
|
export default LocalMediaHandler;
|