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