4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.1 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include <ui-gadget-module.h>
23 #include <bundle_internal.h>
24 #include <efl_extension.h>
25 #include <libxml/xmlmemory.h>
26 #include <libxml/parser.h>
27 #include <libxml/tree.h>
31 #include "common_utils.h"
32 #include "i18nmanager.h"
34 #define SUPPLICANT_SERVICE "fi.w1.wpa_supplicant1"
35 #define SUPPLICANT_SERVICE_INTERFACE SUPPLICANT_SERVICE ".Interface"
36 #define COLOR_TABLE "/usr/apps/wifi-efl-ug/shared/res/tables/ug-wifi-efl_ChangeableColorTable.xml"
37 #define FONT_TABLE "/usr/apps/wifi-efl-ug/shared/res/tables/ug-wifi-efl_FontInfoTable.xml"
39 #define MODEL_CONFIG_FILE "/etc/config/model-config.xml"
40 #define TYPE_FIELD "string"
41 #define FEATURE_TAG "platform"
42 #define MODEL_CONFIG_TAG "model-config"
45 TIZEN_MODEL_UNKNOWN = 0,
46 TIZEN_MODEL_EMULATOR = 0x1,
47 TIZEN_MODEL_NOT_EMULATOR = 0x2,
50 static tizen_model_t emulator = TIZEN_MODEL_UNKNOWN;
51 static UG_TYPE g_ug_type = UG_VIEW_DEFAULT;
56 } two_line_disp_data_t;
58 struct managed_idle_data {
64 struct gdbus_connection_data {
65 GDBusConnection *connection;
66 guint subscribe_id_supplicant;
70 // not used at this moment 06/15/2018
71 static struct gdbus_connection_data gdbus_conn = { NULL, 0 };
73 static GSList *managed_idler_list = NULL;
74 static int (*rotate_cb)(enum appcore_rm, void*, Eina_Bool, Eina_Bool) = NULL;
75 static void *rotate_cb_data = NULL;
76 static Eina_Bool is_wps = EINA_FALSE;
77 static Eina_Bool is_setting = EINA_FALSE;
78 static Eina_Bool is_portrait_mode = EINA_TRUE;
79 static Ecore_Timer *scan_update_timer = NULL;
81 static char *__common_utils_2line_text_get(void *data, Evas_Object *obj, const char *part)
83 two_line_disp_data_t *item_data = (two_line_disp_data_t *)data;
84 if (!strcmp("elm.text", part))
85 return g_strdup(item_data->title_str);
86 else if (!strcmp("elm.text.sub", part))
87 return g_strdup(item_data->info_str);
92 static void __common_utils_2line_text_del(void *data, Evas_Object *obj)
94 two_line_disp_data_t *item_data = (two_line_disp_data_t *)data;
96 g_free(item_data->info_str);
97 g_free(item_data->title_str);
102 static void __common_utils_separator_del(void *data, Evas_Object *obj)
104 elm_genlist_item_class_free(data);
108 Eina_Bool common_utils_is_portrait_mode(void)
110 return is_portrait_mode;
113 static void __common_utils_set_portrait_mode(Eina_Bool on)
115 is_portrait_mode = on;
118 void common_utils_set_rotate_cb(int (*func)(enum appcore_rm, void*, Eina_Bool, Eina_Bool),
119 void *data, Eina_Bool wps_value, Eina_Bool setting_value)
122 rotate_cb_data = data;
124 is_setting = setting_value;
127 static void __common_utils_rotate_popup(enum appcore_rm rotmode)
130 rotate_cb(rotmode, rotate_cb_data, is_wps, is_setting);
133 void common_utils_contents_rotation_adjust(int event)
135 if (event == UG_EVENT_ROTATE_PORTRAIT ||
136 event == UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN) {
137 __common_utils_rotate_popup(APPCORE_RM_PORTRAIT_NORMAL);
138 __common_utils_set_portrait_mode(EINA_TRUE);
140 __common_utils_rotate_popup(APPCORE_RM_LANDSCAPE_NORMAL);
141 __common_utils_set_portrait_mode(EINA_FALSE);
145 Elm_Object_Item* common_utils_add_dialogue_separator(Evas_Object* genlist, const char *separator_style)
147 assertm_if(NULL == genlist, "NULL!!");
149 static Elm_Genlist_Item_Class *separator_itc;
150 separator_itc = elm_genlist_item_class_new();
151 separator_itc->item_style = separator_style;
152 separator_itc->func.text_get = NULL;
153 separator_itc->func.content_get = NULL;
154 separator_itc->func.state_get = NULL;
155 separator_itc->func.del = __common_utils_separator_del;
157 Elm_Object_Item* sep = elm_genlist_item_append(
162 ELM_GENLIST_ITEM_GROUP,
166 assertm_if(NULL == sep, "NULL!!");
168 elm_genlist_item_select_mode_set(sep, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
173 char *common_utils_get_ap_security_type_info_txt(const char *pkg_name,
174 wifi_device_info_t *device_info, bool check_fav)
176 bool favorite = false;
178 char *status_txt = NULL;
180 switch (device_info->security_mode) {
181 case WIFI_MANAGER_SECURITY_TYPE_NONE: /** Security disabled */
182 status_txt = g_strdup(sc(pkg_name, I18N_TYPE_Open));
184 case WIFI_MANAGER_SECURITY_TYPE_WEP: /** WEP */
185 case WIFI_MANAGER_SECURITY_TYPE_WPA_PSK: /** WPA-PSK */
186 case WIFI_MANAGER_SECURITY_TYPE_WPA2_PSK: /** WPA2-PSK */
187 if (TRUE == device_info->wps_mode) {
188 status_txt = g_strdup_printf("%s (%s)", sc(pkg_name,
189 I18N_TYPE_Secured), sc(pkg_name, I18N_TYPE_WPS_Available));
191 status_txt = g_strdup(sc(pkg_name, I18N_TYPE_Secured));
194 case WIFI_MANAGER_SECURITY_TYPE_EAP: /** EAP */
195 status_txt = g_strdup_printf("%s (%s)", sc(pkg_name, I18N_TYPE_Secured),
196 sc(pkg_name, I18N_TYPE_EAP));
198 default: /** Unknown */
199 status_txt = g_strdup(sc(pkg_name, I18N_TYPE_Unknown));
203 if (true == check_fav) {
204 wifi_manager_ap_is_favorite(device_info->ap, &favorite);
205 if (true == favorite) {
207 status_txt = g_strdup_printf("%s, %s",
208 sc(pkg_name, I18N_TYPE_Saved), temp);
216 void common_utils_get_device_icon(wifi_device_info_t *device_info, char **icon_path)
218 char buf[MAX_DEVICE_ICON_PATH_STR_LEN] = {'\0', };
220 g_strlcat(buf, "A01-3_icon", sizeof(buf));
222 if (device_info->security_mode != WIFI_MANAGER_SECURITY_TYPE_NONE)
223 g_strlcat(buf, "_lock", sizeof(buf));
225 switch (wlan_manager_get_signal_strength(device_info->rssi)) {
226 case SIGNAL_STRENGTH_TYPE_EXCELLENT:
227 g_strlcat(buf, "_03", sizeof(buf));
229 case SIGNAL_STRENGTH_TYPE_GOOD:
230 g_strlcat(buf, "_02", sizeof(buf));
232 case SIGNAL_STRENGTH_TYPE_WEAK:
233 g_strlcat(buf, "_01", sizeof(buf));
235 case SIGNAL_STRENGTH_TYPE_VERY_WEAK:
237 g_strlcat(buf, "_00", sizeof(buf));
242 *icon_path = g_strdup_printf("%s", buf);
245 char *common_utils_get_rssi_text(const char *str_pkg_name, int rssi)
247 switch (wlan_manager_get_signal_strength(rssi)) {
248 case SIGNAL_STRENGTH_TYPE_EXCELLENT:
249 return g_strdup(sc(str_pkg_name, I18N_TYPE_Excellent));
250 case SIGNAL_STRENGTH_TYPE_GOOD:
251 return g_strdup(sc(str_pkg_name, I18N_TYPE_Good));
253 return g_strdup(sc(str_pkg_name, I18N_TYPE_Weak));
257 void common_utils_set_edit_box_imf_panel_evnt_cb(Elm_Object_Item *item,
258 imf_ctxt_panel_cb_t input_panel_cb, void *user_data)
260 __COMMON_FUNC_ENTER__;
261 common_utils_entry_info_t *entry_info;
262 entry_info = elm_object_item_data_get(item);
266 entry_info->input_panel_cb = input_panel_cb;
267 entry_info->input_panel_cb_data = user_data;
269 Evas_Object *entry = elm_object_item_part_content_get(item, "elm.icon.entry");
270 Ecore_IMF_Context *imf_ctxt = elm_entry_imf_context_get(entry);
271 if (imf_ctxt && entry_info->input_panel_cb) {
272 /* Deleting the previously attached callback */
273 ecore_imf_context_input_panel_event_callback_del(imf_ctxt,
274 ECORE_IMF_INPUT_PANEL_STATE_EVENT,
275 entry_info->input_panel_cb);
276 ecore_imf_context_input_panel_event_callback_add(imf_ctxt,
277 ECORE_IMF_INPUT_PANEL_STATE_EVENT,
278 entry_info->input_panel_cb,
279 entry_info->input_panel_cb_data);
280 DEBUG_LOG(UG_NAME_NORMAL, "set the imf ctxt cbs");
283 __COMMON_FUNC_EXIT__;
287 void common_utils_edit_box_focus_set(Elm_Object_Item *item, Eina_Bool focus_set)
289 __COMMON_FUNC_ENTER__;
293 Evas_Object *entry = elm_object_item_part_content_get(item, "elm.icon.entry");
296 elm_object_focus_set(entry, focus_set);
297 elm_object_focus_allow_set(entry, focus_set);
300 __COMMON_FUNC_EXIT__;
304 void common_utils_edit_box_allow_focus_set(Elm_Object_Item *item,
307 __COMMON_FUNC_ENTER__;
311 Evas_Object *entry = elm_object_item_part_content_get(item, "elm.icon.entry");
312 elm_object_focus_allow_set(entry, focus_set);
314 __COMMON_FUNC_EXIT__;
318 Elm_Object_Item *common_utils_add_2_line_txt_disabled_item(
319 Evas_Object* view_list, const char *style_name,
320 const char *line1_txt, const char *line2_txt)
322 static Elm_Genlist_Item_Class two_line_display_itc;
323 two_line_disp_data_t *two_line_data = NULL;
324 Elm_Object_Item *item = NULL;
326 two_line_display_itc.item_style = style_name;
327 two_line_display_itc.func.text_get = __common_utils_2line_text_get;
328 two_line_display_itc.func.content_get = NULL;
329 two_line_display_itc.func.state_get = NULL;
330 two_line_display_itc.func.del = __common_utils_2line_text_del;
332 two_line_data = g_new0(two_line_disp_data_t, 1);
333 two_line_data->title_str = g_strdup(line1_txt);
334 two_line_data->info_str = g_strdup(line2_txt);
335 SECURE_INFO_LOG(UG_NAME_NORMAL, "title_str = %s info_str = %s",
336 two_line_data->title_str, two_line_data->info_str);
338 item = elm_genlist_item_append(view_list, &two_line_display_itc,
339 two_line_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
340 elm_object_item_disabled_set(item, TRUE);
345 char *common_utils_get_list_item_entry_txt(Elm_Object_Item *entry_item)
347 common_utils_entry_info_t *entry_info =
348 (common_utils_entry_info_t *)elm_object_item_data_get(entry_item);
349 if (entry_info == NULL)
352 DEBUG_LOG(UG_NAME_NORMAL, "entry_info: %p", entry_info);
354 return g_strdup(entry_info->entry_txt);
357 Evas_Object *common_utils_create_layout(Evas_Object *navi_frame)
360 layout = elm_layout_add(navi_frame);
361 elm_layout_theme_set(layout, "layout", "application", "noindicator");
362 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
363 evas_object_show(layout);
368 static void __common_utils_del_popup(void *data, Evas_Object *obj, void *event_info)
370 Evas_Object *popup = (Evas_Object *)data;
371 evas_object_del(popup);
374 Evas_Object *common_utils_show_info_popup(Evas_Object *parent,
375 popup_btn_info_t *popup_data)
377 __COMMON_FUNC_ENTER__;
379 Evas_Object *popup = elm_popup_add(parent);
381 double vertical = g_ug_type == UG_VIEW_OOBE ? 0.5 : 1.0;
384 ERROR_LOG(UG_NAME_ERR, "Could not add popup");
388 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, vertical);
389 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
391 if (popup_data->title_txt) {
392 char *full_txt = NULL;
393 txt = evas_textblock_text_utf8_to_markup(NULL, popup_data->title_txt);
394 if (g_ug_type == UG_VIEW_OOBE)
395 full_txt = g_strdup_printf("<align=left>%s: <b>%s</b></align>",
396 sc(PACKAGE, I18N_TYPE_Ssid), txt);
397 elm_object_domain_translatable_part_text_set(popup,
398 "title,text", PACKAGE, g_ug_type == UG_VIEW_OOBE ? full_txt : txt);
404 if (g_ug_type == UG_VIEW_OOBE && popup_data->sub_title_txt) {
405 txt = g_strdup_printf("<align=left>%s: <b>%s</b></align>",
406 sc(PACKAGE, I18N_TYPE_Security),
407 popup_data->sub_title_txt);
408 elm_object_part_text_set(popup, "subtitle,text", txt);
413 if (popup_data->info_txt) {
414 elm_object_domain_translatable_text_set(popup, PACKAGE,
415 popup_data->info_txt);
418 if (popup_data->btn1_txt) {
419 Evas_Object *btn_1 = elm_button_add(popup);
421 if (g_ug_type== UG_VIEW_OOBE)
422 elm_object_style_set(btn_1, "cancel");
424 elm_object_style_set(btn_1, "popup");
426 elm_object_domain_translatable_text_set(btn_1, PACKAGE,
427 popup_data->btn1_txt);
428 elm_object_part_content_set(popup, "button1", btn_1);
429 if (popup_data->btn1_cb) {
430 evas_object_smart_callback_add(btn_1, "clicked",
431 popup_data->btn1_cb, popup_data->btn1_data);
432 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
433 popup_data->btn1_cb, popup_data->btn1_data);
435 evas_object_smart_callback_add(btn_1, "clicked",
436 __common_utils_del_popup, popup);
437 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
438 __common_utils_del_popup, popup);
442 if (popup_data->btn2_txt) {
443 Evas_Object *btn_2 = elm_button_add(popup);
445 if (g_ug_type == UG_VIEW_OOBE)
446 elm_object_style_set(btn_2, "connect");
448 elm_object_style_set(btn_2, "popup");
450 /* This button reference used in case of hidden AP case */
451 popup_data->btn = btn_2;
452 elm_object_domain_translatable_text_set(btn_2, PACKAGE,
453 popup_data->btn2_txt);
454 elm_object_part_content_set(popup, "button2", btn_2);
455 //evas_object_smart_callback_add(btn_2, "clicked", popup_data->btn2_cb, NULL);
456 evas_object_show(popup);
457 if (popup_data->btn2_cb) {
458 evas_object_smart_callback_add(btn_2, "clicked",
459 popup_data->btn2_cb, popup_data->btn2_data);
461 evas_object_smart_callback_add(btn_2, "clicked",
462 __common_utils_del_popup, popup);
466 evas_object_show(popup);
467 elm_object_focus_set(popup, EINA_TRUE);
472 Evas_Object *common_utils_show_info_ok_popup(Evas_Object *win,
473 const char *str_pkg_name, const char *info_txt,
474 Evas_Smart_Cb ok_cb, void *cb_data)
476 popup_btn_info_t popup_data;
478 memset(&popup_data, 0, sizeof(popup_data));
479 popup_data.info_txt = (char *)info_txt;
480 popup_data.btn1_txt = sc(str_pkg_name, I18N_TYPE_Ok);
481 popup_data.btn1_cb = ok_cb;
482 popup_data.btn1_data = cb_data;
484 return common_utils_show_info_popup(win, &popup_data);
487 Evas_Object *common_utils_show_info_timeout_popup(Evas_Object *win,
488 const char* info_text, const double timeout)
490 Evas_Object *popup = elm_popup_add(win);
492 elm_object_text_set(popup, info_text);
493 elm_popup_timeout_set(popup, timeout);
494 evas_object_smart_callback_add(popup, "timeout",
495 __common_utils_del_popup, popup);
496 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
497 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
498 evas_object_show(popup);
503 int common_utils_get_rotate_angle(enum appcore_rm rotate_mode)
506 if (APPCORE_RM_UNKNOWN == rotate_mode)
507 appcore_get_rotation_state(&rotate_mode);
509 DEBUG_LOG(SP_NAME_NORMAL, "rotate_mode = %d", rotate_mode);
511 switch (rotate_mode) {
512 case APPCORE_RM_PORTRAIT_NORMAL: /**< Portrait mode */
513 DEBUG_LOG(SP_NAME_NORMAL, "rotate mode is APPCORE_RM_PORTRAIT_NORMAL");
517 case APPCORE_RM_PORTRAIT_REVERSE: /**< Portrait upside down mode */
518 DEBUG_LOG(SP_NAME_NORMAL, "rotate mode is APPCORE_RM_PORTRAIT_REVERSE");
522 case APPCORE_RM_LANDSCAPE_NORMAL: /**< Left handed landscape mode */
523 DEBUG_LOG(SP_NAME_NORMAL, "rotate mode is APPCORE_RM_LANDSCAPE_NORMAL");
527 case APPCORE_RM_LANDSCAPE_REVERSE: /**< Right handed landscape mode */
528 DEBUG_LOG(SP_NAME_NORMAL, "rotate mode is APPCORE_RM_LANDSCAPE_REVERSE");
533 ERROR_LOG(SP_NAME_ERR, "Invalid rotate mode. The default value (0) is set to 'rotate_angle'.");
541 int common_utils_send_message_to_net_popup(const char *title,
542 const char *content, const char *type, const char *ssid)
545 bundle *b = bundle_create();
547 bundle_add_str(b, "_SYSPOPUP_TITLE_", title);
548 bundle_add_str(b, "_SYSPOPUP_CONTENT_", content);
549 bundle_add_str(b, "_SYSPOPUP_TYPE_", type);
550 bundle_add_str(b, "_AP_NAME_", ssid);
552 ret = aul_launch_app("net.netpopup", b);
559 int common_utils_send_restriction_to_net_popup(const char *title,
560 const char *type, const char *restriction)
563 bundle *b = bundle_create();
565 bundle_add_str(b, "_SYSPOPUP_TITLE_", title);
566 bundle_add_str(b, "_SYSPOPUP_CONTENT_", "security restriction");
567 bundle_add_str(b, "_SYSPOPUP_TYPE_", type);
568 bundle_add_str(b, "_RESTRICTED_TYPE_", restriction);
570 ret = aul_launch_app("net.netpopup", b);
577 int common_util_set_system_registry(const char *key, int value)
579 __COMMON_FUNC_ENTER__;
581 if (vconf_set_int(key, value) < 0) {
582 ERROR_LOG(UG_NAME_NORMAL, "Failed to set vconf");
584 __COMMON_FUNC_EXIT__;
588 __COMMON_FUNC_EXIT__;
592 int common_util_get_system_registry(const char *key)
594 __COMMON_FUNC_ENTER__;
598 if (vconf_get_int(key, &value) < 0) {
599 ERROR_LOG(UG_NAME_NORMAL, "Failed to get vconf");
601 __COMMON_FUNC_EXIT__;
605 __COMMON_FUNC_EXIT__;
609 static void __common_util_managed_idle_destroy_cb(gpointer data)
614 managed_idler_list = g_slist_remove(managed_idler_list, data);
618 static gboolean __common_util_managed_idle_cb(gpointer user_data)
620 struct managed_idle_data *data = (struct managed_idle_data *)user_data;
625 return data->func(data->user_data);
628 guint common_util_managed_idle_add(GSourceFunc func, gpointer user_data)
631 struct managed_idle_data *data;
636 data = g_try_new0(struct managed_idle_data, 1);
641 data->user_data = user_data;
643 id = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, __common_util_managed_idle_cb,
644 data, __common_util_managed_idle_destroy_cb);
652 managed_idler_list = g_slist_append(managed_idler_list, data);
657 void common_util_managed_idle_cleanup(void)
659 if (managed_idler_list == NULL)
662 GSList *cur = managed_idler_list;
664 struct managed_idle_data *data;
667 GSList *next = cur->next;
668 data = (struct managed_idle_data *)cur->data;
670 src = g_main_context_find_source_by_id(g_main_context_default(), data->id);
672 g_source_destroy(src);
673 cur = managed_idler_list;
679 g_slist_free(managed_idler_list);
680 managed_idler_list = NULL;
683 void common_util_managed_ecore_scan_update_timer_add(double interval,
684 common_util_scan_update_cb callback, void *data)
686 if (callback == NULL)
689 common_util_managed_ecore_scan_update_timer_del();
691 scan_update_timer = ecore_timer_add(interval, callback, data);
694 void common_util_managed_ecore_scan_update_timer_del(void)
696 if (scan_update_timer != NULL) {
697 ecore_timer_del(scan_update_timer);
698 scan_update_timer = NULL;
702 void common_util_manager_ecore_scan_update_timer_reset(void)
704 scan_update_timer = NULL;
708 // not used at this moment 06/15/2018
709 static GDBusConnection *common_util_get_gdbus_conn(void)
711 GError *error = NULL;
713 if (gdbus_conn.connection != NULL)
714 return gdbus_conn.connection;
716 #if !GLIB_CHECK_VERSION(2, 36, 0)
720 gdbus_conn.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
721 if (gdbus_conn.connection == NULL) {
722 ERROR_LOG(UG_NAME_NORMAL,
723 "Failed to connect to the D-BUS daemon: [%s]\n", error->message);
728 return gdbus_conn.connection;
732 int common_utils_get_sim_state(void)
734 int value = VCONFKEY_TELEPHONY_SIM_UNKNOWN;
737 value = common_util_get_system_registry(VCONFKEY_TELEPHONY_SIM_SLOT);
738 INFO_LOG(UG_NAME_NORMAL, "SIM slot 1 state : %d", value);
739 if (value == VCONFKEY_TELEPHONY_SIM_INSERTED)
742 sim_count = common_util_get_system_registry(
743 VCONFKEY_TELEPHONY_SIM_SLOT_COUNT);
747 value = common_util_get_system_registry(VCONFKEY_TELEPHONY_SIM_SLOT2);
748 INFO_LOG(UG_NAME_NORMAL, "SIM slot 2 state : %d", value);
753 static inline int __get_model_from_model_config_xml(const char *field, char **value)
755 char *node_name = NULL;
756 char *node_value = NULL;
757 xmlNode *cur_node = NULL;
758 xmlNodePtr cur_ptr = NULL;
759 xmlNodePtr model_ptr = NULL;
760 xmlDocPtr xml_doc = NULL;
762 xml_doc = xmlParseFile(MODEL_CONFIG_FILE);
766 cur_ptr = xmlDocGetRootElement(xml_doc);
767 if (cur_ptr == NULL) {
772 for (cur_node = cur_ptr; cur_node; cur_node = cur_node->next) {
773 if (!xmlStrcmp(cur_ptr->name, (const xmlChar*)MODEL_CONFIG_TAG))
777 cur_ptr = cur_ptr->xmlChildrenNode;
778 for (cur_node = cur_ptr; cur_node; cur_node = cur_node->next) {
779 if (!xmlStrcmp(cur_node->name, (const xmlChar*)FEATURE_TAG)) {
780 model_ptr = cur_node;
785 if (model_ptr == NULL) {
791 cur_ptr = model_ptr->xmlChildrenNode;
793 for (cur_node = cur_ptr; cur_node; cur_node = cur_node->next) {
794 if (cur_node->type == XML_ELEMENT_NODE) {
795 node_name = (char *)xmlGetProp(cur_node, (const xmlChar*)"name");
796 if (node_name == NULL) {
801 if (!strncmp(node_name, field, strlen(node_name))) {
802 node_value = (char *)xmlNodeListGetString(xml_doc, cur_node->xmlChildrenNode, 1);
804 *value = strdup(node_value);
819 Eina_Bool _is_emulator(void)
821 char *model_name = NULL;
823 if (emulator == TIZEN_MODEL_EMULATOR)
825 else if (emulator == TIZEN_MODEL_NOT_EMULATOR)
828 if (__get_model_from_model_config_xml("tizen.org/system/model_name", &model_name) < 0)
831 if (model_name == NULL)
834 if (strncmp(model_name, "Emulator", strlen("Emulator")) == 0) {
836 emulator = TIZEN_MODEL_EMULATOR;
840 emulator = TIZEN_MODEL_NOT_EMULATOR;
845 void common_util_set_ug_type(UG_TYPE type)
850 UG_TYPE common_util_get_ug_type(void)