2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <app_control.h>
19 #include <Elementary.h>
20 #include <ui-gadget.h>
23 #include "attach_panel.h"
24 #include "attach_panel_internal.h"
29 static void __foreach_bundle_to_add_cb(const char *key, const int type, bundle_keyval_t *kv, void *data)
31 app_control_h app_control = data;
32 char *basic_val = NULL;
36 size_t *array_element_size = NULL;
37 unsigned int array_length = 0;
38 int ret = BUNDLE_ERROR_NONE;
47 ret = bundle_keyval_get_basic_val(kv, (void *) &basic_val, &size);
48 ret_if(ret != BUNDLE_ERROR_NONE);
51 ret = app_control_add_extra_data(app_control, key, basic_val);
52 ret_if(ret != APP_CONTROL_ERROR_NONE);
55 case BUNDLE_TYPE_STR_ARRAY:
56 ret = bundle_keyval_get_array_val(kv, &arr, &array_length, &array_element_size);
57 ret_if(ret != BUNDLE_ERROR_NONE);
60 ret = app_control_add_extra_data_array(app_control, key, (const char **) arr, array_length);
61 ret_if(ret != APP_CONTROL_ERROR_NONE);
64 case BUNDLE_TYPE_BYTE:
65 ret = bundle_keyval_get_basic_val(kv, (void *) &basic_val, &size);
66 ret_if(ret != BUNDLE_ERROR_NONE);
69 ret = app_control_add_extra_data(app_control, key, basic_val);
70 ret_if(ret != APP_CONTROL_ERROR_NONE);
73 case BUNDLE_TYPE_BYTE_ARRAY:
74 ret = bundle_keyval_get_array_val(kv, &arr, &array_length, &array_element_size);
75 ret_if(ret != BUNDLE_ERROR_NONE);
78 ret = app_control_add_extra_data_array(app_control, key, (const char **) arr, array_length);
79 ret_if(ret != APP_CONTROL_ERROR_NONE);
83 _E("There is wrong type");
90 int _bundle_add_to_app_control(bundle *b, app_control_h app_control)
92 retv_if(!b, ATTACH_PANEL_ERROR_INVALID_PARAMETER);
93 retv_if(!app_control, ATTACH_PANEL_ERROR_INVALID_PARAMETER);
95 bundle_foreach(b, (void *) __foreach_bundle_to_add_cb, app_control);
96 retv_if(get_last_result() != BUNDLE_ERROR_NONE, ATTACH_PANEL_ERROR_OUT_OF_MEMORY);
98 return ATTACH_PANEL_ERROR_NONE;
103 static void __foreach_bundle_to_change_cb(const char *key, const int type, bundle_keyval_t *kv, void *data)
105 bundle *origin = data;
106 char *basic_val = NULL;
110 size_t *array_element_size = NULL;
111 unsigned int array_length = 0;
112 int ret = BUNDLE_ERROR_NONE;
118 case BUNDLE_TYPE_STR:
119 ret = bundle_keyval_get_basic_val(kv, (void *) &basic_val, &size);
120 ret_if(ret != BUNDLE_ERROR_NONE);
123 ret = bundle_del(origin, key);
124 ret_if(ret != BUNDLE_ERROR_NONE && ret != BUNDLE_ERROR_KEY_NOT_AVAILABLE);
126 ret = bundle_add_str(origin, key, basic_val);
127 ret_if(ret != BUNDLE_ERROR_NONE);
130 case BUNDLE_TYPE_STR_ARRAY:
131 ret = bundle_keyval_get_array_val(kv, &arr, &array_length, &array_element_size);
132 ret_if(ret != BUNDLE_ERROR_NONE);
135 ret = bundle_del(origin, key);
136 ret_if(ret != BUNDLE_ERROR_NONE && ret != BUNDLE_ERROR_KEY_NOT_AVAILABLE);
138 ret = bundle_add_str_array(origin, key, (const char **) arr, array_length);
139 ret_if(ret != BUNDLE_ERROR_NONE);
142 case BUNDLE_TYPE_BYTE:
143 ret = bundle_keyval_get_basic_val(kv, (void *) &basic_val, &size);
144 ret_if(ret != BUNDLE_ERROR_NONE);
147 ret = bundle_del(origin, key);
148 ret_if(ret != BUNDLE_ERROR_NONE && ret != BUNDLE_ERROR_KEY_NOT_AVAILABLE);
150 ret = bundle_add_byte(origin, key, basic_val, size);
151 ret_if(ret != BUNDLE_ERROR_NONE);
154 case BUNDLE_TYPE_BYTE_ARRAY:
155 ret = bundle_keyval_get_array_val(kv, &arr, &array_length, &array_element_size);
156 ret_if(ret != BUNDLE_ERROR_NONE);
159 ret = bundle_del(origin, key);
160 ret_if(ret != BUNDLE_ERROR_NONE && ret != BUNDLE_ERROR_KEY_NOT_AVAILABLE);
162 ret = bundle_add_str_array(origin, key, (const char **) arr, array_length);
163 ret_if(ret != BUNDLE_ERROR_NONE);
167 _E("There is wrong type");
174 int _bundle_add_to_bundle(bundle *origin, bundle *replace)
176 retv_if(!origin, ATTACH_PANEL_ERROR_INVALID_PARAMETER);
177 retv_if(!replace, ATTACH_PANEL_ERROR_INVALID_PARAMETER);
179 bundle_foreach(replace, (void *) __foreach_bundle_to_change_cb, origin);
180 retv_if(get_last_result() != BUNDLE_ERROR_NONE, ATTACH_PANEL_ERROR_OUT_OF_MEMORY);
182 return ATTACH_PANEL_ERROR_NONE;