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