|
@@ -14,8 +14,16 @@
|
14
|
14
|
* limitations under the License.
|
15
|
15
|
*/
|
16
|
16
|
|
|
17
|
+#import <Availability.h>
|
|
18
|
+#import <CoreSpotlight/CoreSpotlight.h>
|
|
19
|
+#import <MobileCoreServices/MobileCoreServices.h>
|
|
20
|
+
|
|
21
|
+#import "Types.h"
|
17
|
22
|
#import "ViewController.h"
|
18
|
23
|
|
|
24
|
+// Needed for NSUserActivity suggestedInvocationPhrase
|
|
25
|
+@import Intents;
|
|
26
|
+
|
19
|
27
|
/**
|
20
|
28
|
* The query to perform through JMAddPeopleController when the InviteButton is
|
21
|
29
|
* tapped in order to exercise the public API of the feature invite. If nil, the
|
|
@@ -33,11 +41,10 @@ static NSString * const ADD_PEOPLE_CONTROLLER_QUERY = nil;
|
33
|
41
|
[super viewDidLoad];
|
34
|
42
|
|
35
|
43
|
JitsiMeetView *view = (JitsiMeetView *) self.view;
|
|
44
|
+ view.delegate = self;
|
36
|
45
|
|
37
|
46
|
#ifdef DEBUG
|
38
|
47
|
|
39
|
|
- view.delegate = self;
|
40
|
|
-
|
41
|
48
|
// inviteController
|
42
|
49
|
JMInviteController *inviteController = view.inviteController;
|
43
|
50
|
inviteController.delegate = self;
|
|
@@ -56,12 +63,13 @@ static NSString * const ADD_PEOPLE_CONTROLLER_QUERY = nil;
|
56
|
63
|
[view loadURL:nil];
|
57
|
64
|
}
|
58
|
65
|
|
59
|
|
-#if DEBUG
|
|
66
|
+
|
60
|
67
|
|
61
|
68
|
// JitsiMeetViewDelegate
|
62
|
69
|
|
63
|
70
|
- (void)_onJitsiMeetViewDelegateEvent:(NSString *)name
|
64
|
71
|
withData:(NSDictionary *)data {
|
|
72
|
+#if DEBUG
|
65
|
73
|
NSLog(
|
66
|
74
|
@"[%s:%d] JitsiMeetViewDelegate %@ %@",
|
67
|
75
|
__FILE__, __LINE__, name, data);
|
|
@@ -70,6 +78,7 @@ static NSString * const ADD_PEOPLE_CONTROLLER_QUERY = nil;
|
70
|
78
|
[NSThread isMainThread],
|
71
|
79
|
@"JitsiMeetViewDelegate %@ method invoked on a non-main thread",
|
72
|
80
|
name);
|
|
81
|
+#endif
|
73
|
82
|
}
|
74
|
83
|
|
75
|
84
|
- (void)conferenceFailed:(NSDictionary *)data {
|
|
@@ -78,6 +87,36 @@ static NSString * const ADD_PEOPLE_CONTROLLER_QUERY = nil;
|
78
|
87
|
|
79
|
88
|
- (void)conferenceJoined:(NSDictionary *)data {
|
80
|
89
|
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data];
|
|
90
|
+
|
|
91
|
+ // Register a NSUserActivity for this conference so it can be invoked as a
|
|
92
|
+ // Siri shortcut. This is only supported in iOS >= 12.
|
|
93
|
+#ifdef __IPHONE_12_0
|
|
94
|
+ if (@available(iOS 12.0, *)) {
|
|
95
|
+ NSUserActivity *userActivity
|
|
96
|
+ = [[NSUserActivity alloc] initWithActivityType:JitsiMeetConferenceActivityType];
|
|
97
|
+
|
|
98
|
+ NSString *urlStr = data[@"url"];
|
|
99
|
+ NSURL *url = [NSURL URLWithString:urlStr];
|
|
100
|
+ NSString *conference = [url.pathComponents lastObject];
|
|
101
|
+
|
|
102
|
+ userActivity.title = [NSString stringWithFormat:@"Join %@", conference];
|
|
103
|
+ userActivity.suggestedInvocationPhrase = @"Join my Jitsi meeting";
|
|
104
|
+ userActivity.userInfo = @{@"url": urlStr};
|
|
105
|
+ [userActivity setEligibleForSearch:YES];
|
|
106
|
+ [userActivity setEligibleForPrediction:YES];
|
|
107
|
+ [userActivity setPersistentIdentifier:urlStr];
|
|
108
|
+
|
|
109
|
+ // Subtitle
|
|
110
|
+ CSSearchableItemAttributeSet *attributes
|
|
111
|
+ = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];
|
|
112
|
+ attributes.contentDescription = urlStr;
|
|
113
|
+ userActivity.contentAttributeSet = attributes;
|
|
114
|
+
|
|
115
|
+ self.userActivity = userActivity;
|
|
116
|
+ [userActivity becomeCurrent];
|
|
117
|
+ }
|
|
118
|
+#endif
|
|
119
|
+
|
81
|
120
|
}
|
82
|
121
|
|
83
|
122
|
- (void)conferenceLeft:(NSDictionary *)data {
|
|
@@ -96,6 +135,8 @@ static NSString * const ADD_PEOPLE_CONTROLLER_QUERY = nil;
|
96
|
135
|
[self _onJitsiMeetViewDelegateEvent:@"LOAD_CONFIG_ERROR" withData:data];
|
97
|
136
|
}
|
98
|
137
|
|
|
138
|
+#if DEBUG
|
|
139
|
+
|
99
|
140
|
// JMInviteControllerDelegate
|
100
|
141
|
|
101
|
142
|
- (void)beginAddPeople:(JMAddPeopleController *)addPeopleController {
|