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