4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 *@defgroup setting-about
24 *UG creation code for setting-about
29 * - Get info from SIM card and display it.
30 * - if there's no phone number, it shows 'unavailable'.
40 #include <setting-about.h>
41 #include <setting-about-main.h>
44 #define UG_MODULE_API __attribute__ ((visibility("default")))
48 * Event process when the sizeof UG view changes
55 static void setting_about_ug_cb_resize(void *data, Evas *e, Evas_Object *obj,
58 SettingAboutUG *ad = (SettingAboutUG *) data;
59 setting_view_update(&setting_view_about_main, ad);
63 * on_create function of the UG
72 static void *setting_about_ug_on_create(ui_gadget_h ug, enum ug_mode mode,
73 service_h service, void *priv)
76 setting_retvm_if((NULL == priv), NULL, "NULL == priv");
77 SettingAboutUG *aboutUG = priv;
80 aboutUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
81 aboutUG->win_get = (Evas_Object *) ug_get_window();
82 evas_object_show(aboutUG->win_main_layout);
83 aboutUG->evas = evas_object_evas_get(aboutUG->win_main_layout);
85 setting_retvm_if(aboutUG->win_main_layout == NULL, NULL,
86 "cannot get main window ");
88 setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
90 /* register view node table */
91 setting_view_node_table_intialize();
92 setting_view_node_table_register(&setting_view_about_main, NULL);
94 /* setting_view_node_table_register(&setting_view_about_about_view, &setting_view_about_main); */
96 /* creating a view. */
97 setting_create_Gendial_itc("dialogue/1text", &(aboutUG->itc_1text));
98 setting_create_Gendial_itc("dialogue/multiline/2text", &(aboutUG->itc_2text_2));
99 setting_create_Gendial_itc("dialogue/title", &(aboutUG->itc_group_item));
100 setting_create_Gendial_itc("dialogue/2text.3/expandable", &(aboutUG->itc_2text_3_parent));
101 setting_create_Gendial_itc("dialogue/1text.1icon/expandable2", &(aboutUG->itc_1icon_1text_sub));
102 setting_create_Gendial_itc("multiline/1text", &(aboutUG->itc_help_style));
104 aboutUG->itc_seperator.item_style = "dialogue/separator";
105 aboutUG->itc_seperator.func.text_get = NULL;
106 aboutUG->itc_seperator.func.content_get = NULL;
107 aboutUG->itc_seperator.func.state_get = NULL;
108 aboutUG->itc_seperator.func.del = NULL;
110 setting_view_node_set_cur_view(&setting_view_about_main);
111 setting_view_create(&setting_view_about_main, (void *)aboutUG);
112 evas_object_event_callback_add(aboutUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_about_ug_cb_resize, aboutUG);
114 aboutUG->popup_showed_flag = FALSE;
115 return aboutUG->ly_main;
118 static void setting_about_ug_on_start(ui_gadget_h ug, service_h service,
123 static void setting_about_ug_on_pause(ui_gadget_h ug, service_h service,
127 SettingAboutUG *SettingAboutUG = priv;
128 SettingAboutUG->pause_flag = TRUE;
131 static void setting_about_ug_on_resume(ui_gadget_h ug, service_h service,
135 setting_retm_if((!priv), "!priv");
136 SettingAboutUG *aboutUG = priv;
137 aboutUG->pause_flag = FALSE;
139 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
141 memset(str, 0x00, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
142 if(aboutUG->item_data_wifi)
144 setting_about_main_get_wifi_mac_address_string(str, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
145 aboutUG->item_data_wifi->sub_desc = (char*)g_strdup(str);
146 elm_object_item_data_set(aboutUG->item_data_wifi->item, aboutUG->item_data_wifi);
147 elm_genlist_item_update(aboutUG->item_data_wifi->item);
149 memset(str, 0x00, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
150 if(aboutUG->item_data_bt)
152 setting_about_main_get_bluetooth_address_string(str, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
153 aboutUG->item_data_bt->sub_desc = (char*)g_strdup(str);
154 elm_object_item_data_set(aboutUG->item_data_bt->item, aboutUG->item_data_bt);
155 elm_genlist_item_update(aboutUG->item_data_bt->item);
160 * on_destroy function of the UG
166 static void setting_about_ug_on_destroy(ui_gadget_h ug, service_h service,
170 setting_retm_if((!priv), "!priv");
171 SettingAboutUG *aboutUG = priv;
173 evas_object_event_callback_del(aboutUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_about_ug_cb_resize); /* fix flash issue for gallery */
176 /* delete the allocated objects. */
177 setting_view_destroy(&setting_view_about_main, aboutUG);
178 if (NULL != ug_get_layout(aboutUG->ug)) {
179 evas_object_hide((Evas_Object *) ug_get_layout(aboutUG->ug));
180 evas_object_del((Evas_Object *) ug_get_layout(aboutUG->ug));
186 static void setting_about_ug_on_message(ui_gadget_h ug, service_h msg,
187 service_h service, void *priv)
192 static void setting_about_ug_on_event(ui_gadget_h ug, enum ug_event event,
193 service_h service, void *priv)
197 case UG_EVENT_LOW_MEMORY:
199 case UG_EVENT_LOW_BATTERY:
201 case UG_EVENT_LANG_CHANGE:
203 case UG_EVENT_ROTATE_PORTRAIT:
205 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
207 case UG_EVENT_ROTATE_LANDSCAPE:
209 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
211 case UG_EVENT_REGION_CHANGE:
218 static void setting_about_ug_on_key_event(ui_gadget_h ug,
219 enum ug_key_event event,
220 service_h service, void *priv)
223 SettingAboutUG *ad = (SettingAboutUG *) priv;
228 case UG_KEY_EVENT_END:
230 if (elm_naviframe_top_item_get(ad->navi_bar) ==
231 elm_naviframe_bottom_item_get(ad->navi_bar)) {
234 /* elm_naviframe_item_pop(ad->navi_bar); */
235 setting_view_cb_at_endKey(ad);
244 static void __about_gl_sel_expand(void *data, Evas_Object *obj,
247 /* SETTING_TRACE_BEGIN; */
248 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
249 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
250 elm_genlist_item_selected_set(item, 0);
251 bool status = !elm_genlist_item_expanded_get(item);
252 elm_genlist_item_expanded_set(item, status);
256 * @see __on_sim_get_msisdn (caller)
258 Eina_Bool __insert_item_idler(void *data)
261 retv_if(!data, FALSE);
262 SettingAboutUG *ad = data;
263 if (ad->item_dev_name) //the genlist exists already.
265 SETTING_TRACE("Beging to insert items...");
268 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
269 setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
271 Setting_GenGroupItem_Data *item_data = NULL;
272 if (ad->my_numbers.count == 1) {
273 item_data = calloc(1, sizeof(Setting_GenGroupItem_Data));
274 setting_retvm_if(!item_data, FALSE, "calloc item_data failed");
275 item_data->keyStr = (char *)g_strdup("IDS_ST_BODY_MY_NUMBER");
276 item_data->sub_desc = (char *)g_strdup(sel_num);
277 item_data->swallow_type = SWALLOW_Type_INVALID;
279 item_data->item = elm_genlist_item_insert_after(ad->genlsit, &(ad->itc_2text_2),
281 ad->item_dev_name->item,
282 ELM_GENLIST_ITEM_NONE,
284 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
286 } else if (ad->my_numbers.count > 1) {
287 setting_enable_expandable_genlist(ad->genlsit, ad,
288 setting_about_main_exp_cb, NULL);
289 item_data = calloc(1, sizeof(Setting_GenGroupItem_Data));
290 setting_retvm_if(!item_data, FALSE, "calloc item_data failed");
291 item_data->keyStr = (char *)g_strdup("IDS_ST_BODY_MY_NUMBER");
292 item_data->sub_desc = (char *)g_strdup(sel_num);
293 item_data->swallow_type = SWALLOW_Type_INVALID;
295 item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
296 item_data->item = elm_genlist_item_insert_after(ad->genlsit, &(ad->itc_2text_3_parent),
298 ad->item_dev_name->item,
299 ELM_GENLIST_ITEM_TREE,
300 __about_gl_sel_expand, NULL);
308 * called at initialization of About UG
309 * @see tel_get_sim_msisdn
311 static void __on_sim_get_msisdn(TapiHandle *handle, int result, void *data, void *user_data)
314 ret_if(!user_data || !data);
315 SettingAboutUG *ad = user_data;
316 TelSimAccessResult_t access_rt = result;
317 //TelSimMsisdnList_t *list = data;
320 SETTING_TRACE("access_rt[%d]", access_rt);
324 memcpy(&(ad->my_numbers), data, sizeof(TelSimMsisdnList_t));
326 TelSimMsisdnList_t r_numbers;
328 safeCopyStr(r_numbers.list[0].name, "n1", 30);
329 safeCopyStr(r_numbers.list[1].name, "n2", 30);
330 safeCopyStr(r_numbers.list[2].name, "n3", 30);
331 safeCopyStr(r_numbers.list[0].num, "1111111111", 30);
332 safeCopyStr(r_numbers.list[1].num, "2222222222", 30);
333 safeCopyStr(r_numbers.list[2].num, "3333333333", 30);
334 memcpy(&(ad->my_numbers), &r_numbers, sizeof(TelSimMsisdnList_t));
338 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
339 setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
341 bool isFound = FALSE;
342 SETTING_TRACE("ad->my_numbers.count[%d]", ad->my_numbers.count);
344 for (i = 0; i < ad->my_numbers.count && i < SETTING_ABOUT_MY_NUMBERS_LEN; i++) {
345 SETTING_TRACE("index[%d] - name[%s], num[%s]", i, ad->my_numbers.list[i].name, ad->my_numbers.list[i].num);
346 if (0 == safeStrCmp(sel_num, ad->my_numbers.list[i].num)) {
350 if (!isFound && ad->my_numbers.count > 0) {//if not found, set as the first num of returned-list
351 SETTING_TRACE("Selected-num hasn't been found, to let the first one as defalut one");
352 setting_set_string_slp_key(STR_SLP_SETTING_SELECT_NUM, ad->my_numbers.list[0].num, &err);
355 ad->tapi_responsed = TRUE;
357 evas_object_del(ad->popup);
360 setting_about_generate_genlist((void *)ad);
363 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
366 SettingAboutUG *aboutUG = calloc(1, sizeof(SettingAboutUG));
367 setting_retvm_if(!aboutUG, -1, "Create SettingAboutUG obj failed");
369 ops->create = setting_about_ug_on_create;
370 ops->start = setting_about_ug_on_start;
371 ops->pause = setting_about_ug_on_pause;
372 ops->resume = setting_about_ug_on_resume;
373 ops->destroy = setting_about_ug_on_destroy;
374 ops->message = setting_about_ug_on_message;
375 ops->event = setting_about_ug_on_event;
376 ops->key_event = setting_about_ug_on_key_event;
378 ops->opt = UG_OPT_INDICATOR_ENABLE;
384 setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
385 if (VCONFKEY_TELEPHONY_SIM_INSERTED == value)//There is a sim card, so do display to user
387 aboutUG->handle = tel_init(NULL);
390 SETTING_TRACE("aboutUG->handle:%p", aboutUG->handle);
391 if (aboutUG->handle) {
392 SETTING_TRACE("tel_init sucessed, and there is at least one sim card, now trying to get misidns");
393 if (tel_get_sim_msisdn(aboutUG->handle, __on_sim_get_msisdn, aboutUG) == TAPI_API_SUCCESS) {
394 SETTING_TRACE("tel_get_sim_msisdn sent");
400 SETTING_TRACE_DEBUG("There is no sim card, so skip getting misidns");
405 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
408 SettingAboutUG *aboutUG;
409 setting_retm_if(!ops, "ops == NULL");
414 && tel_deinit(aboutUG->handle) == TAPI_API_SUCCESS) {
415 SETTING_TRACE("tel_deinit sucessed");
421 /* ***************************************************
425 ****************************************************/
426 void setting_about_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
429 SettingAboutUG *ad = (SettingAboutUG *) priv;
436 base = (Evas_Object *) ug_get_layout(ug);
441 case UG_MODE_FULLVIEW:
442 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
444 //elm_win_resize_object_add(ad->win_get, base);
445 evas_object_show(base);
454 static void __setting_about_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
458 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
459 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
460 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
461 elm_genlist_item_selected_set(subitem, 0);
462 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
463 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
464 ret_if(NULL == data_subItem || NULL == data_parentItem);
468 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
469 setting_retm_if(0 != err, "Set vconf error[%d]",data_parentItem->int_slp_setting_binded);
471 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
472 elm_object_item_data_set(data_parentItem->item, data_parentItem);
473 elm_genlist_item_update(data_parentItem->item);
474 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
477 static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
481 retm_if(data == NULL, "Data parameter is NULL");
482 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
484 Elm_Object_Item *subItem = list_item->item;
485 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
487 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem); /* subItem data */
488 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
489 ret_if(NULL == data_subItem || NULL == data_parentItem);
492 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
495 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
496 elm_object_item_data_set(data_parentItem->item, data_parentItem);
497 elm_genlist_item_update(data_parentItem->item);
498 elm_radio_value_set(obj, data_subItem->chk_status);
501 void setting_about_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
504 setting_retm_if(data == NULL, "Data parameter is NULL");
505 setting_retm_if(event_info == NULL, "event_info parameter is NULL");
507 SettingAboutUG *ad = (SettingAboutUG *) data;
508 Elm_Object_Item *parentItem = event_info; /* parent item */
509 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
510 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
512 Evas_Object *rgd = elm_radio_add(scroller);
513 elm_radio_value_set(rgd, -1);
516 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
517 setting_get_string_slp_key(data_parentItem->int_slp_setting_binded, sel_num, &err);
518 SETTING_TRACE("binded: %d, checked: %s, err: %d", data_parentItem->int_slp_setting_binded, sel_num, err);
522 Setting_GenGroupItem_Data *item_data = NULL;
524 for(; i < ad->my_numbers.count; i++) {
525 if (ad->my_numbers.list[i].num == NULL) {
529 if (sel_idx == -1 && 0 == safeStrCmp(sel_num, ad->my_numbers.list[i].num)) {
532 item_data = setting_create_Gendial_exp_sub_field(scroller,
533 &(ad->itc_1icon_1text_sub),
534 __setting_about_sub_list_sel_cb, ad, parentItem,
535 SWALLOW_Type_1RADIO, rgd,
537 ad->my_numbers.list[i].num, __setting_about_sub_list_rd_change);
539 item_data->userdata = ad;
541 SETTING_TRACE_ERROR("item_data is NULL");
545 elm_radio_value_set(rgd, sel_idx);
550 * Reset function to 'reset' the settings of the UG, it will be invoked by 'Reset' UG
555 UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
558 #if SUPPORT_RUN_SYSTEM_COMMAND
559 return excuteCmd(SETTING_POSTINST_FILE, 1, "about");
561 return vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, SETTING_ABOUT_DEFAULT_DEVICE_NAME);