|
@@ -23,11 +23,15 @@ import org.jitsi.meet.sdk.JitsiMeetActivity;
|
23
|
23
|
import org.jitsi.meet.sdk.JitsiMeetView;
|
24
|
24
|
import org.jitsi.meet.sdk.JitsiMeetViewListener;
|
25
|
25
|
import org.jitsi.meet.sdk.invite.AddPeopleController;
|
|
26
|
+import org.jitsi.meet.sdk.invite.AddPeopleControllerListener;
|
|
27
|
+import org.jitsi.meet.sdk.invite.InviteController;
|
26
|
28
|
import org.jitsi.meet.sdk.invite.InviteControllerListener;
|
27
|
29
|
|
28
|
30
|
import com.calendarevents.CalendarEventsPackage;
|
29
|
31
|
|
|
32
|
+import java.util.ArrayList;
|
30
|
33
|
import java.util.HashMap;
|
|
34
|
+import java.util.List;
|
31
|
35
|
import java.util.Map;
|
32
|
36
|
|
33
|
37
|
/**
|
|
@@ -43,6 +47,14 @@ import java.util.Map;
|
43
|
47
|
* {@code react-native run-android}.
|
44
|
48
|
*/
|
45
|
49
|
public class MainActivity extends JitsiMeetActivity {
|
|
50
|
+ /**
|
|
51
|
+ * The query to perform through {@link AddPeopleController} when the
|
|
52
|
+ * {@code InviteButton} is tapped in order to exercise the public API of the
|
|
53
|
+ * feature invite. If {@code null}, the {@code InviteButton} will not be
|
|
54
|
+ * rendered.
|
|
55
|
+ */
|
|
56
|
+ private static final String ADD_PEOPLE_CONTROLLER_QUERY = null;
|
|
57
|
+
|
46
|
58
|
@Override
|
47
|
59
|
protected JitsiMeetView initializeView() {
|
48
|
60
|
JitsiMeetView view = super.initializeView();
|
|
@@ -93,23 +105,68 @@ public class MainActivity extends JitsiMeetActivity {
|
93
|
105
|
}
|
94
|
106
|
});
|
95
|
107
|
|
96
|
|
- view.getInviteController().setListener(
|
97
|
|
- new InviteControllerListener() {
|
98
|
|
- public void beginAddPeople(
|
99
|
|
- AddPeopleController addPeopleController) {
|
100
|
|
- // Log with the tag "ReactNative" in order to have the
|
101
|
|
- // log visible in react-native log-android as well.
|
102
|
|
- Log.d(
|
103
|
|
- "ReactNative",
|
104
|
|
- InviteControllerListener.class.getSimpleName()
|
105
|
|
- + ".beginAddPeople");
|
106
|
|
- }
|
107
|
|
- });
|
|
108
|
+ // inviteController
|
|
109
|
+ final InviteController inviteController
|
|
110
|
+ = view.getInviteController();
|
|
111
|
+
|
|
112
|
+ inviteController.setListener(new InviteControllerListener() {
|
|
113
|
+ public void beginAddPeople(
|
|
114
|
+ AddPeopleController addPeopleController) {
|
|
115
|
+ onInviteControllerBeginAddPeople(
|
|
116
|
+ inviteController,
|
|
117
|
+ addPeopleController);
|
|
118
|
+ }
|
|
119
|
+ });
|
|
120
|
+ inviteController.setAddPeopleEnabled(
|
|
121
|
+ ADD_PEOPLE_CONTROLLER_QUERY != null);
|
|
122
|
+ inviteController.setDialOutEnabled(
|
|
123
|
+ inviteController.isAddPeopleEnabled());
|
108
|
124
|
}
|
109
|
125
|
|
110
|
126
|
return view;
|
111
|
127
|
}
|
112
|
128
|
|
|
129
|
+ private void onAddPeopleControllerInviteSettled(
|
|
130
|
+ AddPeopleController addPeopleController,
|
|
131
|
+ List<Map<String, Object>> failedInvitees) {
|
|
132
|
+ // XXX Explicitly invoke endAddPeople on addPeopleController; otherwise,
|
|
133
|
+ // it is going to be memory-leaked in the associated InviteController
|
|
134
|
+ // and no subsequent InviteButton clicks/taps will be delivered.
|
|
135
|
+ // Technically, endAddPeople will automatically be invoked if there are
|
|
136
|
+ // no failedInviteees i.e. the invite succeeeded for all specified
|
|
137
|
+ // invitees.
|
|
138
|
+ addPeopleController.endAddPeople();
|
|
139
|
+ }
|
|
140
|
+
|
|
141
|
+ private void onAddPeopleControllerReceivedResults(
|
|
142
|
+ AddPeopleController addPeopleController,
|
|
143
|
+ List<Map<String, Object>> results,
|
|
144
|
+ String query) {
|
|
145
|
+ int size = results.size();
|
|
146
|
+
|
|
147
|
+ if (size > 0) {
|
|
148
|
+ // Exercise AddPeopleController's inviteById implementation.
|
|
149
|
+ List<String> ids = new ArrayList<>(size);
|
|
150
|
+
|
|
151
|
+ for (Map<String, Object> result : results) {
|
|
152
|
+ Object id = result.get("id");
|
|
153
|
+
|
|
154
|
+ if (id != null) {
|
|
155
|
+ ids.add(id.toString());
|
|
156
|
+ }
|
|
157
|
+ }
|
|
158
|
+
|
|
159
|
+ addPeopleController.inviteById(ids);
|
|
160
|
+
|
|
161
|
+ return;
|
|
162
|
+ }
|
|
163
|
+
|
|
164
|
+ // XXX Explicitly invoke endAddPeople on addPeopleController; otherwise,
|
|
165
|
+ // it is going to be memory-leaked in the associated InviteController
|
|
166
|
+ // and no subsequent InviteButton clicks/taps will be delivered.
|
|
167
|
+ addPeopleController.endAddPeople();
|
|
168
|
+ }
|
|
169
|
+
|
113
|
170
|
@Override
|
114
|
171
|
protected void onCreate(Bundle savedInstanceState) {
|
115
|
172
|
// As this is the Jitsi Meet app (i.e. not the Jitsi Meet SDK), we do
|
|
@@ -122,9 +179,61 @@ public class MainActivity extends JitsiMeetActivity {
|
122
|
179
|
super.onCreate(savedInstanceState);
|
123
|
180
|
}
|
124
|
181
|
|
|
182
|
+ private void onInviteControllerBeginAddPeople(
|
|
183
|
+ InviteController inviteController,
|
|
184
|
+ AddPeopleController addPeopleController) {
|
|
185
|
+ // Log with the tag "ReactNative" in order to have the log visible in
|
|
186
|
+ // react-native log-android as well.
|
|
187
|
+ Log.d(
|
|
188
|
+ "ReactNative",
|
|
189
|
+ InviteControllerListener.class.getSimpleName() + ".beginAddPeople");
|
|
190
|
+
|
|
191
|
+ String query = ADD_PEOPLE_CONTROLLER_QUERY;
|
|
192
|
+
|
|
193
|
+ if (query != null
|
|
194
|
+ && (inviteController.isAddPeopleEnabled()
|
|
195
|
+ || inviteController.isDialOutEnabled())) {
|
|
196
|
+ addPeopleController.setListener(new AddPeopleControllerListener() {
|
|
197
|
+ public void onInviteSettled(
|
|
198
|
+ AddPeopleController addPeopleController,
|
|
199
|
+ List<Map<String, Object>> failedInvitees) {
|
|
200
|
+ onAddPeopleControllerInviteSettled(
|
|
201
|
+ addPeopleController,
|
|
202
|
+ failedInvitees);
|
|
203
|
+ }
|
|
204
|
+
|
|
205
|
+ public void onReceivedResults(
|
|
206
|
+ AddPeopleController addPeopleController,
|
|
207
|
+ List<Map<String, Object>> results,
|
|
208
|
+ String query) {
|
|
209
|
+ onAddPeopleControllerReceivedResults(
|
|
210
|
+ addPeopleController,
|
|
211
|
+ results, query);
|
|
212
|
+ }
|
|
213
|
+ });
|
|
214
|
+ addPeopleController.performQuery(query);
|
|
215
|
+ } else {
|
|
216
|
+ // XXX Explicitly invoke endAddPeople on addPeopleController;
|
|
217
|
+ // otherwise, it is going to be memory-leaked in the associated
|
|
218
|
+ // InviteController and no subsequent InviteButton clicks/taps will
|
|
219
|
+ // be delivered.
|
|
220
|
+ addPeopleController.endAddPeople();
|
|
221
|
+ }
|
|
222
|
+ }
|
|
223
|
+
|
125
|
224
|
@Override
|
126
|
|
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
127
|
|
- CalendarEventsPackage.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
128
|
|
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
129
|
|
- }
|
|
225
|
+ public void onRequestPermissionsResult(
|
|
226
|
+ int requestCode,
|
|
227
|
+ String[] permissions,
|
|
228
|
+ int[] grantResults) {
|
|
229
|
+ CalendarEventsPackage.onRequestPermissionsResult(
|
|
230
|
+ requestCode,
|
|
231
|
+ permissions,
|
|
232
|
+ grantResults);
|
|
233
|
+
|
|
234
|
+ super.onRequestPermissionsResult(
|
|
235
|
+ requestCode,
|
|
236
|
+ permissions,
|
|
237
|
+ grantResults);
|
|
238
|
+ }
|
130
|
239
|
}
|