Преглед на файлове

fix(iOS, layout): fix iOS 16 layout

This (partially) reverts commit ddab27e292.

We're reverting this to fix the iOS 16 layout problems caused by the interaction between the app rootViewControoler and JitsiMeetViewController, with the downside that using any RN components based on native view controllers will most likely be faulty. The solution for this would be to change the SDK's entry point to a view controller, instead of JitsiMeetView.
factor2
Alex Bumbu преди 2 години
родител
ревизия
d77d2f0c5b
No account linked to committer's email address

+ 14
- 38
ios/sdk/sdk.xcodeproj/project.pbxproj Целия файл

@@ -35,15 +35,13 @@
35 35
 		4E0EF63C28CA4069005D1B03 /* JMCallKitProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */; };
36 36
 		4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
37 37
 		4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
38
-		4EBA6E61286072E300B31882 /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; };
39
-		4EBA6E62286072E300B31882 /* JitsiMeetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */; };
40
-		4EBA6E652860B1E800B31882 /* JitsiMeetRenderingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */; };
41
-		4EBA6E662860B1E800B31882 /* JitsiMeetRenderingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */; };
38
+		4E812F3328F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */; };
39
+		4E812F3428F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */; };
40
+		4E812F3928F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */; };
41
+		4E812F3A28F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */; };
42 42
 		4ED4FFF32721B9B90074E620 /* JitsiAudioSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
43 43
 		4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; };
44
-		4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; };
45
-		4EEC9631286C73A2008705FA /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; };
46
-		6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
44
+		6F08DF7D4458EE3CF3F36F6D /* (null) in Frameworks */ = {isa = PBXBuildFile; };
47 45
 		9A8EE79C77C17743BB66E8BD /* libPods-JitsiMeetSDKLite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */; };
48 46
 		A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; };
49 47
 		C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; };
@@ -70,20 +68,16 @@
70 68
 		DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */; settings = {ATTRIBUTES = (Public, ); }; };
71 69
 		DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
72 70
 		DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */; };
73
-		DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */; };
74 71
 		DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
75 72
 		DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
76
-		DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; };
77 73
 		DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
78 74
 		DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2D22316AC4D00AE1940 /* JitsiMeetLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
79 75
 		DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AAC92317FFCD00290BEC /* LogUtils.h */; };
80
-		DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; };
81 76
 		DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
82 77
 		DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */; };
83 78
 		DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C8AFD27D2462C613000293D2 /* InfoPlistUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
84 79
 		DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7A1F5EC8F4001C08DB /* CallKit.m */; };
85 80
 		DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */; };
86
-		DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */; };
87 81
 		DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; };
88 82
 		DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7C1F60356D001C08DB /* AppInfo.m */; };
89 83
 		DE9A0148289A9A9A00E41CBB /* LogBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D72316AC7600AE1940 /* LogBridge.m */; };
@@ -99,10 +93,8 @@
99 93
 		DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495C1EC4B6C600B793EE /* AudioMode.m */; };
100 94
 		DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; };
101 95
 		DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535521FB2E8300011A3A /* ReactUtils.m */; };
102
-		DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; };
103 96
 		DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A3425E204EF76800E062DD /* DragGestureController.swift */; };
104 97
 		DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
105
-		DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */; };
106 98
 		DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D32316AC4D00AE1940 /* JitsiMeetLogger.m */; };
107 99
 		DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; };
108 100
 		DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535321FB1BF800011A3A /* JitsiMeet.m */; };
@@ -148,15 +140,11 @@
148 140
 		4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JMCallKitProxy.m; sourceTree = "<group>"; };
149 141
 		4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScheenshareEventEmiter.h; sourceTree = "<group>"; };
150 142
 		4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScheenshareEventEmiter.m; sourceTree = "<group>"; };
151
-		4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetViewController.h; sourceTree = "<group>"; };
152
-		4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetViewController.m; sourceTree = "<group>"; };
153
-		4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetRenderingView.h; sourceTree = "<group>"; };
154
-		4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetRenderingView.m; sourceTree = "<group>"; };
143
+		4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetView+Private.h"; sourceTree = "<group>"; };
144
+		4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "JitsiMeetView+Private.m"; sourceTree = "<group>"; };
155 145
 		4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiAudioSession.h; sourceTree = "<group>"; };
156 146
 		4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiAudioSession.m; sourceTree = "<group>"; };
157 147
 		4ED4FFF52721BAE10074E620 /* JitsiAudioSession+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiAudioSession+Private.h"; sourceTree = "<group>"; };
158
-		4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetView+Private.h"; sourceTree = "<group>"; };
159
-		4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "JitsiMeetView+Private.m"; sourceTree = "<group>"; };
160 148
 		86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.release.xcconfig"; sourceTree = "<group>"; };
161 149
 		891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = "<group>"; };
162 150
 		8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.debug.xcconfig"; sourceTree = "<group>"; };
@@ -206,7 +194,7 @@
206 194
 			files = (
207 195
 				0BB9AD791F5EC6D7001C08DB /* Intents.framework in Frameworks */,
208 196
 				0BB9AD771F5EC6CE001C08DB /* CallKit.framework in Frameworks */,
209
-				6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */,
197
+				6F08DF7D4458EE3CF3F36F6D /* (null) in Frameworks */,
210 198
 				3453F4A32680898C4A40E821 /* libPods-JitsiMeetSDK.a in Frameworks */,
211 199
 			);
212 200
 			runOnlyForDeploymentPostprocessing = 0;
@@ -281,14 +269,10 @@
281 269
 				DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */,
282 270
 				DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */,
283 271
 				DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */,
272
+				4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */,
273
+				4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */,
284 274
 				0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */,
285
-				4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */,
286
-				4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */,
287 275
 				0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */,
288
-				4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */,
289
-				4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */,
290
-				4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */,
291
-				4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */,
292 276
 				DE81A2D72316AC7600AE1940 /* LogBridge.m */,
293 277
 				DE65AAC92317FFCD00290BEC /* LogUtils.h */,
294 278
 				DEAFA777229EAD3B0033A7FA /* RNRootView.h */,
@@ -383,20 +367,18 @@
383 367
 				DEA9F284258A5D9900D4CD74 /* JitsiMeetSDK.h in Headers */,
384 368
 				4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */,
385 369
 				DE65AACC2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h in Headers */,
386
-				4EBA6E652860B1E800B31882 /* JitsiMeetRenderingView.h in Headers */,
387 370
 				0B412F221EDEF6EA00B1A0A6 /* JitsiMeetViewDelegate.h in Headers */,
388 371
 				4E0EF63528CA317E005D1B03 /* JMCallKitListener.h in Headers */,
389 372
 				4E0EF63028CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */,
390 373
 				4ED4FFF32721B9B90074E620 /* JitsiAudioSession.h in Headers */,
391 374
 				4E0EF63928CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
392
-				4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */,
393 375
 				0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */,
394 376
 				DE81A2D42316AC4D00AE1940 /* JitsiMeetLogger.h in Headers */,
395 377
 				DE65AACA2317FFCD00290BEC /* LogUtils.h in Headers */,
396
-				4EBA6E61286072E300B31882 /* JitsiMeetViewController.h in Headers */,
397 378
 				DEAD3226220C497000E93636 /* JitsiMeetConferenceOptions.h in Headers */,
398 379
 				C81E9AB925AC5AD800B134D9 /* ExternalAPI.h in Headers */,
399 380
 				C8AFD27F2462C613000293D2 /* InfoPlistUtil.h in Headers */,
381
+				4E812F3328F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */,
400 382
 			);
401 383
 			runOnlyForDeploymentPostprocessing = 0;
402 384
 		};
@@ -411,20 +393,18 @@
411 393
 				DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */,
412 394
 				DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */,
413 395
 				DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */,
414
-				DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */,
415 396
 				DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */,
416 397
 				4E0EF63628CA317E005D1B03 /* JMCallKitListener.h in Headers */,
417 398
 				4E0EF63128CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */,
418 399
 				DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */,
419 400
 				4E0EF63A28CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
420
-				DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */,
421 401
 				DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */,
422 402
 				DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */,
423 403
 				DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */,
424
-				DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */,
425 404
 				DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */,
426 405
 				DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */,
427 406
 				DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */,
407
+				4E812F3428F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */,
428 408
 			);
429 409
 			runOnlyForDeploymentPostprocessing = 0;
430 410
 		};
@@ -686,8 +666,8 @@
686 666
 				0BB9AD7B1F5EC8F4001C08DB /* CallKit.m in Sources */,
687 667
 				DE81A2DF2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m in Sources */,
688 668
 				4E0EF63B28CA4069005D1B03 /* JMCallKitProxy.m in Sources */,
689
-				4EBA6E662860B1E800B31882 /* JitsiMeetRenderingView.m in Sources */,
690 669
 				4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */,
670
+				4E812F3928F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */,
691 671
 				0BB9AD7D1F60356D001C08DB /* AppInfo.m in Sources */,
692 672
 				DE81A2D92316AC7600AE1940 /* LogBridge.m in Sources */,
693 673
 				DEAFA779229EAD520033A7FA /* RNRootView.m in Sources */,
@@ -703,11 +683,9 @@
703 683
 				0BCA49611EC4B6C600B793EE /* Proximity.m in Sources */,
704 684
 				4E0EF63228CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */,
705 685
 				DEFE535621FB2E8300011A3A /* ReactUtils.m in Sources */,
706
-				4EEC9631286C73A2008705FA /* JitsiMeetView+Private.m in Sources */,
707 686
 				C6A34261204EF76800E062DD /* DragGestureController.swift in Sources */,
708 687
 				4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */,
709 688
 				A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */,
710
-				4EBA6E62286072E300B31882 /* JitsiMeetViewController.m in Sources */,
711 689
 				DE81A2D52316AC4D00AE1940 /* JitsiMeetLogger.m in Sources */,
712 690
 				0B412F191EDEC65D00B1A0A6 /* JitsiMeetView.m in Sources */,
713 691
 				DEFE535421FB1BF800011A3A /* JitsiMeet.m in Sources */,
@@ -721,7 +699,6 @@
721 699
 			files = (
722 700
 				DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */,
723 701
 				DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */,
724
-				DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */,
725 702
 				DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */,
726 703
 				4E0EF63C28CA4069005D1B03 /* JMCallKitProxy.m in Sources */,
727 704
 				DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */,
@@ -737,11 +714,10 @@
737 714
 				DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */,
738 715
 				DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */,
739 716
 				DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */,
717
+				4E812F3A28F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */,
740 718
 				DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */,
741
-				DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */,
742 719
 				DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */,
743 720
 				DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */,
744
-				DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */,
745 721
 				DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */,
746 722
 				4E0EF63328CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */,
747 723
 				DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */,

+ 0
- 30
ios/sdk/src/JitsiMeetRenderingView.h Целия файл

@@ -1,30 +0,0 @@
1
-/*
2
- * Copyright @ 2022-present 8x8, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- *     http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
-#import <UIKit/UIKit.h>
18
-#import "JitsiMeetViewDelegate.h"
19
-
20
-NS_ASSUME_NONNULL_BEGIN
21
-
22
-@interface JitsiMeetRenderingView : UIView
23
-
24
-@property (nonatomic, assign) BOOL isPiPEnabled;
25
-
26
-- (void)setProps:(NSDictionary *_Nonnull)newProps;
27
-
28
-@end
29
-
30
-NS_ASSUME_NONNULL_END

+ 0
- 83
ios/sdk/src/JitsiMeetRenderingView.m Целия файл

@@ -1,83 +0,0 @@
1
-/*
2
- * Copyright @ 2022-present 8x8, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- *     http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-#include <mach/mach_time.h>
17
-
18
-#import "JitsiMeetRenderingView.h"
19
-#import "ReactUtils.h"
20
-#import "RNRootView.h"
21
-#import "JitsiMeet+Private.h"
22
-
23
-/**
24
- * Backwards compatibility: turn the boolean prop into a feature flag.
25
- */
26
-static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
27
-
28
-@interface JitsiMeetRenderingView ()
29
-@end
30
-
31
-@implementation JitsiMeetRenderingView {
32
-    /**
33
-     * React Native view where the entire content will be rendered.
34
-     */
35
-    RNRootView *rootView;
36
-}
37
-
38
-/**
39
- * Passes the given props to the React Native application. The props which we pass
40
- * are a combination of 3 different sources:
41
- *
42
- * - JitsiMeet.defaultConferenceOptions
43
- * - This function's parameters
44
- * - Some extras which are added by this function
45
- */
46
-- (void)setProps:(NSDictionary *_Nonnull)newProps {
47
-    NSMutableDictionary *props = mergeProps([[JitsiMeet sharedInstance] getDefaultProps], newProps);
48
-
49
-    // Set the PiP flag if it wasn't manually set.
50
-    NSMutableDictionary *featureFlags = props[@"flags"];
51
-    // TODO: temporary implementation
52
-    if (featureFlags[PiPEnabledFeatureFlag] == nil) {
53
-        featureFlags[PiPEnabledFeatureFlag] = @(self.isPiPEnabled);
54
-    }
55
-
56
-    // This method is supposed to be imperative i.e. a second
57
-    // invocation with one and the same URL is expected to join the respective
58
-    // conference again if the first invocation was followed by leaving the
59
-    // conference. However, React and, respectively,
60
-    // appProperties/initialProperties are declarative expressions i.e. one and
61
-    // the same URL will not trigger an automatic re-render in the JavaScript
62
-    // source code. The workaround implemented below introduces imperativeness
63
-    // in React Component props by defining a unique value per invocation.
64
-    props[@"timestamp"] = @(mach_absolute_time());
65
-
66
-    if (rootView) {
67
-        // Update props with the new URL.
68
-        rootView.appProperties = props;
69
-    } else {
70
-        RCTBridge *bridge = [[JitsiMeet sharedInstance] getReactBridge];
71
-        rootView = [[RNRootView alloc] initWithBridge:bridge
72
-                                           moduleName:@"App"
73
-                                    initialProperties:props];
74
-        rootView.backgroundColor = self.backgroundColor;
75
-
76
-        // Add rootView as a subview which completely covers this one.
77
-        [rootView setFrame:[self bounds]];
78
-        rootView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
79
-        [self addSubview:rootView];
80
-    }
81
-}
82
-
83
-@end

+ 114
- 52
ios/sdk/src/JitsiMeetView.m Целия файл

@@ -20,22 +20,23 @@
20 20
 #import "ExternalAPI.h"
21 21
 #import "JitsiMeet+Private.h"
22 22
 #import "JitsiMeetConferenceOptions+Private.h"
23
-#import "JitsiMeetView.h"
24
-#import "JitsiMeetViewController.h"
23
+#import "JitsiMeetView+Private.h"
25 24
 #import "ReactUtils.h"
26 25
 #import "RNRootView.h"
27 26
 
28
-@interface JitsiMeetView ()
29 27
 
30
-@property (nonatomic, strong) JitsiMeetViewController *jitsiMeetViewController;
31
-@property (nonatomic, strong) UINavigationController *navController;
32
-@property (nonatomic, readonly) BOOL isPiPEnabled;
33
-
34
-@end
28
+/**
29
+ * Backwards compatibility: turn the boolean prop into a feature flag.
30
+ */
31
+static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
35 32
 
36
-@implementation JitsiMeetView
37 33
 
38
-@dynamic isPiPEnabled;
34
+@implementation JitsiMeetView {
35
+    /**
36
+     * React Native view where the entire content will be rendered.
37
+     */
38
+    RNRootView *rootView;
39
+}
39 40
 
40 41
 #pragma mark Initializers
41 42
 
@@ -66,10 +67,6 @@
66 67
     return self;
67 68
 }
68 69
 
69
-- (void)dealloc {
70
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
71
-}
72
-
73 70
 /**
74 71
  * Internal initialization:
75 72
  *
@@ -77,57 +74,72 @@
77 74
  * - initializes the external API scope
78 75
  */
79 76
 - (void)initWithXXX {
80
-    self.jitsiMeetViewController = [[JitsiMeetViewController alloc] init];
81
-    self.jitsiMeetViewController.view.frame = [self bounds];
82
-    [self addSubview:self.jitsiMeetViewController.view];
77
+    // Set a background color which is in accord with the JavaScript and Android
78
+    // parts of the application and causes less perceived visual flicker than
79
+    // the default background color.
80
+    self.backgroundColor
81
+        = [UIColor colorWithRed:.07f green:.07f blue:.07f alpha:1];
83 82
     
84 83
     [self registerObservers];
85 84
 }
86 85
 
86
+- (void)dealloc {
87
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
88
+}
89
+
87 90
 #pragma mark API
88 91
 
89 92
 - (void)join:(JitsiMeetConferenceOptions *)options {
90
-    [self.jitsiMeetViewController join:options withPiP:self.isPiPEnabled];
93
+    [self setProps:options == nil ? @{} : [options asProps]];
91 94
 }
92 95
 
93 96
 - (void)leave {
94
-    [self.jitsiMeetViewController leave];
97
+    [self setProps:@{}];
95 98
 }
96 99
 
97 100
 - (void)hangUp {
98
-    [self.jitsiMeetViewController hangUp];
101
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
102
+    [externalAPI sendHangUp];
99 103
 }
100 104
 
101 105
 - (void)setAudioMuted:(BOOL)muted {
102
-    [self.jitsiMeetViewController setAudioMuted:muted];
106
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
107
+    [externalAPI sendSetAudioMuted:muted];
103 108
 }
104 109
 
105 110
 - (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
106
-    [self.jitsiMeetViewController sendEndpointTextMessage:message :to];
111
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
112
+    [externalAPI sendEndpointTextMessage:message :to];
107 113
 }
108 114
 
109 115
 - (void)toggleScreenShare:(BOOL)enabled {
110
-    [self.jitsiMeetViewController toggleScreenShare:enabled];
116
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
117
+    [externalAPI toggleScreenShare:enabled];
111 118
 }
112 119
 
113 120
 - (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler {
114
-    [self.jitsiMeetViewController retrieveParticipantsInfo:completionHandler];
121
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
122
+    [externalAPI retrieveParticipantsInfo:completionHandler];
115 123
 }
116 124
 
117 125
 - (void)openChat:(NSString*)to  {
118
-    [self.jitsiMeetViewController openChat:to];
126
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
127
+    [externalAPI openChat:to];
119 128
 }
120 129
 
121 130
 - (void)closeChat  {
122
-    [self.jitsiMeetViewController closeChat];
131
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
132
+    [externalAPI closeChat];
123 133
 }
124 134
 
125 135
 - (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
126
-    [self.jitsiMeetViewController sendChatMessage:message :to];
136
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
137
+    [externalAPI sendChatMessage:message :to];
127 138
 }
128 139
 
129 140
 - (void)setVideoMuted:(BOOL)muted {
130
-    [self.jitsiMeetViewController setVideoMuted:muted];
141
+    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
142
+    [externalAPI sendSetVideoMuted:muted];
131 143
 }
132 144
 
133 145
 - (void)setClosedCaptionsEnabled:(BOOL)enabled {
@@ -135,47 +147,97 @@
135 147
     [externalAPI sendSetClosedCaptionsEnabled:enabled];
136 148
 }
137 149
 
138
-#pragma mark Private
139
-
140
-- (BOOL)isPiPEnabled {
141
-    return self.delegate && [self.delegate respondsToSelector:@selector(enterPictureInPicture:)];
142
-}
150
+#pragma mark Private methods
143 151
 
144 152
 - (void)registerObservers {
153
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdateViewPropsNotification:) name:updateViewPropsNotificationName object:nil];
145 154
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSendEventNotification:) name:sendEventNotificationName object:nil];
155
+ }
156
+
157
+- (void)handleUpdateViewPropsNotification:(NSNotification *)notification {
158
+    NSDictionary *props = [notification.userInfo objectForKey:@"props"];
159
+    [self setProps:props];
146 160
 }
147 161
 
148 162
 - (void)handleSendEventNotification:(NSNotification *)notification {
149 163
     NSString *eventName = notification.userInfo[@"name"];
150 164
     NSString *eventData = notification.userInfo[@"data"];
151
-    
152
-    SEL sel = NSSelectorFromString([self methodNameFromEventName:eventName]);
153 165
 
166
+    SEL sel = NSSelectorFromString([self methodNameFromEventName:eventName]);
154 167
     if (sel && [self.delegate respondsToSelector:sel]) {
155 168
         [self.delegate performSelector:sel withObject:eventData];
156 169
     }
157 170
 }
158 171
 
159 172
 /**
160
- * Converts a specific event name i.e. redux action type description to a
161
- * method name.
173
+  * Converts a specific event name i.e. redux action type description to a
174
+  * method name.
175
+  *
176
+  * @param eventName The event name to convert to a method name.
177
+  * @return A method name constructed from the specified `eventName`.
178
+  */
179
+ - (NSString *)methodNameFromEventName:(NSString *)eventName {
180
+    NSMutableString *methodName
181
+        = [NSMutableString stringWithCapacity:eventName.length];
182
+
183
+    for (NSString *c in [eventName componentsSeparatedByString:@"_"]) {
184
+        if (c.length) {
185
+            [methodName appendString:
186
+                methodName.length ? c.capitalizedString : c.lowercaseString];
187
+        }
188
+    }
189
+    [methodName appendString:@":"];
190
+
191
+    return methodName;
192
+ }
193
+
194
+/**
195
+ * Passes the given props to the React Native application. The props which we pass
196
+ * are a combination of 3 different sources:
162 197
  *
163
- * @param eventName The event name to convert to a method name.
164
- * @return A method name constructed from the specified `eventName`.
198
+ * - JitsiMeet.defaultConferenceOptions
199
+ * - This function's parameters
200
+ * - Some extras which are added by this function
165 201
  */
166
-- (NSString *)methodNameFromEventName:(NSString *)eventName {
167
-   NSMutableString *methodName
168
-       = [NSMutableString stringWithCapacity:eventName.length];
169
-
170
-   for (NSString *c in [eventName componentsSeparatedByString:@"_"]) {
171
-       if (c.length) {
172
-           [methodName appendString:
173
-               methodName.length ? c.capitalizedString : c.lowercaseString];
174
-       }
175
-   }
176
-   [methodName appendString:@":"];
177
-
178
-   return methodName;
202
+- (void)setProps:(NSDictionary *_Nonnull)newProps {
203
+    NSMutableDictionary *props = mergeProps([[JitsiMeet sharedInstance] getDefaultProps], newProps);
204
+
205
+    // Set the PiP flag if it wasn't manually set.
206
+    NSMutableDictionary *featureFlags = props[@"flags"];
207
+    if (featureFlags[PiPEnabledFeatureFlag] == nil) {
208
+        featureFlags[PiPEnabledFeatureFlag]
209
+            = [NSNumber numberWithBool:
210
+               self.delegate && [self.delegate respondsToSelector:@selector(enterPictureInPicture:)]];
211
+    }
212
+
213
+    // This method is supposed to be imperative i.e. a second
214
+    // invocation with one and the same URL is expected to join the respective
215
+    // conference again if the first invocation was followed by leaving the
216
+    // conference. However, React and, respectively,
217
+    // appProperties/initialProperties are declarative expressions i.e. one and
218
+    // the same URL will not trigger an automatic re-render in the JavaScript
219
+    // source code. The workaround implemented below introduces imperativeness
220
+    // in React Component props by defining a unique value per invocation.
221
+    props[@"timestamp"] = @(mach_absolute_time());
222
+
223
+    if (rootView) {
224
+        // Update props with the new URL.
225
+        rootView.appProperties = props;
226
+    } else {
227
+        RCTBridge *bridge = [[JitsiMeet sharedInstance] getReactBridge];
228
+        rootView
229
+            = [[RNRootView alloc] initWithBridge:bridge
230
+                                      moduleName:@"App"
231
+                               initialProperties:props];
232
+        rootView.backgroundColor = self.backgroundColor;
233
+
234
+        // Add rootView as a subview which completely covers this one.
235
+        [rootView setFrame:[self bounds]];
236
+        rootView.autoresizingMask
237
+            = UIViewAutoresizingFlexibleWidth
238
+                | UIViewAutoresizingFlexibleHeight;
239
+        [self addSubview:rootView];
240
+    }
179 241
 }
180 242
 
181 243
 @end

+ 0
- 38
ios/sdk/src/JitsiMeetViewController.h Целия файл

@@ -1,38 +0,0 @@
1
-/*
2
- * Copyright @ 2022-present 8x8, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- *     http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
-#import <UIKit/UIKit.h>
18
-#import "JitsiMeetConferenceOptions.h"
19
-
20
-NS_ASSUME_NONNULL_BEGIN
21
-
22
-@interface JitsiMeetViewController : UIViewController
23
-
24
-- (void)join:(JitsiMeetConferenceOptions *)options withPiP:(BOOL)enablePiP;
25
-- (void)leave;
26
-- (void)hangUp;
27
-- (void)setAudioMuted:(BOOL)muted;
28
-- (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to;
29
-- (void)toggleScreenShare:(BOOL)enabled;
30
-- (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler;
31
-- (void)openChat:(NSString*)to;
32
-- (void)closeChat;
33
-- (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to;
34
-- (void)setVideoMuted:(BOOL)muted;
35
-
36
-@end
37
-
38
-NS_ASSUME_NONNULL_END

+ 0
- 127
ios/sdk/src/JitsiMeetViewController.m Целия файл

@@ -1,127 +0,0 @@
1
-/*
2
- * Copyright @ 2022-present 8x8, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- *     http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
-#import "JitsiMeetViewController.h"
18
-#import "JitsiMeet+Private.h"
19
-#import "JitsiMeetConferenceOptions+Private.h"
20
-#import "JitsiMeetRenderingView.h"
21
-#import "JitsiMeetView+Private.h"
22
-
23
-@interface JitsiMeetViewController ()
24
-
25
-@property (strong, nonatomic) JitsiMeetRenderingView *view;
26
-
27
-@end
28
-
29
-@implementation JitsiMeetViewController
30
-
31
-@dynamic view;
32
-
33
-- (instancetype)init {
34
-    self = [super init];
35
-    if (self) {
36
-        [self registerObservers];
37
-    }
38
-    
39
-    return self;
40
-}
41
-
42
-- (void)dealloc {
43
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
44
-}
45
-
46
-- (void)loadView {
47
-    [super loadView];
48
-    
49
-    self.view = [[JitsiMeetRenderingView alloc] init];
50
-    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
51
-}
52
-
53
-- (void)viewDidLoad {
54
-    [super viewDidLoad];
55
-
56
-    // Set a background color which is in accord with the JavaScript and Android
57
-    // parts of the application and causes less perceived visual flicker than
58
-    // the default background color.
59
-    self.view.backgroundColor = [UIColor colorWithRed:.07f green:.07f blue:.07f alpha:1];
60
-}
61
-
62
-- (void)join:(JitsiMeetConferenceOptions *)options withPiP:(BOOL)enablePiP {
63
-    self.view.isPiPEnabled = enablePiP;
64
-    [self.view setProps:options == nil ? @{} : [options asProps]];
65
-}
66
-
67
-- (void)leave {
68
-    [self.view setProps:@{}];
69
-}
70
-
71
-- (void)hangUp {
72
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
73
-    [externalAPI sendHangUp];
74
-}
75
-
76
-- (void)setAudioMuted:(BOOL)muted {
77
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
78
-    [externalAPI sendSetAudioMuted:muted];
79
-}
80
-
81
-- (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
82
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
83
-    [externalAPI sendEndpointTextMessage:message :to];
84
-}
85
-
86
-- (void)toggleScreenShare:(BOOL)enabled {
87
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
88
-    [externalAPI toggleScreenShare:enabled];
89
-}
90
-
91
-- (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler {
92
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
93
-    [externalAPI retrieveParticipantsInfo:completionHandler];
94
-}
95
-
96
-- (void)openChat:(NSString*)to  {
97
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
98
-    [externalAPI openChat:to];
99
-}
100
-
101
-- (void)closeChat  {
102
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
103
-    [externalAPI closeChat];
104
-}
105
-
106
-- (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
107
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
108
-    [externalAPI sendChatMessage:message :to];
109
-}
110
-
111
-- (void)setVideoMuted:(BOOL)muted {
112
-    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
113
-    [externalAPI sendSetVideoMuted:muted];
114
-}
115
-
116
-#pragma mark Private
117
-
118
-- (void)registerObservers {
119
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdateViewPropsNotification:) name:updateViewPropsNotificationName object:nil];
120
-}
121
-
122
-- (void)handleUpdateViewPropsNotification:(NSNotification *)notification {
123
-    NSDictionary *props = [notification.userInfo objectForKey:@"props"];
124
-    [self.view setProps:props];
125
-}
126
-
127
-@end

Loading…
Отказ
Запис