Upload Tizen2.0 source
[platform/core/appfw/app-svc.git] / include / appsvc.h
1 /*
2  *  app-svc
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>, Jaeho Lee <jaeho81.lee@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22
23
24 #ifndef __APP_SVC_H__
25 #define __APP_SVC_H__
26
27 /**
28  * @file    appsvc.h
29  * @version 1.1
30  * @brief   This file contains APIs of the appsvc library
31  */
32
33 /**
34  * @addtogroup APPLICATION_FRAMEWORK
35  * @{
36  *
37  * @defgroup appsvc Application Service
38  * @version  1.1
39  * @brief    Application Service library
40  *
41  */
42
43 /**
44  * @addtogroup appsvc
45  * @{
46  */
47
48
49 #include <bundle.h>
50
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54
55
56 /** APP_SVC OPERATION TYPE*/
57 #define APPSVC_OPERATION_DEFAULT                "http://tizen.org/appsvc/operation/default"
58 /** APP_SVC OPERATION TYPE*/
59 #define APPSVC_OPERATION_EDIT                   "http://tizen.org/appsvc/operation/edit"
60 /** APP_SVC OPERATION TYPE*/
61 #define APPSVC_OPERATION_VIEW                   "http://tizen.org/appsvc/operation/view"
62 /** APP_SVC OPERATION TYPE*/
63 #define APPSVC_OPERATION_PICK                   "http://tizen.org/appsvc/operation/pick"
64 /** APP_SVC OPERATION TYPE*/
65 #define APPSVC_OPERATION_CREATE_CONTENT         "http://tizen.org/appsvc/operation/create_content"
66 /** APP_SVC OPERATION TYPE*/
67 #define APPSVC_OPERATION_CALL                   "http://tizen.org/appsvc/operation/call"
68 /** APP_SVC OPERATION TYPE*/
69 #define APPSVC_OPERATION_SEND                   "http://tizen.org/appsvc/operation/send"
70 /** APP_SVC OPERATION TYPE*/
71 #define APPSVC_OPERATION_SEND_TEXT              "http://tizen.org/appsvc/operation/send_text"
72 /** APP_SVC OPERATION TYPE*/
73 #define APPSVC_OPERATION_DIAL                   "http://tizen.org/appsvc/operation/dial"
74 /** APP_SVC OPERATION TYPE*/
75 #define APPSVC_OPERATION_SEARCH                 "http://tizen.org/appsvc/operation/search"
76 /** APP_SVC OPERATION TYPE*/
77 #define APPSVC_OPERATION_DOWNLOAD               "http://tizen.org/appsvc/operation/download"
78
79
80 /** APP_SVC DATA SUBJECT*/
81 #define APPSVC_DATA_SUBJECT             "http://tizen.org/appsvc/data/subject"
82 /** APP_SVC DATA TYPE*/
83 #define APPSVC_DATA_TO                  "http://tizen.org/appsvc/data/to"
84 /** APP_SVC DATA TYPE*/
85 #define APPSVC_DATA_CC                  "http://tizen.org/appsvc/data/cc"
86 /** APP_SVC DATA TYPE*/
87 #define APPSVC_DATA_BCC                 "http://tizen.org/appsvc/data/bcc"
88 /** APP_SVC DATA TYPE*/
89 #define APPSVC_DATA_TEXT                "http://tizen.org/appsvc/data/text"
90 /** APP_SVC DATA TYPE*/
91 #define APPSVC_DATA_TITLE               "http://tizen.org/appsvc/data/title"
92 /** APP_SVC DATA TYPE*/
93 #define APPSVC_DATA_SELECTED            "http://tizen.org/appsvc/data/selected"
94 /** APP_SVC DATA TYPE*/
95 #define APPSVC_DATA_KEYWORD             "http://tizen.org/appsvc/data/keyword"
96
97 /** APP SVC internal private key */
98 #define APP_SVC_K_URI_R_INFO            "__APP_SVC_URI_R_INFO__"
99
100 /** APP SVC internal private value */
101 #define APP_SVC_V_SCHEME_AND_HOST               "__SCHEME_AND_HOST__"
102 /** APP SVC internal private value */
103 #define APP_SVC_V_SCHEME                "__SCHEME__"
104
105
106 /**
107  * @brief Return values in appsvc. 
108  */
109 typedef enum _appsvc_return_val {
110         APPSVC_RET_ELAUNCH = -4,                /**< Failure on launching the app */
111         APPSVC_RET_ENOMATCH = -3,               /**< No matching result Error */
112         APPSVC_RET_EINVAL = -2,                 /**< Invalid argument */
113         APPSVC_RET_ERROR = -1,                  /**< General error */
114         APPSVC_RET_OK = 0                       /**< General success */
115 }appsvc_return_val;
116
117
118 /**
119  * @brief result values in appsvc. 
120  */
121 typedef enum _appsvc_result_val {
122         APPSVC_RES_CANCEL = -2,         /**< Cancel by system */
123         APPSVC_RES_NOT_OK = -1,         /**< Fail by user */
124         APPSVC_RES_OK = 0               /**< Success by user */
125 }appsvc_result_val;
126
127
128 /** 
129  * @brief appsvc_res_fn is appsvc result function
130  * @param[out]  b               result bundle   
131  * @param[out]  request_code    request code
132  * @param[out]  result                  result value
133  * @param[out]  data            user-supplied data      
134 */
135 typedef void (*appsvc_res_fn)(bundle *b, int request_code, appsvc_result_val result, void *data);
136
137
138 /** 
139  * @brief iterator function running with appsvc_get_list 
140  * @param[out]  pkg_name        package name retreived by appsvc_get_list
141  * @param[out]  data            user-supplied data      
142 */
143 typedef int (*appsvc_info_iter_fn)(const char *pkg_name, void *data);
144
145 typedef int (*appsvc_host_res_fn)(void *data);
146
147 /**
148  * @par Description:
149  * This function sets an operation to launch application based on appsvc.
150  *
151  * @param[in] b bundle object 
152  * @param[in] operation operation 
153  *
154  * @return 0 if success, negative value(<0) if fail
155  * @retval APPSVC_RET_OK - success
156  * @retval APPSVC_RET_ERROR - general error 
157  * @retval APPSVC_RET_EINVAL - invalid argument(content)
158  *
159  * @pre None.
160  * @post None.
161  * @see None.
162  * @remarks An application must call this function before using appsvc_run_service API. 
163  *
164  * @par Sample code:
165  * @code
166 #include <appsvc.h>
167
168 ...
169 {
170         bundle *b = NULL;
171
172         b = bundle_create();
173         
174         appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
175 }
176  * @endcode
177  *
178  */
179 int appsvc_set_operation(bundle *b, const char *operation);
180
181 /**
182  * @par Description:
183  * This function sets an uri to launch application based on appsvc.
184  *
185  * @param[in] b bundle object 
186  * @param[in] uri uri 
187  *
188  * @return 0 if success, negative value(<0) if fail
189  * @retval APPSVC_RET_OK - success
190  * @retval APPSVC_RET_ERROR - general error 
191  * @retval APPSVC_RET_EINVAL - invalid argument(content)
192  *
193  * @pre None.
194  * @post None.
195  * @see None.
196  * @remarks None. 
197  *
198  * @par Sample code:
199  * @code
200 #include <appsvc.h>
201
202 ...
203 {
204         bundle *b = NULL;
205
206         b = bundle_create();
207         
208         appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
209         appsvc_set_uri(b,"http://www.samsung.com");
210 }
211  * @endcode
212  *
213  */
214 int appsvc_set_uri(bundle *b, const char *uri);
215
216 /**
217  * @par Description:
218  * This function sets a mime-type to launch application based on appsvc.
219  *
220  * @param[in] b bundle object 
221  * @param[in] mime mime-type 
222  *
223  * @return 0 if success, negative value(<0) if fail
224  * @retval APPSVC_RET_OK - success
225  * @retval APPSVC_RET_ERROR - general error 
226  * @retval APPSVC_RET_EINVAL - invalid argument(content)
227  *
228  * @pre None.
229  * @post None.
230  * @see None.
231  * @remarks None. 
232  *
233  * @par Sample code:
234  * @code
235 #include <appsvc.h>
236
237 ...
238 {
239         bundle *b = NULL;
240
241         b = bundle_create();
242         
243         appsvc_set_operation(b, APPSVC_OPERATION_PICK);
244         appsvc_set_mime(b,"image/jpg");
245 }
246  * @endcode
247  *
248  */
249 int appsvc_set_mime(bundle *b, const char *mime);
250
251 /**
252  * @par Description:
253  * This function sets an extra data to launch application based on appsvc.
254  *
255  * @param[in] b bundle object 
256  * @param[in] key key of extra data 
257  * @param[in] val data 
258  *
259  * @return 0 if success, negative value(<0) if fail
260  *
261  * @pre None.
262  * @post None.
263  * @see None.
264  * @remarks None. 
265  *
266  * @par Sample code:
267  * @code
268 #include <appsvc.h>
269
270 ...
271 {
272         bundle *b = NULL;
273
274         b = bundle_create();
275         
276         appsvc_set_operation(b, APPSVC_OPERATION_SEND);
277         appsvc_set_uri(b,"mailto:xxx1@xxx");
278         appsvc_add_data(b,APPSVC_DATA_CC,"xxx2@xxx");
279 }
280  * @endcode
281  *
282  */
283 int appsvc_add_data(bundle *b, const char *key, const char *val);
284
285 /**
286  * @par Description:
287  * This function sets an extra array data to launch application based on appsvc.
288  *
289  * @param[in] b bundle object 
290  * @param[in] key key of extra data 
291  * @param[in] val_array data 
292  * @param[in] len Length of array
293  *
294  * @return 0 if success, negative value(<0) if fail
295  *
296  * @pre None.
297  * @post None.
298  * @see None.
299  * @remarks None. 
300  *
301  * @par Sample code:
302  * @code
303 #include <appsvc.h>
304
305 ...
306 {
307         bundle *b = NULL;
308         char *images[] = {"/opt/media/a.jpg", "/opt/media/b.jpg", "/opt/media/c.jpg"};
309
310         b = bundle_create();
311
312         appsvc_add_data_array(b, APPSVC_DATA_SELECTED, images, 3);
313 }
314  * @endcode
315  *
316  */
317 int appsvc_add_data_array(bundle *b, const char *key, const char **val_array, int len);
318
319
320 /**
321  * @par Description:
322  * This function sets a package name to launch application based on appsvc.
323  *
324  * @param[in] b bundle object 
325  * @param[in] pkg_name package name for explict launch
326  *
327  * @return 0 if success, negative value(<0) if fail
328  * @retval APPSVC_RET_OK - success
329  * @retval APPSVC_RET_ERROR - general error 
330  * @retval APPSVC_RET_EINVAL - invalid argument(content)
331  *
332  * @pre None.
333  * @post None.
334  * @see None.
335  * @remarks None. 
336  *
337  * @par Sample code:
338  * @code
339 #include <appsvc.h>
340
341 ...
342 {
343         bundle *b = NULL;
344
345         b = bundle_create();
346         
347         appsvc_set_operation(b, APPSVC_OPERATION_PICK);
348         appsvc_set_mime(b,"image/jpg");
349         appsvc_set_pkgname(b, "org.tizen.mygallery");
350 }
351  * @endcode
352  *
353  */
354 int appsvc_set_pkgname(bundle *b, const char *pkg_name);
355
356
357 /**
358  * @par Description:
359  * This function sets a appid to launch application based on appsvc.
360  *
361  * @param[in] b bundle object
362  * @param[in] appid application id for explict launch
363  *
364  * @return 0 if success, negative value(<0) if fail
365  * @retval APPSVC_RET_OK - success
366  * @retval APPSVC_RET_ERROR - general error
367  * @retval APPSVC_RET_EINVAL - invalid argument(content)
368  *
369  * @pre None.
370  * @post None.
371  * @see None.
372  * @remarks None.
373  *
374  * @par Sample code:
375  * @code
376 #include <appsvc.h>
377
378 ...
379 {
380         bundle *b = NULL;
381
382         b = bundle_create();
383
384         appsvc_set_operation(b, APPSVC_OPERATION_PICK);
385         appsvc_set_mime(b,"image/jpg");
386         appsvc_set_appid(b, "org.tizen.mygallery");
387 }
388  * @endcode
389  *
390  */
391 int appsvc_set_appid(bundle *b, const char *appid);
392
393
394 /**
395  * @par Description:
396  * This API launch application based on appsvc.
397  *
398  * @param[in] b bundle to be passed to callee
399  * @param[in] request_code request code
400  * @param[in] cbfunc result callback function
401  * @param[in] data user-supplied data passed to callback function
402  *
403  * @return callee's pid if success, negative value(<0) if fail
404  * @retval callee's pid - success
405  * @retval APPSVC_RET_ERROR - general error 
406  * @retval APPSVC_RET_EINVAL - invalid argument(content)
407  * @retval APPSVC_RET_ENOMATCH - no matching result Error 
408  * @retval APPSVC_RET_ELAUNCH - failure on launching the app
409  *
410  * @pre None.
411  * @post None.
412  * @see None.
413  * @remarks None. 
414  *
415  * @par Sample code:
416  * @code
417 #include <appsvc.h>
418
419 ...
420 {
421         bundle *b = NULL;
422         static int num = 0;
423
424         b = bundle_create();
425         
426         appsvc_set_operation(b, APPSVC_OPERATION_PICK);
427         appsvc_set_mime(b,"image/jpg");
428
429         return appsvc_run_service(b, 0, cb_func, (void*)NULL);
430 }
431  * @endcode
432  *
433  */
434 int appsvc_run_service(bundle *b, int request_code, appsvc_res_fn cbfunc, void *data);
435
436 /**
437  * @par Description:
438  * This API use to get application list that is matched with given bundle.
439  *
440  * @param[in] b bundle to resolve application
441  * @param[in] iter_fn iterator function
442  * @param[in] data user-supplied data for iter_fn
443  *
444  * @return 0 if success, negative value(<0) if fail
445  * @retval APPSVC_RET_OK - success
446  * @retval APPSVC_RET_EINVAL - invalid argument(content)
447  * @retval APPSVC_RET_ENOMATCH - no matching result Error 
448  *
449  * @pre None.
450  * @post None.
451  * @see None.
452  * @remarks None. 
453  *
454  * @par Sample code:
455  * @code
456 #include <appsvc.h>
457
458 static int iter_fn(const char* pkg_name, void *data)
459 {
460         printf("\t==========================\n");
461         printf("\t pkg_name: %s\n", pkg_name);
462         printf("\t==========================\n");
463         return 0;
464 }
465
466 ...
467 {
468         bundle *b = NULL;
469         static int num = 0;
470
471         b = bundle_create();
472         
473         appsvc_set_operation(b, APPSVC_OPERATION_PICK);
474         appsvc_set_mime(b,"image/jpg");
475
476         return appsvc_get_list(b, iter_fn, (void*)NULL);
477 }
478  * @endcode
479  *
480  */
481 int appsvc_get_list(bundle *b, appsvc_info_iter_fn iter_fn, void *data);
482
483 /**
484  * @par Description:
485  * This function gets a operation from bundle.
486  *
487  * @param[in] b bundle object 
488  *
489  * @return Pointer for operation string if success, NULL if fail
490  *
491  * @pre None.
492  * @post None.
493  * @see None.
494  * @remarks None. 
495  *
496  * @par Sample code:
497  * @code
498 #include <appsvc.h>
499
500 ...
501 {
502         char *val;      
503         val = appsvc_get_operation(b);
504 }
505  * @endcode
506  *
507  */
508 const char *appsvc_get_operation(bundle *b);
509
510 /**
511  * @par Description:
512  * This function gets a uri from bundle.
513  *
514  * @param[in] b bundle object 
515  *
516  * @return Pointer for uri string if success, NULL if fail
517  *
518  * @pre None.
519  * @post None.
520  * @see None.
521  * @remarks None. 
522  *
523  * @par Sample code:
524  * @code
525 #include <appsvc.h>
526
527 ...
528 {
529         char *val;      
530         val = appsvc_get_uri(b);
531 }
532  * @endcode
533  *
534  */
535 const char *appsvc_get_uri(bundle *b);
536
537 /**
538  * @par Description:
539  * This function gets a mime-type from bundle.
540  *
541  * @param[in] b bundle object 
542  *
543  * @return Pointer for mime-type string if success, NULL if fail
544  *
545  * @pre None.
546  * @post None.
547  * @see None.
548  * @remarks None. 
549  *
550  * @par Sample code:
551  * @code
552 #include <appsvc.h>
553
554 ...
555 {
556         char *val;      
557         val = appsvc_get_mime(b);
558 }
559  * @endcode
560  *
561  */
562 const char *appsvc_get_mime(bundle *b);
563
564 /**
565  * @par Description:
566  * This function gets a package name from bundle.
567  *
568  * @param[in] b bundle object 
569  *
570  * @return Pointer for package name string if success, NULL if fail
571  *
572  * @pre None.
573  * @post None.
574  * @see None.
575  * @remarks None. 
576  *
577  * @par Sample code:
578  * @code
579 #include <appsvc.h>
580
581 ...
582 {
583         char *val;      
584         val = appsvc_get_pkgname(b);
585 }
586  * @endcode
587  *
588  */
589 const char *appsvc_get_pkgname(bundle *b);
590
591 /**
592  * @par Description:
593  * This function gets a application id from bundle.
594  *
595  * @param[in] b bundle object
596  *
597  * @return Pointer for application id string if success, NULL if fail
598  *
599  * @pre None.
600  * @post None.
601  * @see None.
602  * @remarks None.
603  *
604  * @par Sample code:
605  * @code
606 #include <appsvc.h>
607
608 ...
609 {
610         char *val;
611         val = appsvc_get_appid(b);
612 }
613  * @endcode
614  *
615  */
616 const char *appsvc_get_appid(bundle *b);
617
618 /**
619  * @par Description:
620  * This function gets value from key.
621  *
622  * @param[in] b bundle object 
623  * @param[in] key key
624  *
625  * @return Pointer for value string if success, NULL if fail
626  *
627  * @pre None.
628  * @post None.
629  * @see None.
630  * @remarks None. 
631  *
632  * @par Sample code:
633  * @code
634 #include <appsvc.h>
635
636 ...
637 {
638         char *val;      
639         val = appsvc_get_data(b, APPSVC_DATA_CC);
640 }
641  * @endcode
642  *
643  */
644 const char *appsvc_get_data(bundle *b, const char *key);
645
646 /**
647  * @par Description:
648  * This function gets value from key.
649  *
650  * @param[in] b bundle object 
651  * @param[in] key key
652  * @param[out] len length of array
653  *
654  * @return Pointer for value string array if success, NULL if fail
655  *
656  * @pre None.
657  * @post None.
658  * @see None.
659  * @remarks None. 
660  *
661  * @par Sample code:
662  * @code
663 #include <appsvc.h>
664
665 ...
666 {
667         char **val_array;       
668         int len;
669         char *val;
670
671         if(appsvc_data_is_array(b, APPSVC_DATA_SELECTED))
672                 val_array = appsvc_get_data_array(b, APPSVC_DATA_SELECTED, &len);
673         else 
674                 val = appsvc_get_data(b, APPSVC_DATA_SELECTED);
675 }
676  * @endcode
677  *
678  */
679 const char **appsvc_get_data_array(bundle *b, const char *key, int *len);
680
681 /**
682  * @par Description:
683  * This API create appsvc result bundle based on bundle received in reset event.
684  *
685  * @param[in] inb bundle received in reset event 
686  * @param[in] outb bundle to use for returning result 
687  *
688  * @retval APPSVC_RET_OK - success
689  * @retval APPSVC_RET_ERROR - general error 
690  * @retval APPSVC_RET_EINVAL - invalid argument(content)
691  *
692  * @pre None.
693  * @post None.
694  * @see appsvc_send_result.
695  * @remarks None. 
696  *
697  * @par Sample code:
698  * @code
699 #include <appsvc.h>
700
701 ...
702 {
703         struct appdata *ad = data;
704         bundle* res_bundle;
705         
706         appsvc_create_result_bundle(ad->b,&res_bundle);
707         bundle_add(res_bundle, "result", "1");
708         appsvc_send_result(res_bundle, 0);
709 }
710  * @endcode
711  *
712  */
713 int appsvc_create_result_bundle(bundle *inb, bundle **outb);
714
715 /**
716  * @par Description:
717  * This API send appsvc result to caller with bundle.
718  *
719  * @param[in] b Result data in bundle format
720  * @param[in] result result value
721  *
722  * @retval APPSVC_RET_OK - success
723  * @retval APPSVC_RET_ERROR - general error 
724  * @retval APPSVC_RET_EINVAL - invalid argument(content)
725  *
726  * @pre appsvc_create_result_bundle.
727  * @post None.
728  * @see appsvc_send_result.
729  * @remarks None. 
730  *
731  * @par Sample code:
732  * @code
733 #include <appsvc.h>
734
735 ...
736 {
737         struct appdata *ad = data;
738         bundle* res_bundle;
739         
740         appsvc_create_result_bundle(ad->b,&res_bundle);
741         bundle_add(res_bundle, "result", "1");
742         appsvc_send_result(res_bundle, 0);
743 }
744  * @endcode
745  *
746  */
747 int appsvc_send_result(bundle *b, appsvc_result_val result);
748
749 /**
750  * @par Description:
751  * This API set the default application(package name) associated with op, uri and mime-type.
752  *
753  * @param[in] op                operation
754  * @param[in] mime_type mime-type
755  * @param[in] scheme    scheme of uri
756  * @param[in] defapp    default application
757  *
758  * @retval APPSVC_RET_OK - success
759  * @retval APPSVC_RET_ERROR - general error 
760  * @retval APPSVC_RET_EINVAL - invalid argument(content)
761  *
762  * @pre None.
763  * @post None.
764  * @see None.
765  * @remarks None. 
766  *
767  * @par Sample code:
768  * @code
769 #include <appsvc.h>
770
771 ...
772 {
773         appsvc_set_defapp(APPSVC_OPERATION_VIEW, NULL,"http", "org.tizen.mybrowser");
774 }
775  * @endcode
776  *
777  */
778 int appsvc_set_defapp(const char *op, const char *mime_type, const char *uri,
779                                 const char *defapp);
780
781 /**
782  * @par Description:
783  * This API unset the default application(package name) associated with op, uri and mime-type.
784  *
785  * @param[in] defapp    default application
786  *
787  * @retval APPSVC_RET_OK - success
788  * @retval APPSVC_RET_ERROR - general error 
789  *
790  * @pre None.
791  * @post None.
792  * @see None.
793  * @remarks None. 
794  *
795  * @par Sample code:
796  * @code
797 #include <appsvc.h>
798
799 ...
800 {
801         appsvc_unset_defapp("org.tizen.test");
802 }
803  * @endcode
804  *
805  */
806 int appsvc_unset_defapp(const char *defapp);
807
808 /**
809  * @par Description:
810  *      This API ask a application is default application or not.
811  *
812  * @param[in]   pkg_name        application package name
813  * @return      true / false
814  * @retval      1       app_name is default application in appsvc.
815  * @retval      0       app_name is NOT default application in appsvc.
816  *
817   * @pre None.
818   * @post None.
819   * @see None.
820   * @remarks None. 
821   *
822   * @par Sample code:
823   * @code
824 #include <appsvc.h>
825  
826  ...
827
828  * int is_defapp_browser_app()
829  * { 
830  *      return appsvc_is_defapp("org.tizen.browser");
831  * }
832  *
833  * @endcode
834  * @remark
835  *      None
836
837 */
838 int appsvc_is_defapp(const char *pkg_name);
839
840
841 /**
842  * @par Description:
843  *      This API ask a extra data is array or not.
844  *
845  * @param[in] b bundle object 
846  * @param[in] key key of extra data 
847  * @return      true / false
848  * @retval      1       a extra data is array.
849  * @retval      0       a extra data is not array.
850  *
851   * @pre None.
852   * @post None.
853   * @see None.
854   * @remarks None. 
855   *
856   * @par Sample code:
857   * @code
858 #include <appsvc.h>
859  
860  ...
861
862  * int is_defapp_browser_app(bundle *b, char *key)
863  * { 
864  *      return appsvc_data_is_array(b, key);
865  * }
866  *
867  * @endcode
868  * @remark
869  *      None
870
871 */
872 int appsvc_data_is_array(bundle *b, const char *key);
873
874
875 #ifdef __cplusplus
876         }
877 #endif
878
879 /**
880  * @}
881  */
882 /**
883  * @}
884  */
885
886
887 #endif          /* __APP_SVC_H__ */
888
889 /* vi: set ts=8 sts=8 sw=8: */