3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.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
9 * http://www.tizenopensource.org/license
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.
19 #include <calendar-svc-provider.h>
22 #include <vconf-keys.h>
27 // TODO: get full path from caller
28 #define VFILE_PATH "/opt/data/ug-calendar"
30 extern int appcore_set_i18n(const char *, const char *);
32 static char* __cal_ug_get_caller(service_h b, const char *key)
36 int r = service_get_extra_data(b, key, &v);
37 c_retv_if(r != SERVICE_ERROR_NONE, NULL);
39 if (!v || v[0] == '\0')
40 return strdup("Unknown");
45 static char* __cal_ug_get_file_name(service_h b, const char *key)
48 char path[FILENAME_MAX];
50 int r = service_get_extra_data(b, key, &v);
51 c_retv_if(r != SERVICE_ERROR_NONE, NULL);
53 // TODO: check full path or not
55 snprintf(path, sizeof(path), "%s/%s", VFILE_PATH, v);
59 r = access(path, R_OK);
62 ERR("UG: Access failed: %s", path);
69 static enum cld_ug_mode __cal_ug_get_mode(service_h service, const char *key)
71 c_retv_if(!service, _MODE_UNKNOWN);
72 c_retv_if(!key, _MODE_UNKNOWN);
76 int r = service_get_extra_data(service, key, &value);
77 c_retvm_if(r != SERVICE_ERROR_NONE, _MODE_UNKNOWN, "%d", r);
79 enum cld_ug_mode ret = _MODE_UNKNOWN;
81 if (!CAL_STRCMP(value, "file"))
84 if (!CAL_STRCMP(value, "text"))
87 if (!CAL_STRCMP(value, "view"))
95 static inline int __cal_ug_set_ug_data(struct ug_data *ugd, service_h service)
97 c_retv_if(!service, -1);
100 ugd->mode = __cal_ug_get_mode(service, "mode");
101 if (ugd->mode == _MODE_UNKNOWN) {
105 r = service_get_extra_data(service, "pickType", &value);
106 c_retvm_if(r != SERVICE_ERROR_NONE, -1, "%d", r);
108 if (!CAL_STRCMP(value, "multiple"))
109 ugd->is_multiple = EINA_TRUE;
111 // TODO: Single select
112 ugd->is_multiple = EINA_TRUE;
117 r = service_get_extra_data(service, "itemType", &value);
118 c_retvm_if(r != SERVICE_ERROR_NONE, -1, "%d", r);
120 if (!CAL_STRCMP(value, "event"))
121 ugd->is_event = EINA_TRUE;
123 ugd->is_event = EINA_FALSE;
128 ugd->mode = _MODE_GET_VCS;
131 r = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &val);
134 else if( val == 1 || val == 2)
135 ugd->is_hour24 = val -1;
137 ERR("vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &val); error");
141 ugd->caller = __cal_ug_get_caller(service, "caller");
144 ugd->vcs_file = __cal_ug_get_file_name(service, "file");
147 ERR("UG: Invalid filename");
159 static void __cal_ug_back_button_callback(void *data, Evas_Object *obj, void *ei)
161 struct ug_data *ugd = data;
164 ug_destroy_me(ugd->ug);
167 static void __cal_ug_add_back_button(struct ug_data *ugd)
171 bt = elm_button_add(ugd->nv);
175 elm_object_style_set(bt, "naviframe/back_btn/default");
177 elm_object_text_set(bt, "Back");
178 evas_object_show(bt);
180 Elm_Object_Item* navi_item = elm_naviframe_top_item_get(ugd->nv);
182 elm_object_item_part_content_set(navi_item, "prev_btn", bt);
184 evas_object_smart_callback_add(bt, "clicked", __cal_ug_back_button_callback, ugd);
187 extern void cal_vcs_viewer_ug_create(struct ug_data *ugd);
189 static Evas_Object *__cal_ug_create(Evas_Object *parent, struct ug_data *ugd)
191 ugd->base = cal_util_add_layout(parent, NULL);
192 CAL_ASSERT(ugd->base);
194 ugd->nv = elm_naviframe_add(parent);
197 ugd->bg = cal_util_add_bg(ugd->base, EINA_FALSE);
200 elm_object_theme_set(ugd->nv, ugd->theme);
201 elm_object_part_content_set(ugd->base, "elm.swallow.content", ugd->nv);
202 elm_object_part_content_set(ugd->base, "elm.swallow.bg", ugd->bg);
207 cal_list_ug_create(S_("IDS_COM_BODY_CALENDAR"), ugd);
210 cal_vcs_viewer_ug_create(ugd);
218 evas_object_del(ugd->base);
222 __cal_ug_add_back_button(ugd);
227 static void __cal_ug_free_data(struct ug_data *ugd)
234 static void *__cal_ug_create_callback(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv)
236 c_retv_if(!ug, NULL);
237 c_retv_if(!service, NULL);
238 c_retv_if(!priv, NULL);
247 cal_util_connect_pattern_generator();
249 if (mode != UG_MODE_FULLVIEW)
252 Evas_Object *parent = ug_get_parent_layout(ug);
253 c_retv_if(!parent, NULL);
255 r = __cal_ug_set_ug_data(ugd, service);
258 r = CALENDAR_SVC_CONNECT();
259 if (r != CAL_SUCCESS) {
260 ERR("UG: calendar service connect failed");
261 __cal_ug_free_data(ugd);
265 base = __cal_ug_create(parent, ugd);
267 CALENDAR_SVC_DISCONNECT();
268 __cal_ug_free_data(ugd);
275 static void __cal_ug_destroy_callback(ui_gadget_h ug, service_h data, void *priv)
284 CALENDAR_SVC_DISCONNECT();
286 cal_util_disconnect_pattern_generator();
288 __cal_ug_free_data(ugd);
290 cal_util_delete_evas_object(&ugd->base);
293 static void __cal_ug_key_callback(ui_gadget_h ug, enum ug_key_event evt, service_h data, void *priv)
298 DBG("UG: key event %d", evt);
302 case UG_KEY_EVENT_END:
310 static inline void __cal_ug_bind_text_domain()
314 r = bindtextdomain(UGNAME, UGLOCALE);
316 ERR("UG: bindtextdomain error");
319 API int UG_MODULE_INIT(struct ug_module_ops *ops)
326 CAL_CALLOC(ugd, 1, struct ug_data);
328 ops->create = __cal_ug_create_callback;
329 ops->destroy = __cal_ug_destroy_callback;
330 ops->key_event = __cal_ug_key_callback;
332 ops->opt = UG_OPT_INDICATOR_ENABLE;
334 __cal_ug_bind_text_domain();
336 appcore_set_i18n(CALENDAR_PACKAGE, LOCALEDIR);
341 API void UG_MODULE_EXIT(struct ug_module_ops *ops)