Merge: Prepare for the android UI module
[nit.git] / lib / android / intent / intent_api10.nit
1 # This file is part of NIT (http://www.nitlanguage.org).
2 #
3 # Copyright 2014 Frédéric Vachon <fredvac@gmail.com>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Services allowing to launch activities and start/stop services using
18 # `android.content.Intent` for the android platform
19 module intent_api10
20
21 import native_app_glue
22 import android::bundle
23 import serialization
24 private import json_serialization
25
26 in "Java" `{
27 import android.content.Intent;
28 import android.net.Uri;
29 import android.graphics.Rect;
30 import java.util.Set;
31 import java.util.ArrayList;
32 `}
33
34 extern class NativeIntent in "Java" `{ android.content.Intent `}
35 super JavaObject
36 redef type SELF: NativeIntent
37
38 fun add_category(category: JavaString) in "Java" `{ recv.addCategory(category); `}
39 fun add_flags(flags: Int) in "Java" `{ recv.addFlags((int)flags); `}
40 fun filter_equals(other: NativeIntent): Bool in "Java" `{
41 return recv.filterEquals(other);
42 `}
43 fun action: JavaString in "Java" `{ return recv.getAction(); `}
44 fun boolean_array_extra(name: JavaString): Array[Bool] import Array[Bool],
45 Array[Bool].push in "Java" `{
46 boolean[] java_array = recv.getBooleanArrayExtra(name);
47 int nit_array = new_Array_of_Bool();
48
49 for(int i=0; i < java_array.length; ++i)
50 Array_of_Bool_push(nit_array, java_array[i]);
51
52 return nit_array;
53 `}
54 fun boolean_extra(name: JavaString, def_value: Bool): Bool in "Java" `{
55 return recv.getBooleanExtra(name, def_value);
56 `}
57 fun byte_array_extra(name: JavaString): Array[Int] import Array[Int],
58 Array[Int].add in "Java" `{
59 byte[] java_array = recv.getByteArrayExtra(name);
60 int nit_array = new_Array_of_Int();
61
62 for (int i=0; i < java_array.length; ++i)
63 Array_of_Int_add(nit_array, java_array[i]);
64
65 return nit_array;
66 `}
67 fun byte_extra(name: JavaString, def_value: Int): Int in "Java" `{
68 return (int) recv.getByteExtra(name, (byte) def_value);
69 `}
70 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
71 fun char_array_extra(name: JavaString): Array[Char] import Array[Char],
72 Array[Char].add in "Java" `{
73 char[] java_array = recv.getCharArrayExtra(name);
74 int nit_array = new_Array_of_Char();
75
76 for (int i = 0; i < java_array.length; ++i)
77 Array_of_Char_add(nit_array, java_array[i]);
78
79 return nit_array;
80 `}
81 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
82 fun char_extra(name: JavaString, def_value: Char): Char in "Java" `{
83 return recv.getCharExtra(name, def_value);
84 `}
85 fun char_sequence_array_extra(name: JavaString): Array[String]
86 import StringCopyArray, StringCopyArray.add, StringCopyArray.collection in "Java" `{
87 CharSequence[] java_array = recv.getCharSequenceArrayExtra(name);
88 int nit_array = new_StringCopyArray();
89
90 for (int i = 0; i < java_array.length; ++i)
91 StringCopyArray_add(nit_array, (String) java_array[i]);
92
93 return StringCopyArray_collection(nit_array);
94 `}
95 fun char_sequence_array_list_extra(name: JavaString): Array[String]
96 import StringCopyArray, StringCopyArray.add, StringCopyArray.collection in "Java" `{
97 ArrayList<CharSequence> java_array = recv.getCharSequenceArrayListExtra(name);
98 int nit_array = new_StringCopyArray();
99
100 if (java_array == null) return nit_array;
101
102 for (CharSequence element: java_array)
103 StringCopyArray_add(nit_array, (String) element);
104
105 return StringCopyArray_collection(nit_array);
106 `}
107 fun char_sequence_extra(name: JavaString): JavaString in "Java" `{
108 return (String) recv.getCharSequenceExtra(name);
109 `}
110 fun categories: HashSet[String] import StringCopyHashSet,
111 StringCopyHashSet.add, StringCopyHashSet.collection in "Java" `{
112 Set<String> java_set = recv.getCategories();
113 int nit_hashset = new_StringCopyHashSet();
114
115 if (java_set == null) return nit_hashset;
116
117 for (String element: java_set)
118 StringCopyHashSet_add(nit_hashset, element);
119
120 return StringCopyHashSet_collection(nit_hashset);
121 `}
122 # Returns the Uri as an encoded String
123 fun data: JavaString in "Java" `{ return recv.getDataString(); `}
124 fun double_array_extra(name: JavaString): Array[Float] import Array[Float],
125 Array[Float].push in "Java" `{
126 double[] java_array = recv.getDoubleArrayExtra(name);
127 int nit_array = new_Array_of_Float();
128
129 for(int i=0; i < java_array.length; ++i)
130 Array_of_Float_push(nit_array, java_array[i]);
131
132 return nit_array;
133 `}
134 fun double_extra(name: JavaString, def_value: Float): Float in "Java" `{
135 return recv.getDoubleExtra(name, def_value);
136 `}
137 fun flags: Int in "Java" `{ return recv.getFlags(); `}
138 fun float_array_extra(name: JavaString): Array[Float] import Array[Float],
139 Array[Float].push in "Java" `{
140 float[] java_array = recv.getFloatArrayExtra(name);
141 int nit_array = new_Array_of_Float();
142
143 for(int i=0; i < java_array.length; ++i)
144 Array_of_Float_push(nit_array, java_array[i]);
145
146 return nit_array;
147 `}
148 fun float_extra(name: JavaString, def_value: Float): Float in "Java" `{
149 return recv.getFloatExtra(name, (float) def_value);
150 `}
151 fun int_array_extra(name: JavaString): Array[Int] import Array[Int],
152 Array[Int].push in "Java" `{
153 int[] java_array = recv.getIntArrayExtra(name);
154 int nit_array = new_Array_of_Int();
155
156 for(int i=0; i < java_array.length; ++i)
157 Array_of_Int_push(nit_array, java_array[i]);
158
159 return nit_array;
160 `}
161 fun int_extra(name: JavaString, def_value: Int): Int in "Java" `{
162 return recv.getIntExtra(name, (int)def_value);
163 `}
164 fun long_array_extra(name: JavaString): Array[Int] import Array[Int],
165 Array[Int].push in "Java" `{
166 long[] java_array = recv.getLongArrayExtra(name);
167 int nit_array = new_Array_of_Int();
168
169 for(int i=0; i < java_array.length; ++i)
170 Array_of_Int_push(nit_array, (int) java_array[i]);
171
172 return nit_array;
173 `}
174 fun long_extra(name: JavaString, def_value: Int): Int in "Java" `{
175 return (int) recv.getLongExtra(name, def_value);
176 `}
177 fun get_package: JavaString in "Java" `{ return recv.getPackage(); `}
178 fun scheme: JavaString in "Java" `{ return recv.getScheme(); `}
179 fun short_array_extra(name: JavaString): Array[Int] import Array[Int],
180 Array[Int].push in "Java" `{
181 short[] java_array = recv.getShortArrayExtra(name);
182 int nit_array = new_Array_of_Int();
183
184 for(int i=0; i < java_array.length; ++i)
185 Array_of_Int_push(nit_array, (int) java_array[i]);
186
187 return nit_array;
188 `}
189 fun short_extra(name: JavaString, def_value: Int): Int in "Java" `{
190 return recv.getShortExtra(name, (short) def_value);
191 `}
192 fun string_array_extra(name: JavaString): Array[String]
193 import StringCopyArray, StringCopyArray.add, StringCopyArray.collection in "Java" `{
194 String[] java_array = recv.getStringArrayExtra(name);
195 int nit_array = new_StringCopyArray();
196
197 for(int i=0; i < java_array.length; ++i)
198 StringCopyArray_add(nit_array, java_array[i]);
199
200 return StringCopyArray_collection(nit_array);
201 `}
202 fun string_array_list_extra(name: JavaString): Array[String]
203 import StringCopyArray, StringCopyArray.add, StringCopyArray.collection in "Java" `{
204 ArrayList<String> java_array = recv.getStringArrayListExtra(name);
205 int nit_array = new_StringCopyArray();
206
207 for (String element: java_array)
208 StringCopyArray_add(nit_array, element);
209
210 return StringCopyArray_collection(nit_array);
211 `}
212 fun string_extra(name: JavaString): JavaString in "Java" `{
213 String return_value = recv.getStringExtra(name);
214 if (return_value == null) return "";
215
216 return return_value;
217 `}
218 fun get_type: JavaString in "Java" `{ return recv.getType(); `}
219 fun has_category(category: JavaString): Bool in "Java" `{
220 return recv.hasCategory(category);
221 `}
222 fun has_extra(extra: JavaString): Bool in "Java" `{ return recv.hasExtra(extra); `}
223 fun has_file_descriptors: Bool in "Java" `{ return recv.hasFileDescriptors(); `}
224 fun add_extra_double(name: JavaString, value: Float): NativeIntent in "Java" `{
225 return recv.putExtra(name, value);
226 `}
227 fun add_extra_array_of_double(name: JavaString, value: Array[Float]): NativeIntent
228 import Array[Float].length, Array[Float].[] in "Java" `{
229 double[] java_array = new double[(int)Array_of_Float_length(value)];
230
231 for (int i=0; i < java_array.length; ++i)
232 java_array[i] = Array_of_Float__index(value, i);
233
234 return recv.putExtra(name, java_array);
235 `}
236 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
237 fun add_extra_char(name: JavaString, value: Char): NativeIntent in "Java" `{
238 return recv.putExtra(name, value);
239 `}
240 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
241 fun add_extra_array_of_char(name: JavaString, value: Array[Char]): NativeIntent
242 import Array[Char].length, Array[Char].[] in "Java" `{
243 char[] java_array = new char[(int)Array_of_Char_length(value)];
244
245 for (int i=0; i < java_array.length; ++i)
246 java_array[i] = Array_of_Char__index(value, i);
247
248 return recv.putExtra(name, java_array);
249 `}
250 fun add_extra_char_sequence(name: JavaString, value: JavaString): NativeIntent
251 in "Java" `{
252 return recv.putExtra(name, value);
253 `}
254 fun add_extra_array_of_char_sequence(name: JavaString, value: Array[JavaString]):
255 NativeIntent import Array[JavaString].length, Array[JavaString].[] in "Java" `{
256 CharSequence[] java_array = new CharSequence[(int)Array_of_JavaString_length(value)];
257
258 for (int i=0; i < java_array.length; ++i)
259 java_array[i] = Array_of_JavaString__index(value, i);
260
261 return recv.putExtra(name, java_array);
262 `}
263 fun add_extra_bundle(name: JavaString, value: NativeBundle): NativeIntent
264 in "Java" `{
265 return recv.putExtra(name, value);
266 `}
267 fun add_extra_int(name: JavaString, value: Int): NativeIntent in "Java" `{
268 return recv.putExtra(name, value);
269 `}
270 fun add_extra_array_of_int(name: JavaString, value: Array[Int]): NativeIntent
271 import Array[Int].length, Array[Int].[] in "Java" `{
272 int[] java_array = new int[(int)Array_of_Int_length(value)];
273
274 for (int i=0; i < java_array.length; ++i)
275 java_array[i] = (int)Array_of_Int__index(value, i);
276
277 return recv.putExtra(name, java_array);
278 `}
279 fun add_extra_array_list_of_int(name: JavaString, value: Array[Int]): NativeIntent
280 import Array[Int].length, Array[Int].[] in "Java" `{
281 int length = (int)Array_of_Int_length(value);
282 ArrayList<Integer> java_array = new ArrayList<Integer>(length);
283
284 for (int i=0; i < length; ++i)
285 java_array.add((int)Array_of_Int__index(value, i));
286
287 return recv.putExtra(name, java_array);
288 `}
289 fun add_extra_byte(name: JavaString, value: Int): NativeIntent in "Java" `{
290 return recv.putExtra(name, (byte) value);
291 `}
292 fun add_extra_array_of_byte(name: JavaString, value: Int): NativeIntent in "Java" `{
293 return recv.putExtra(name, (byte) value);
294 `}
295 fun add_extra_long(name: JavaString, value: Int): NativeIntent in "Java" `{
296 return recv.putExtra(name, value);
297 `}
298 fun add_extra_array_of_long(name: JavaString, value: Array[Int]): NativeIntent
299 import Array[Int].length, Array[Int].[] in "Java" `{
300 long[] java_array = new long[(int)Array_of_Int_length(value)];
301
302 for (int i=0; i < java_array.length; ++i)
303 java_array[i] = Array_of_Int__index(value, i);
304
305 return recv.putExtra(name, java_array);
306 `}
307 fun add_extra_float(name: JavaString, value: Float): NativeIntent in "Java" `{
308 return recv.putExtra(name, value);
309 `}
310 fun add_extra_array_of_float(name: JavaString, value: Array[Float]): NativeIntent
311 import Array[Float].length, Array[Float].[] in "Java" `{
312 float[] java_array = new float[(int)Array_of_Float_length(value)];
313
314 for (int i=0; i < java_array.length; ++i)
315 java_array[i] = (float) Array_of_Float__index(value, i);
316
317 return recv.putExtra(name, java_array);
318 `}
319 fun add_extra_string(name: JavaString, value: JavaString): NativeIntent in "Java" `{
320 return recv.putExtra(name, value);
321 `}
322 fun add_extra_array_of_string(name: JavaString, value: Array[JavaString]): NativeIntent
323 import Array[JavaString].length, Array[JavaString].[] in "Java" `{
324 String[] java_array = new String[(int)Array_of_JavaString_length(value)];
325
326 for (int i=0; i < java_array.length; ++i)
327 java_array[i] = Array_of_JavaString__index(value, i);
328
329 return recv.putExtra(name, java_array);
330 `}
331 fun add_extra_array_list_of_string(name: JavaString, value: Array[JavaString]): NativeIntent
332 import Array[JavaString].length, Array[JavaString].[] in "Java" `{
333 int length = (int)Array_of_JavaString_length(value);
334 ArrayList<String> java_array = new ArrayList<String>(length);
335
336 for (int i=0; i < length; ++i) {
337 java_array.add(Array_of_JavaString__index(value, i));
338 }
339
340 return recv.putExtra(name, java_array);
341 `}
342 fun add_extra_bool(name: JavaString, value: Bool): NativeIntent in "Java" `{
343 return recv.putExtra(name, value);
344 `}
345 fun add_extra_array_of_bool(name: JavaString, value: Array[Bool]): NativeIntent
346 import Array[Bool].length, Array[Bool].[] in "Java" `{
347 boolean[] java_array = new boolean[(int)Array_of_Bool_length(value)];
348
349 for (int i=0; i < java_array.length; ++i)
350 java_array[i] = Array_of_Bool__index(value, i);
351
352 return recv.putExtra(name, java_array);
353 `}
354 fun add_extra_short(name: JavaString, value: Int): NativeIntent in "Java" `{
355 return recv.putExtra(name, value);
356 `}
357 fun add_extra_array_of_short(name: JavaString, value: Array[Int]): NativeIntent
358 import Array[Int].length, Array[Int].[] in "Java" `{
359 short[] java_array = new short[(int)Array_of_Int_length(value)];
360
361 for (int i=0; i < java_array.length; ++i)
362 java_array[i] = (short) Array_of_Int__index(value, i);
363
364 return recv.putExtra(name, java_array);
365 `}
366 fun copy_extras(src: NativeIntent): NativeIntent in "Java" `{ return recv.putExtras(src); `}
367 fun add_extras(src: NativeBundle): NativeIntent in "Java" `{ return recv.putExtras(src); `}
368 fun remove_category(category: JavaString) in "Java" `{ recv.removeCategory(category); `}
369 fun remove_extra(name: JavaString) in "Java" `{ recv.removeExtra(name); `}
370 fun replace_extras(src: NativeIntent): NativeIntent in "Java" `{
371 return recv.replaceExtras(src);
372 `}
373 fun resolve_activity(pm: NativePackageManager): NativeComponentName in "Java" `{
374 return recv.resolveActivity(pm);
375 `}
376 fun resolve_type(context: NativeActivity): JavaString in "Java" `{
377 return recv.resolveType(context);
378 `}
379 fun action=(action: JavaString): NativeIntent in "Java" `{ return recv.setAction(action); `}
380 fun class_=(package_context: NativeActivity, class_name: JavaString): NativeIntent
381 in "Java" `{
382 Class<?> java_class = null;
383 try {
384 java_class = Class.forName(class_name);
385 } catch (Exception e) {
386 e.getStackTrace();
387 }
388 return recv.setClass(package_context, java_class);
389 `}
390 fun class_name=(package_context: NativeActivity, class_name: JavaString): NativeIntent
391 in "Java" `{
392 return recv.setClassName(package_context, class_name);
393 `}
394 fun set_class_name(package_name: JavaString, class_name: JavaString): NativeIntent
395 in "Java" `{
396 return recv.setClassName(package_name, class_name);
397 `}
398 fun data=(data_uri: JavaString): NativeIntent in "Java" `{
399 return recv.setData(Uri.parse(data_uri));
400 `}
401 fun data_and_type=(data_uri: JavaString, type_: JavaString): NativeIntent in "Java" `{
402 return recv.setDataAndType(Uri.parse(data_uri), type_);
403 `}
404 fun flags=(flags: Int): NativeIntent in "Java" `{ return recv.setFlags((int)flags); `}
405 fun package_name=(package_name: JavaString): NativeIntent in "Java" `{
406 return recv.setPackage(package_name);
407 `}
408 fun source_bounds=(left, top, right, bottom: Int) in "Java" `{
409 recv.setSourceBounds(new Rect((int)left, (int)top, (int)right, (int)bottom));
410 `}
411 fun mime_type=(mime_type: JavaString): NativeIntent in "Java" `{
412 return recv.setType(mime_type);
413 `}
414 fun to_native_s: JavaString in "Java" `{ return recv.toString(); `}
415 fun to_uri(flags: Int): JavaString in "Java" `{ return recv.toUri((int)flags); `}
416
417 # HACK for bug #845
418 redef fun new_global_ref import sys, Sys.jni_env `{
419 Sys sys = NativeIntent_sys(recv);
420 JNIEnv *env = Sys_jni_env(sys);
421 return (*env)->NewGlobalRef(env, recv);
422 `}
423 end
424
425 extern class NativePackageManager in "Java" `{ android.content.pm.PackageManager `}
426 end
427
428 extern class NativeComponentName in "Java" `{ android.content.ComponentName `}
429 end
430
431 # Contains a set of actions that can be performed by the intent
432 # Designed to be used with the `intent_action` function
433 # Example : `intent_action.main`
434 #
435 # For further details on actions, refer to Android Intent documentation
436 class Action
437
438 # Standard Activity Action
439 fun main: JavaString in "Java" `{ return Intent.ACTION_MAIN; `}
440 fun view: JavaString in "Java" `{ return Intent.ACTION_VIEW; `}
441 fun attach_data: JavaString in "Java" `{ return Intent.ACTION_ATTACH_DATA; `}
442 fun edit: JavaString in "Java" `{ return Intent.ACTION_EDIT; `}
443 fun pick: JavaString in "Java" `{ return Intent.ACTION_PICK; `}
444 fun chooser: JavaString in "Java" `{ return Intent.ACTION_CHOOSER; `}
445 fun get_content: JavaString in "Java" `{ return Intent.ACTION_GET_CONTENT; `}
446 fun dial: JavaString in "Java" `{ return Intent.ACTION_DIAL; `}
447 fun call: JavaString in "Java" `{ return Intent.ACTION_CALL; `}
448 fun send: JavaString in "Java" `{ return Intent.ACTION_SEND; `}
449 fun sent_to: JavaString in "Java" `{ return Intent.ACTION_SENDTO; `}
450 fun answer: JavaString in "Java" `{ return Intent.ACTION_ANSWER; `}
451 fun insert: JavaString in "Java" `{ return Intent.ACTION_INSERT; `}
452 fun delete: JavaString in "Java" `{ return Intent.ACTION_DELETE; `}
453 fun run: JavaString in "Java" `{ return Intent.ACTION_RUN; `}
454 fun sync: JavaString in "Java" `{ return Intent.ACTION_SYNC; `}
455 fun pick_activity: JavaString in "Java" `{ return Intent.ACTION_PICK_ACTIVITY; `}
456 fun search: JavaString in "Java" `{ return Intent.ACTION_SEARCH; `}
457 fun web_search: JavaString in "Java" `{ return Intent.ACTION_WEB_SEARCH; `}
458 fun factory_test: JavaString in "Java" `{ return Intent.ACTION_FACTORY_TEST; `}
459
460 # Standard Broadcast Actions
461 fun time_tick: JavaString in "Java" `{ return Intent.ACTION_TIME_TICK; `}
462 fun time_changed: JavaString in "Java" `{ return Intent.ACTION_TIME_CHANGED; `}
463 fun timezone_changed: JavaString in "Java" `{ return Intent.ACTION_TIMEZONE_CHANGED; `}
464 fun boot_completed: JavaString in "Java" `{ return Intent.ACTION_BOOT_COMPLETED; `}
465 fun package_added: JavaString in "Java" `{ return Intent.ACTION_PACKAGE_ADDED; `}
466 fun package_changed: JavaString in "Java" `{ return Intent.ACTION_PACKAGE_CHANGED; `}
467 fun package_removed: JavaString in "Java" `{ return Intent.ACTION_PACKAGE_REMOVED; `}
468 fun package_restarted: JavaString in "Java" `{ return Intent.ACTION_PACKAGE_RESTARTED; `}
469 fun package_data_cleared: JavaString in "Java" `{
470 return Intent.ACTION_PACKAGE_DATA_CLEARED;
471 `}
472 fun uid_removed: JavaString in "Java" `{ return Intent.ACTION_UID_REMOVED; `}
473 fun battery_changed: JavaString in "Java" `{ return Intent.ACTION_BATTERY_CHANGED; `}
474 fun power_connected: JavaString in "Java" `{ return Intent.ACTION_POWER_CONNECTED; `}
475 fun power_disconnected: JavaString in "Java" `{ return Intent.ACTION_POWER_DISCONNECTED; `}
476 fun shutdown: JavaString in "Java" `{ return Intent.ACTION_SHUTDOWN; `}
477 end
478
479 # A category gives extra information about the action to execute
480 # Designed to be used with the `intent_category` function
481 # Example : `intent_category.home`
482 #
483 # For further details on categories, refer to Android Intent documentation
484 class Category
485 fun alternative: JavaString in "Java" `{ return Intent.CATEGORY_ALTERNATIVE; `}
486 fun car_dock: JavaString in "Java" `{ return Intent.CATEGORY_CAR_DOCK; `}
487 fun car_mode: JavaString in "Java" `{ return Intent.CATEGORY_CAR_MODE; `}
488 fun default: JavaString in "Java" `{ return Intent.CATEGORY_DEFAULT; `}
489 fun desk_dock: JavaString in "Java" `{ return Intent.CATEGORY_DESK_DOCK; `}
490 fun development_preference: JavaString in "Java" `{
491 return Intent.CATEGORY_DEVELOPMENT_PREFERENCE;
492 `}
493 fun embed: JavaString in "Java" `{ return Intent.CATEGORY_EMBED; `}
494 fun framework_instrumentation_test: JavaString in "Java" `{
495 return Intent.CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST;
496 `}
497 fun home: JavaString in "Java" `{ return Intent.CATEGORY_HOME; `}
498 fun info: JavaString in "Java" `{ return Intent.CATEGORY_INFO; `}
499 fun launcher: JavaString in "Java" `{ return Intent.CATEGORY_LAUNCHER; `}
500 fun monkey: JavaString in "Java" `{ return Intent.CATEGORY_MONKEY; `}
501 fun openable: JavaString in "Java" `{ return Intent.CATEGORY_OPENABLE; `}
502 fun preference: JavaString in "Java" `{ return Intent.CATEGORY_PREFERENCE; `}
503 fun sample_code: JavaString in "Java" `{ return Intent.CATEGORY_SAMPLE_CODE; `}
504 fun selected_alternative: JavaString in "Java" `{
505 return Intent.CATEGORY_SELECTED_ALTERNATIVE;
506 `}
507 fun tab: JavaString in "Java" `{ return Intent.CATEGORY_TAB; `}
508 fun test: JavaString in "Java" `{ return Intent.CATEGORY_TEST; `}
509 fun unit_test: JavaString in "Java" `{ return Intent.CATEGORY_UNIT_TEST; `}
510 end
511
512 # Used to add any additional information.
513 #
514 # For further details on extras, refer to Android Intent documentation
515 class Extra
516 fun alarm_count: JavaString in "Java" `{ return Intent.EXTRA_ALARM_COUNT; `}
517 fun bcc: JavaString in "Java" `{ return Intent.EXTRA_BCC; `}
518 fun cc: JavaString in "Java" `{ return Intent.EXTRA_CC; `}
519 fun changed_component_name: JavaString in "Java" `{
520 return Intent.EXTRA_CHANGED_COMPONENT_NAME;
521 `}
522 fun changed_component_name_list: JavaString in "Java" `{
523 return Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST;
524 `}
525 fun changed_package_list: JavaString in "Java" `{
526 return Intent.EXTRA_CHANGED_PACKAGE_LIST;
527 `}
528 fun changed_uid_list: JavaString in "Java" `{ return Intent.EXTRA_CHANGED_UID_LIST; `}
529 fun data_removed: JavaString in "Java" `{ return Intent.EXTRA_DATA_REMOVED; `}
530 fun dock_state: JavaString in "Java" `{ return Intent.EXTRA_DOCK_STATE; `}
531 fun dock_state_car: Int in "Java" `{ return Intent.EXTRA_DOCK_STATE_CAR; `}
532 fun dock_state_desk: Int in "Java" `{ return Intent.EXTRA_DOCK_STATE_DESK; `}
533 fun dock_state_undocked: Int in "Java" `{ return Intent.EXTRA_DOCK_STATE_UNDOCKED; `}
534 fun dont_kill_app: JavaString in "Java" `{ return Intent.EXTRA_DONT_KILL_APP; `}
535 fun email: JavaString in "Java" `{ return Intent.EXTRA_EMAIL; `}
536 fun initial_intents: JavaString in "Java" `{ return Intent.EXTRA_INITIAL_INTENTS; `}
537 fun intent: JavaString in "Java" `{ return Intent.EXTRA_INTENT; `}
538 fun key_event: JavaString in "Java" `{ return Intent.EXTRA_KEY_EVENT; `}
539 fun phone_number: JavaString in "Java" `{ return Intent.EXTRA_PHONE_NUMBER; `}
540 fun remote_intent_token: JavaString in "Java" `{
541 return Intent.EXTRA_REMOTE_INTENT_TOKEN;
542 `}
543 fun replacing: JavaString in "Java" `{ return Intent.EXTRA_REPLACING; `}
544 fun shortcut_icon: JavaString in "Java" `{ return Intent.EXTRA_SHORTCUT_ICON; `}
545 fun shortcut_icon_resource: JavaString in "Java" `{
546 return Intent.EXTRA_SHORTCUT_ICON_RESOURCE;
547 `}
548 fun shortcut_intent: JavaString in "Java" `{ return Intent.EXTRA_SHORTCUT_INTENT; `}
549 fun stream: JavaString in "Java" `{ return Intent.EXTRA_STREAM; `}
550 fun subject: JavaString in "Java" `{ return Intent.EXTRA_SUBJECT; `}
551 fun template: JavaString in "Java" `{ return Intent.EXTRA_TEMPLATE; `}
552 fun text: JavaString in "Java" `{ return Intent.EXTRA_TEXT; `}
553 fun title: JavaString in "Java" `{ return Intent.EXTRA_TITLE; `}
554 fun uid: JavaString in "Java" `{ return Intent.EXTRA_UID; `}
555 end
556
557 # A Flag controls how to handle the Intent
558 # Designed to be used with the `intent_flag` function
559 # Example : `intent_flag.activity_brought_to_front`
560 #
561 # For further details on flags, refer to Android Intent documentation
562 class Flag
563 fun activity_brought_to_front: Int in "Java" `{
564 return Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
565 `}
566 fun activity_clear_top: Int in "Java" `{
567 return Intent.FLAG_ACTIVITY_CLEAR_TOP;
568 `}
569 fun activity_clear_when_task_reset: Int in "Java" `{
570 return Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
571 `}
572 fun activity_exclude_from_recents: Int in "Java" `{
573 return Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
574 `}
575 fun activity_forward_result: Int in "Java" `{
576 return Intent.FLAG_ACTIVITY_FORWARD_RESULT;
577 `}
578 fun activity_launched_from_history: Int in "Java" `{
579 return Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
580 `}
581 fun activity_multiple_task: Int in "Java" `{
582 return Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
583 `}
584 fun activity_new_task: Int in "Java" `{
585 return Intent.FLAG_ACTIVITY_NEW_TASK;
586 `}
587 fun activity_no_animation: Int in "Java" `{
588 return Intent.FLAG_ACTIVITY_NO_ANIMATION;
589 `}
590 fun activity_no_history: Int in "Java" `{
591 return Intent.FLAG_ACTIVITY_NO_HISTORY;
592 `}
593 fun activity_no_user_action: Int in "Java" `{
594 return Intent.FLAG_ACTIVITY_NO_USER_ACTION;
595 `}
596 fun activity_previous_is_top: Int in "Java" `{
597 return Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP;
598 `}
599 fun activity_reorder_to_front: Int in "Java" `{
600 return Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
601 `}
602 fun activity_reset_task_if_needed: Int in "Java" `{
603 return Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;
604 `}
605 fun activity_single_top: Int in "Java" `{
606 return Intent.FLAG_ACTIVITY_SINGLE_TOP;
607 `}
608 fun debug_log_resolution: Int in "Java" `{
609 return Intent.FLAG_DEBUG_LOG_RESOLUTION;
610 `}
611 fun from_background: Int in "Java" `{
612 return Intent.FLAG_FROM_BACKGROUND;
613 `}
614 fun grant_read_uri_permission: Int in "Java" `{
615 return Intent.FLAG_GRANT_READ_URI_PERMISSION;
616 `}
617 fun grant_write_uri_permission: Int in "Java" `{
618 return Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
619 `}
620 fun receiver_registered_only: Int in "Java" `{
621 return Intent.FLAG_RECEIVER_REGISTERED_ONLY;
622 `}
623 fun receiver_replace_pending: Int in "Java" `{
624 return Intent.FLAG_RECEIVER_REPLACE_PENDING;
625 `}
626 end
627
628 # Services allowing to launch an activity and start/stop services
629 class Intent
630 protected var intent: NativeIntent
631 protected var context: NativeActivity
632
633 init (app: App)
634 do
635 self.context = app.native_activity
636 setup
637 end
638
639 private fun set_vars(intent: NativeIntent) do
640 self.intent = intent.new_global_ref
641 end
642
643 private fun setup import context, intent, set_vars in "Java" `{
644 Intent intent = new Intent();
645 Intent_set_vars(recv, intent);
646 `}
647
648 # The general action to be performed
649 #
650 # Example :
651 # ~~~
652 # intent.action = intent_action.view.to_s
653 # ~~~
654 fun action=(action: String)
655 do
656 sys.jni_env.push_local_frame(1)
657 intent.action = action.to_java_string
658 sys.jni_env.pop_local_frame
659 end
660
661 # Returns the action to be performed or `null` if none
662 fun action: nullable String do
663 var result = intent.action.to_s
664 if result == "" then return null
665 return result
666 end
667
668 # Add category to the intent
669 # Only activities providing all of the requested categories will be used
670 #
671 # Example :
672 # ~~~
673 # intent.add_category(intent_category.home.to_s)
674 # ~~~
675 # Returns `self` allowing fluent programming
676 fun add_category(category: String): Intent
677 do
678 sys.jni_env.push_local_frame(1)
679 intent.add_category(category.to_java_string)
680 sys.jni_env.pop_local_frame
681 return self
682 end
683
684 # Returns all the intent categories or `null` if none
685 fun categories: nullable HashSet[String]
686 do
687 var string_set = intent.categories
688 if string_set.is_empty then return null
689
690 return string_set
691 end
692
693 # Sets the data uri the intent is working on
694 # Automatically clears the type field set using `mime_type=` method as it
695 # uses the data uri to determine the MIME type
696 # Note: The Uri string has to comply with RFC 2396
697 fun data=(data_uri: String)
698 do
699 sys.jni_env.push_local_frame(1)
700 intent.data = data_uri.to_java_string
701 sys.jni_env.pop_local_frame
702 end
703
704 # Returns the data Uri the data is operating on or `null` if none
705 fun data: nullable String
706 do
707 var result = intent.data.to_s
708 if result == "" then return null
709 return result
710 end
711
712 # Sets an explicit MIME data type to be handled by the intent, for example
713 # the return data type
714 # Automatically clears the data type field set using `data=` method
715 fun mime_type=(mime_type: String)
716 do
717 sys.jni_env.push_local_frame(1)
718 intent.mime_type = mime_type.to_java_string
719 sys.jni_env.pop_local_frame
720 end
721
722 # Add a flag to be used by the intent
723 #
724 # Example :
725 # ~~~
726 # intent.add_flags(intent_flag.activity_new_task)
727 # ~~~
728 # Returns `self` allowing fluent programming
729 fun add_flags(flags: Int): Intent
730 do
731 intent.add_flags(flags)
732 return self
733 end
734
735 # Returns an `Int` representing all the intent flags
736 fun flags: Int do return intent.flags
737
738 # Returns the package name the intent resolution is limited to
739 # Returns `null` if not defined
740 fun package_name: nullable String do
741 var result = intent.get_package.to_s
742 if result == "" then return null
743 return result
744 end
745
746 # Returns the set MIME and `null` if none
747 fun type_name: nullable String do
748 var result = intent.get_type.to_s
749 if result == "" then return null
750 return result
751 end
752
753 # Returns `true` if the intent contains the given category
754 fun has_category(category: String): Bool
755 do
756 sys.jni_env.push_local_frame(1)
757 var return_value = intent.has_category(category.to_java_string)
758 sys.jni_env.pop_local_frame
759 return return_value
760 end
761
762 # Returns `true` if the intent contains the given extra
763 fun has_extra(extra: String): Bool
764 do
765 sys.jni_env.push_local_frame(1)
766 var return_value = intent.has_extra(extra.to_java_string)
767 sys.jni_env.pop_local_frame
768 return return_value
769 end
770
771 # Removes the given category
772 # Returns `self` allowing fluent programming
773 fun remove_category(category: String): Intent
774 do
775 sys.jni_env.push_local_frame(1)
776 intent.remove_category(category.to_java_string)
777 sys.jni_env.pop_local_frame
778 return self
779 end
780
781 # Removes the given extra
782 # Returns `self` allowing fluent programming
783 fun remove_extra(name: String): Intent
784 do
785 sys.jni_env.push_local_frame(1)
786 intent.remove_extra(name.to_java_string)
787 sys.jni_env.pop_local_frame
788 return self
789 end
790
791 # Retrieves the `Array[Bool]` extra stored as Java `boolean[]` with the
792 # corresponding name
793 fun extra_bool_array(name: String): Array[Bool]
794 do
795 sys.jni_env.push_local_frame(1)
796 var nit_array = intent.boolean_array_extra(name.to_java_string)
797 sys.jni_env.pop_local_frame
798 return nit_array
799 end
800
801 # Retrieves the `Bool` extra stored with the corresponding name
802 fun extra_bool(name: String, def_value: Bool): Bool
803 do
804 sys.jni_env.push_local_frame(1)
805 var nit_bool = intent.boolean_extra(name.to_java_string, def_value)
806 sys.jni_env.pop_local_frame
807 return nit_bool
808 end
809
810 # Retrieves the `Array[Int]` extra stored as Java `byte[]` with the
811 # corresponding name
812 fun extra_byte_array(name: String): Array[Int]
813 do
814 sys.jni_env.push_local_frame(1)
815 var nit_array = intent.byte_array_extra(name.to_java_string)
816 sys.jni_env.pop_local_frame
817 return nit_array
818 end
819
820 # Retrieves the `Int` extra stored as Java `byte` with the corresponding name
821 fun extra_byte(name: String, def_value: Int): Int
822 do
823 sys.jni_env.push_local_frame(1)
824 var nit_int = intent.byte_extra(name.to_java_string, def_value)
825 sys.jni_env.pop_local_frame
826 return nit_int
827 end
828
829 # Retrieves the `Array[Char]` extra stored as Java `char[]` with the
830 # corresponding name
831 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
832 fun extra_char_array(name: String): Array[Char]
833 do
834 sys.jni_env.push_local_frame(1)
835 var nit_array = intent.char_array_extra(name.to_java_string)
836 sys.jni_env.pop_local_frame
837 return nit_array
838 end
839
840 # Retrieves the `Char` extra stored as Java `char` with the
841 # corresponding name
842 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
843 fun extra_char(name: String, def_value: Char): Char
844 do
845 sys.jni_env.push_local_frame(1)
846 var nit_char = intent.char_extra(name.to_java_string, def_value)
847 sys.jni_env.pop_local_frame
848 return nit_char
849 end
850
851 # Retrieves the `String` extra stored as Java `CharSequence` with the
852 # corresponding name
853 fun extra_char_sequence(name: String, def_value: String ): String
854 do
855 sys.jni_env.push_local_frame(1)
856 var nit_charseq =
857 intent.char_sequence_extra(name.to_java_string).to_s
858 sys.jni_env.pop_local_frame
859 return nit_charseq
860 end
861
862 # Retrieves the `Array[String]` extra stored as Java `ArrayList<CharSequence>`
863 # with the corresponding name
864 fun extra_char_sequence_array_list_extra(name: String): Array[String]
865 do
866 sys.jni_env.push_local_frame(1)
867 var string_array = intent.char_sequence_array_list_extra(name.to_java_string)
868 sys.jni_env.pop_local_frame
869 return string_array
870 end
871
872 # Retrieves the `Array[String]` extra stored as Java `CharSequence[]`
873 # with the corresponding name
874 fun extra_char_sequence_array(name: String): Array[String]
875 do
876 sys.jni_env.push_local_frame(1)
877 var string_array = intent.char_sequence_array_list_extra(name.to_java_string)
878 sys.jni_env.pop_local_frame
879 return string_array
880 end
881
882 # Retrieves the `Array[Float]` extra stored as Java `double[]` with the
883 # corresponding name
884 fun extra_double_array(name: String): Array[Float]
885 do
886 sys.jni_env.push_local_frame(1)
887 var nit_array = intent.double_array_extra(name.to_java_string)
888 sys.jni_env.pop_local_frame
889 return nit_array
890 end
891
892 # Retrieves the `Float` extra stored as Java `double` with the corresponding
893 # name
894 fun extra_double(name: String, def_value: Float): Float
895 do
896 sys.jni_env.push_local_frame(1)
897 var nit_float = intent.double_extra(name.to_java_string, def_value)
898 sys.jni_env.pop_local_frame
899 return nit_float
900 end
901
902 # Retrieves the `Array[Float]` extra stored as Java `float[]` with the
903 # corresponding name
904 fun extra_float_array(name: String): Array[Float]
905 do
906 sys.jni_env.push_local_frame(1)
907 var nit_array = intent.float_array_extra(name.to_java_string)
908 sys.jni_env.pop_local_frame
909 return nit_array
910 end
911
912 # Retrieves the `Float` extra stored as Java `float` with the corresponding
913 # name
914 fun extra_float(name: String, def_value: Float): Float
915 do
916 sys.jni_env.push_local_frame(1)
917 var nit_float = intent.float_extra(name.to_java_string, def_value)
918 sys.jni_env.pop_local_frame
919 return nit_float
920 end
921
922 # Retrieves the `Array[Int]` extra stored as Java `int[]` with the
923 # corresponding name
924 fun extra_int_array(name: String): Array[Int]
925 do
926 sys.jni_env.push_local_frame(1)
927 var nit_array = intent.int_array_extra(name.to_java_string)
928 sys.jni_env.pop_local_frame
929 return nit_array
930 end
931
932 # Retrieves the `Int` extra stored as Java `int` with the corresponding
933 # name
934 fun extra_int(name: String, def_value: Int): Int
935 do
936 sys.jni_env.push_local_frame(1)
937 var nit_int = intent.int_extra(name.to_java_string, def_value)
938 sys.jni_env.pop_local_frame
939 return nit_int
940 end
941
942 # Retrieves the `Array[Int]` extra stored as Java `long[]` with the
943 # corresponding name
944 fun extra_long_array(name: String): Array[Int]
945 do
946 sys.jni_env.push_local_frame(1)
947 var nit_array = intent.long_array_extra(name.to_java_string)
948 sys.jni_env.pop_local_frame
949 return nit_array
950 end
951
952 # Retrieves the `Int` extra stored as Java `long` with the corresponding
953 # name
954 fun extra_long(name: String, def_value: Int): Int
955 do
956 sys.jni_env.push_local_frame(1)
957 var nit_int = intent.long_extra(name.to_java_string, def_value)
958 sys.jni_env.pop_local_frame
959 return nit_int
960 end
961
962 # Retrieves the `Array[Int]` extra stored as Java `short[]` with the
963 # corresponding name
964 fun extra_short_array(name: String): Array[Int]
965 do
966 sys.jni_env.push_local_frame(1)
967 var nit_array = intent.short_array_extra(name.to_java_string)
968 sys.jni_env.pop_local_frame
969 return nit_array
970 end
971
972 # Retrieves the `Int` extra stored as Java `short` with the corresponding
973 # name
974 fun extra_short(name: String, def_value: Int): Int
975 do
976 sys.jni_env.push_local_frame(1)
977 var nit_int = intent.short_extra(name.to_java_string, def_value)
978 sys.jni_env.pop_local_frame
979 return nit_int
980 end
981
982 # Retrieves the `Array[String]` extra stored as Java `String[]` with the
983 # corresponding name
984 fun extra_string_array(name: String): Array[String]
985 do
986 sys.jni_env.push_local_frame(1)
987 var string_array = intent.string_array_extra(name.to_java_string)
988 sys.jni_env.pop_local_frame
989 return string_array
990 end
991
992 # Retrieves the `Array[String]` extra stored as Java `ArrayList<String>`
993 # with the corresponding name
994 fun extra_string_array_list(name: String): Array[String]
995 do
996 sys.jni_env.push_local_frame(1)
997 var string_array = intent.string_array_list_extra(name.to_java_string)
998 sys.jni_env.pop_local_frame
999 return string_array
1000 end
1001
1002 # Retrieves the `String` extra stored as Java `String` with the corresponding
1003 # name
1004 fun extra_string(name: String): String
1005 do
1006 sys.jni_env.push_local_frame(1)
1007 var nit_java_string = intent.string_extra(name.to_java_string).to_s
1008 sys.jni_env.pop_local_frame
1009 return nit_java_string
1010 end
1011
1012 # Adds extra data corresponding to `double` java type
1013 # Returns `self` allowing fluent programming
1014 fun add_extra_double(name: String, value: Float): Intent
1015 do
1016 sys.jni_env.push_local_frame(1)
1017 intent.add_extra_double(name.to_java_string, value)
1018 sys.jni_env.pop_local_frame
1019 return self
1020 end
1021
1022 # Adds extra data corresponding to `double[]` java type
1023 # Returns `self` allowing fluent programming
1024 fun add_extra_array_of_double(name: String, value: Array[Float]): Intent
1025 do
1026 sys.jni_env.push_local_frame(1)
1027 intent.add_extra_array_of_double(name.to_java_string, value)
1028 sys.jni_env.pop_local_frame
1029 return self
1030 end
1031
1032 # Adds extra data corresponding to `char` java type
1033 # Returns `self` allowing fluent programming
1034 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
1035 fun add_extra_char(name: String, value: Char): Intent
1036 do
1037 sys.jni_env.push_local_frame(1)
1038 intent.add_extra_char(name.to_java_string, value)
1039 sys.jni_env.pop_local_frame
1040 return self
1041 end
1042
1043 # Adds extra data corresponding to `char[]` java type
1044 # Returns `self` allowing fluent programming
1045 # FIXME: Java's `char` are encoded on 16-bits whereas Nit's are on 8-bits.
1046 fun add_extra_array_of_char(name: String, value: Array[Char]): Intent
1047 do
1048 sys.jni_env.push_local_frame(1)
1049 intent.add_extra_array_of_char(name.to_java_string, value)
1050 sys.jni_env.pop_local_frame
1051 return self
1052 end
1053
1054 # Adds extra data corresponding to `CharSequence` java type
1055 # Returns `self` allowing fluent programming
1056 fun add_extra_char_sequence(name: String, value: String): Intent
1057 do
1058 sys.jni_env.push_local_frame(2)
1059 intent.add_extra_char_sequence(name.to_java_string, value.to_java_string)
1060 sys.jni_env.pop_local_frame
1061 return self
1062 end
1063
1064 # Adds extra data corresponding to `CharSequence[]` java type
1065 # Returns `self` allowing fluent programming
1066 fun add_extra_array_of_char_sequence(name: String, value: Array[String]): Intent
1067 do
1068 sys.jni_env.push_local_frame(value.length + 1)
1069 var java_string_array = new Array[JavaString]
1070 for element in value do
1071 java_string_array.push(element.to_java_string)
1072 end
1073 intent.add_extra_array_of_char_sequence(name.to_java_string, java_string_array)
1074 sys.jni_env.pop_local_frame
1075 return self
1076 end
1077
1078 # Adds extra data corresponding to `bundle` java type
1079 # Returns `self` allowing fluent programming
1080 fun add_extra_bundle(name: String, value: NativeBundle): Intent
1081 do
1082 sys.jni_env.push_local_frame(1)
1083 intent.add_extra_bundle(name.to_java_string, value)
1084 sys.jni_env.pop_local_frame
1085 return self
1086 end
1087
1088 # Adds extra data corresponding to `int` java type
1089 # Returns `self` allowing fluent programming
1090 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1091 # *java `long` and the expected value is a java `int`*
1092 # Consider using add_extra_long instead
1093 fun add_extra_int(name: String, value: Int): Intent
1094 do
1095 sys.jni_env.push_local_frame(1)
1096 intent.add_extra_int(name.to_java_string, value)
1097 sys.jni_env.pop_local_frame
1098 return self
1099 end
1100
1101 # Adds extra data corresponding to `int[]` java type
1102 # Returns `self` allowing fluent programming
1103 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1104 # *java `long` and the expected value is a java `int[]`*
1105 # Consider using add_extra_array_of_long instead
1106 fun add_extra_array_of_int(name: String, value: Array[Int]): Intent
1107 do
1108 sys.jni_env.push_local_frame(1)
1109 intent.add_extra_array_of_int(name.to_java_string, value)
1110 sys.jni_env.pop_local_frame
1111 return self
1112 end
1113
1114 # Adds extra data corresponding to `ArrayList<Integer>` java type
1115 # Returns `self` allowing fluent programming
1116 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1117 # *java `long` and the expected value is a java `ArrayList<Integer>`*
1118 # Consider using add_extra_array_of_long instead
1119 fun add_extra_array_list_of_int(name: String, value: Array[Int]): Intent
1120 do
1121 sys.jni_env.push_local_frame(1)
1122 intent.add_extra_array_list_of_int(name.to_java_string, value)
1123 sys.jni_env.pop_local_frame
1124 return self
1125 end
1126
1127 # Adds extra data corresponding to `byte` java type
1128 # Returns `self` allowing fluent programming
1129 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1130 # *java `long` and the expected value is a java `byte`*
1131 # Consider using add_extra_array_of_long instead
1132 fun add_extra_byte(name: String, value: Int): Intent
1133 do
1134 sys.jni_env.push_local_frame(1)
1135 intent.add_extra_byte(name.to_java_string, value)
1136 sys.jni_env.pop_local_frame
1137 return self
1138 end
1139
1140 # Adds extra data corresponding to `byte[]` java type
1141 # Returns `self` allowing fluent programming
1142 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1143 # *java `long` and the expected value is a java `byte[]`*
1144 # Consider using add_extra_array_of_long instead
1145 fun add_extra_array_of_byte(name: String, value: Int): Intent
1146 do
1147 sys.jni_env.push_local_frame(1)
1148 intent.add_extra_array_of_byte(name.to_java_string, value)
1149 sys.jni_env.pop_local_frame
1150 return self
1151 end
1152
1153 # Adds extra data corresponding to `long` java type
1154 # Returns `self` allowing fluent programming
1155 fun add_extra_long(name: String, value: Int): Intent
1156 do
1157 sys.jni_env.push_local_frame(1)
1158 intent.add_extra_long(name.to_java_string, value)
1159 sys.jni_env.pop_local_frame
1160 return self
1161 end
1162
1163 # Adds extra data corresponding to `long[]` java type
1164 # Returns `self` allowing fluent programming
1165 fun add_extra_array_of_long(name: String, value: Array[Int]): Intent
1166 do
1167 sys.jni_env.push_local_frame(1)
1168 intent.add_extra_array_of_long(name.to_java_string, value)
1169 sys.jni_env.pop_local_frame
1170 return self
1171 end
1172
1173 # Adds extra data corresponding to `float` java type
1174 # Returns `self` allowing fluent programming
1175 # *Be aware of possible loss of precision as Nit `Float` corresponds to*
1176 # *java `double` and the expected value is a java `float`*
1177 # Consider using add_extra_double
1178 fun add_extra_float(name: String, value: Float): Intent
1179 do
1180 sys.jni_env.push_local_frame(1)
1181 intent.add_extra_float(name.to_java_string, value)
1182 sys.jni_env.pop_local_frame
1183 return self
1184 end
1185
1186 # Adds extra data corresponding to `float[]` java type
1187 # Returns `self` allowing fluent programming
1188 # *Be aware of possible loss of precision as Nit `Float` corresponds to*
1189 # *java `double` and the expected value is a java `float[]`*
1190 # Consider using add_extra_array_of_double
1191 fun add_extra_array_of_float(name: String, value: Array[Float]): Intent
1192 do
1193 sys.jni_env.push_local_frame(1)
1194 intent.add_extra_array_of_float(name.to_java_string, value)
1195 sys.jni_env.pop_local_frame
1196 return self
1197 end
1198
1199 # Adds extra data corresponding to `String` java type
1200 # Returns `self` allowing fluent programming
1201 fun add_extra_string(name: String, value: String): Intent
1202 do
1203 sys.jni_env.push_local_frame(2)
1204 intent.add_extra_string(name.to_java_string, value.to_java_string)
1205 sys.jni_env.pop_local_frame
1206 return self
1207 end
1208
1209 # Adds extra data corresponding to `String[]` java type
1210 # Returns `self` allowing fluent programming
1211 fun add_extra_array_of_string(name: String, value: Array[String]): Intent
1212 do
1213 sys.jni_env.push_local_frame(value.length + 1)
1214 var java_string_array = new Array[JavaString]
1215 for element in value do
1216 java_string_array.push(element.to_java_string)
1217 end
1218 intent.add_extra_array_of_string(name.to_java_string, java_string_array)
1219 sys.jni_env.pop_local_frame
1220 return self
1221 end
1222
1223 # Adds extra data corresponding to `ArrayList<String>` java type
1224 # Returns `self` allowing fluent programming
1225 fun add_extra_array_list_of_string(name: String, value: Array[String]): Intent
1226 do
1227 sys.jni_env.push_local_frame(value.length + 1)
1228 var java_string_array = new Array[JavaString]
1229 for element in value do
1230 java_string_array.push(element.to_java_string)
1231 end
1232
1233 intent.add_extra_array_list_of_string(name.to_java_string, java_string_array)
1234 sys.jni_env.pop_local_frame
1235 return self
1236 end
1237
1238 # Adds extra data corresponding to `boolean` java type
1239 # Returns `self` allowing fluent programming
1240 fun add_extra_bool(name: String, value: Bool): Intent
1241 do
1242 sys.jni_env.push_local_frame(1)
1243 intent.add_extra_bool(name.to_java_string, value)
1244 sys.jni_env.pop_local_frame
1245 return self
1246 end
1247
1248 # Adds extra data corresponding to `boolean[]` java type
1249 # Returns `self` allowing fluent programming
1250 fun add_extra_array_of_bool(name: String, value: Array[Bool]): Intent
1251 do
1252 sys.jni_env.push_local_frame(1)
1253 intent.add_extra_array_of_bool(name.to_java_string, value)
1254 sys.jni_env.pop_local_frame
1255 return self
1256 end
1257
1258 # Adds extra data corresponding to `short` java type
1259 # Returns `self` allowing fluent programming
1260 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1261 # *java `long` and the expected value is a java `short`*
1262 # Consider using add_extra_long instead
1263 fun add_extra_short(name: String, value: Int): Intent
1264 do
1265 sys.jni_env.push_local_frame(1)
1266 intent.add_extra_short(name.to_java_string, value)
1267 sys.jni_env.pop_local_frame
1268 return self
1269 end
1270
1271 # Adds extra data corresponding to `short[]` java type
1272 # Returns `self` allowing fluent programming
1273 # *Be aware of possible integer overflow as Nit `Int` corresponds to*
1274 # *java `long` and the expected value is a java `short[]`*
1275 # Consider using add_extra_array_of_long instead
1276 fun add_extra_array_of_short(name: String, value: Array[Int]): Intent
1277 do
1278 sys.jni_env.push_local_frame(1)
1279 intent.add_extra_array_of_short(name.to_java_string, value)
1280 sys.jni_env.pop_local_frame
1281 return self
1282 end
1283
1284 # Store `value` as a serialized Json string
1285 # java method according to value type
1286 # Returns `self` allowing fluent programming
1287 fun []=(name: String, value: nullable Serializable): Intent
1288 do
1289 var serialized_string = new StringOStream
1290 var serializer = new JsonSerializer(serialized_string)
1291 serializer.serialize(value)
1292
1293 add_extra_string(name, serialized_string.to_s)
1294 return self
1295 end
1296
1297 # Retrieve an `Object` stored via `[]=` function
1298 fun [](name: String): nullable Object
1299 do
1300 var serialized_string = self.extra_string(name)
1301 if serialized_string == "" then return null
1302
1303 var deserializer = new JsonDeserializer(serialized_string)
1304 return deserializer.deserialize
1305 end
1306
1307 # Specify the class to be launched by the intent
1308 fun set_class_name(package_name: String, class_name: String): Intent
1309 do
1310 sys.jni_env.push_local_frame(2)
1311 intent.set_class_name(package_name.to_java_string, class_name.to_java_string)
1312 sys.jni_env.pop_local_frame
1313 return self
1314 end
1315 # Execute the intent and launch the appropriate application
1316 fun launch_activity do context.start_activity(intent)
1317
1318 # Start a service that will be running until the `stop_service` call
1319 fun start_service do context.start_service(intent)
1320
1321 # Stop service
1322 fun stop_service do context.stop_service(intent)
1323
1324 # Deletes intent global reference
1325 fun destroy do self.intent.delete_global_ref
1326
1327 # Returns a human readable representation of the intent
1328 redef fun to_s do return intent.to_native_s.to_s
1329 end
1330
1331 redef extern class NativeActivity
1332 fun start_activity(intent: NativeIntent) in "Java" `{ recv.startActivity(intent); `}
1333 fun start_service(intent: NativeIntent) in "Java" `{ recv.startService(intent); `}
1334 fun stop_service(intent: NativeIntent) in "Java" `{ recv.stopService(intent); `}
1335 end
1336
1337 # Allows user to get values with enum-like syntax : `intent_action.main`
1338 protected fun intent_action: Action do return once new Action
1339 # Allows user to get values with enum-like syntax : `intent_category.home`
1340 protected fun intent_category: Category do return once new Category
1341 # Allows user to get values with enum-like syntax : `intent_flag.activity_brought_to_front`
1342 protected fun intent_flag: Flag do return once new Flag
1343
1344 private class StringCopyArray
1345 var collection = new Array[String]
1346 fun add(element: JavaString) do collection.add element.to_s
1347 end
1348
1349 private class StringCopyHashSet
1350 var collection = new HashSet[String]
1351 fun add(element: JavaString) do collection.add element.to_s
1352 end