update license verison number 1.0 -> 1.1
[apps/home/settings.git] / setting-time / src / setting-time.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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
18 /**
19  *@defgroup setting-datetime
20  *UG creation code for setting-datetime
21  *
22  * - Automatic update
23  * - Time zone
24  * - Date and time (elm_datefield)
25  * - Time format  (12H/24H)
26  * - First day of week
27  */
28 #include <setting-time.h>
29 #ifndef UG_MODULE_API
30 #define UG_MODULE_API __attribute__ ((visibility("default")))
31 #endif
32
33 /**
34 * @callback handler for EVAS_CALLBACK_RESIZE
35 *
36 * @param data user data (SettingTimeUG *)
37 */
38 static void setting_time_ug_cb_resize(void *data, Evas *e, Evas_Object *obj,
39                                       void *event_info)
40 {
41         SETTING_TRACE_BEGIN;
42         SettingTimeUG *ad = (SettingTimeUG *) data;
43         setting_view_update(&setting_view_time_main, ad);
44 }
45
46 /**
47 * @callback function called first while loading setting-time UG.
48 *
49 * @param ug ug object itself.
50 * @param mode
51 * @param data bundle (key, value pair) data as arguments into UG.
52 * @param priv SettingTimeUG context
53 *
54 * @return
55 */
56 static void *setting_time_ug_on_create(ui_gadget_h ug, enum ug_mode mode,
57                                        service_h service, void *priv)
58 {
59         SETTING_TRACE_BEGIN;
60         setting_retvm_if((!priv), NULL, "!priv");
61
62         SettingTimeUG *timeUG = priv;
63         timeUG->ug = ug;
64         timeUG->bundle_data = service;
65         timeUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
66         timeUG->win_get = (Evas_Object *) ug_get_window();
67         evas_object_show(timeUG->win_main_layout);
68         timeUG->evas = evas_object_evas_get(timeUG->win_main_layout);
69
70         timeUG->pop_progress = NULL;
71         /*  Initialize Caller value */
72         timeUG->caller = NULL;
73
74         setting_retvm_if(timeUG->win_main_layout == NULL, NULL, "cannot get main window ");
75
76         /* --------------------------------------------------------- */
77         char *pa_path = NULL;;
78
79         pa_path = vconf_get_str(VCONFKEY_LANGSET);
80         if (!pa_path) {
81                 SETTING_TRACE ("%s*** language setting has no proper value (nil) ***%s", SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
82                 return NULL;
83         }
84
85         /* set launguage */
86         setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
87
88         /* register view node table */
89         setting_view_node_table_intialize();
90         setting_view_node_table_register(&setting_view_time_main, NULL);
91
92         setting_create_Gendial_itc("dialogue/2text.3", &(timeUG->itc_2text_2));
93         setting_create_Gendial_itc("dialogue/1text.1icon",
94                                    &(timeUG->itc_1text_1icon));
95
96         setting_create_Gendial_itc("dialogue/1icon", &(timeUG->itc_layout));
97
98         setting_create_Gendial_itc("dialogue/2text.3/expandable",
99                                    &(timeUG->itc_2text_3_parent));
100         setting_create_Gendial_itc("dialogue/1text.1icon/expandable2",
101                                    &(timeUG->itc_1icon_1text_sub));
102
103         timeUG->itc_seperator.item_style = "dialogue/separator";
104         timeUG->itc_seperator.func.text_get = NULL;
105         timeUG->itc_seperator.func.content_get = NULL;
106         timeUG->itc_seperator.func.state_get = NULL;
107         timeUG->itc_seperator.func.del = NULL;
108
109         /*  creating a view. */
110         setting_view_node_set_cur_view(&setting_view_time_main);
111         setting_view_create(&setting_view_time_main, (void *)timeUG);
112         evas_object_event_callback_add(timeUG->win_main_layout,
113                                        EVAS_CALLBACK_RESIZE,
114                                        setting_time_ug_cb_resize, timeUG);
115         return timeUG->ly_main;
116 }
117
118 static void setting_time_ug_on_start(ui_gadget_h ug, service_h service,
119                                      void *priv)
120 {
121         SETTING_TRACE_BEGIN;
122         /*  do nothing */
123 }
124
125 static void setting_time_ug_on_pause(ui_gadget_h ug, service_h service,
126                                      void *priv)
127 {
128         SETTING_TRACE_BEGIN;
129         /*  do nothing */
130 }
131
132 static void setting_time_ug_on_resume(ui_gadget_h ug, service_h service,
133                                       void *priv)
134 {
135         /*  do nothing */
136 }
137
138 static void setting_time_ug_on_destroy(ui_gadget_h ug, service_h service,
139                                        void *priv)
140 {
141         SETTING_TRACE_BEGIN;
142         setting_retm_if((!priv), "!priv");
143         SettingTimeUG *timeUG = priv;
144
145         evas_object_event_callback_del(timeUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_time_ug_cb_resize);       /* fix flash issue for gallery */
146         timeUG->ug = ug;
147
148         /*  delete the allocated objects. */
149         setting_view_destroy(&setting_view_time_main, timeUG);
150
151         if (NULL != ug_get_layout(timeUG->ug)) {
152                 evas_object_hide((Evas_Object *) ug_get_layout(timeUG->ug));
153                 evas_object_del((Evas_Object *) ug_get_layout(timeUG->ug));
154         }
155
156         SETTING_TRACE_END;
157 }
158
159 static void setting_time_ug_on_message(ui_gadget_h ug, service_h msg,
160                                        service_h service, void *priv)
161 {
162         SETTING_TRACE_BEGIN;
163 }
164
165 static void setting_time_ug_on_event(ui_gadget_h ug, enum ug_event event,
166                                      service_h service, void *priv)
167 {
168         SETTING_TRACE_BEGIN;
169         switch (event) {
170         case UG_EVENT_LOW_MEMORY:
171                 break;
172         case UG_EVENT_LOW_BATTERY:
173                 break;
174         case UG_EVENT_LANG_CHANGE:
175                 break;
176         case UG_EVENT_ROTATE_PORTRAIT:
177                 break;
178         case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
179                 break;
180         case UG_EVENT_ROTATE_LANDSCAPE:
181                 break;
182         case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
183                 break;
184         case UG_EVENT_REGION_CHANGE:
185                 break;
186         default:
187                 break;
188         }
189 }
190
191 /**
192 * @brief key event handler for UG
193 */
194 static void setting_time_ug_on_key_event(ui_gadget_h ug,
195                                          enum ug_key_event event, service_h service,
196                                          void *priv)
197 {
198         SETTING_TRACE_BEGIN;
199         SettingTimeUG *ad = (SettingTimeUG *) priv;
200
201         switch (event) {
202         case UG_KEY_EVENT_END:
203                 {
204                         if (0 == safeStrCmp(ad->caller, "pwlock")) {
205                                 /*  Create Bundle and send message */
206
207                                 service_h svc;
208                                 if (service_create(&svc))
209                                         return;
210
211                                 service_add_extra_data(svc, "result", "lbutton_click");
212                                 ug_send_result(ad->ug, svc);
213
214                                 service_destroy(svc);
215                         }
216
217                         if (elm_naviframe_top_item_get(ad->navi_bar) ==
218                            elm_naviframe_bottom_item_get(ad->navi_bar)) {
219                                 ug_destroy_me(ug);
220                         } else {
221                                 /* elm_naviframe_item_pop(ad->navi_bar); */
222                                 setting_view_cb_at_endKey(ad);
223                         }
224                 }
225                 break;
226         default:
227                 break;
228         }
229 }
230
231 /**
232 * @brief UG entry point - create the SettingTimeUG context
233 * @return 0
234 */
235 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
236 {
237         SETTING_TRACE_BEGIN;
238         SettingTimeUG *timeUG = calloc(1, sizeof(SettingTimeUG));
239         setting_retvm_if(!timeUG, -1, "Create SettingTimeUG obj failed");
240
241         ops->create = setting_time_ug_on_create;
242         ops->start = setting_time_ug_on_start;
243         ops->pause = setting_time_ug_on_pause;
244         ops->resume = setting_time_ug_on_resume;
245         ops->destroy = setting_time_ug_on_destroy;
246         ops->message = setting_time_ug_on_message;
247         ops->event = setting_time_ug_on_event;
248         ops->key_event = setting_time_ug_on_key_event;
249         ops->priv = timeUG;
250         ops->opt = UG_OPT_INDICATOR_ENABLE;
251
252         return 0;
253 }
254
255 /**
256 * @brief UG finalizer - destroy the SettingTimeUG context
257 */
258 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
259 {
260         SETTING_TRACE_BEGIN;
261         struct SettingTimeUG *timeUG;
262         setting_retm_if(!ops, "ops == NULL");
263
264         timeUG = ops->priv;
265         if (timeUG)
266                 FREE(timeUG);
267 }
268
269 /**
270 * Reset function to 'reset' the settings of the UG, it will be invoked by 'Reset' UG
271 */
272 UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
273 {
274         SETTING_TRACE_BEGIN;
275         int ret = 0;
276 #if SUPPORT_RUN_SYSTEM_COMMAND
277         ret += excuteCmd(SETTING_POSTINST_FILE, 1, "timeAndData");
278 #else
279         if (!isEmulBin()) {
280                 ret += vconf_set_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, TRUE);
281         }
282
283         ret += vconf_set_int(VCONFKEY_REGIONFORMAT_TIME1224, VCONFKEY_TIME_FORMAT_12);
284         ret += vconf_set_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, SETTING_DATE_FORMAT_DD_MM_YYYY);
285         ret += vconf_set_int(VCONFKEY_SETAPPL_WEEKOFDAY_FORMAT_INT, SETTING_WEEKOFDAY_FORMAT_SUNDAY);
286
287         ret += vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, "+9");
288         ret += vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, "IDS_WCL_BODY_CITYNAME_SEOUL");
289
290         /** @todo replace with vconf ID */
291         ret += vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, "Asia/Seoul");
292
293 #endif
294         return ret;
295 }
296