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