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.
22 #include <setting-common-general-func.h>
23 #include <setting-common-data-slp-setting.h>
26 #include <iniparser.h>
28 #include <libxml/xmlmemory.h>
29 #include <libxml/parser.h>
30 #include <system_info.h>
32 #include <system_settings.h>
34 char *setting_file_basename(char *path)
36 if (NULL == path || '\0' == path[0]) {
37 return NULL; /* invalid arguement */
39 char *p = strrchr(path, '/');
41 return (char *)g_strdup(path); /* cannot find '/' */
44 return NULL; /* end with '/' */
46 return (char *)g_strdup(p + 1);
49 char *get_pa_usb_connect_mode_str()
51 int ret = SETTING_RETURN_FAIL;
54 ret = vconf_get_int(VCONFKEY_SETAPPL_USB_MODE_INT, &value);
55 setting_retvm_if(SETTING_RETURN_FAIL == ret, NULL, "Failed to get vconf value"); /* file system exceptional handle */
59 case SETTING_USB_DEBUG_MODE:
60 return (char*)g_strdup(_("IDS_ST_BODY_USB_DEBUGGING"));
62 return (char*)g_strdup(_("IDS_COM_POP_DISCONNECTED"));
66 char *get_brightness_mode_str()
69 setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &value,
71 if (value != SETTING_BRIGHTNESS_AUTOMATIC_OFF) {
72 return setting_gettext("IDS_COM_BODY_AUTOMATIC");
74 return setting_gettext("IDS_COM_BODY_MANUAL");
78 char *get_pa_backlight_time_str()
81 char backlight_time_str[MAX_DISPLAY_NAME_LEN_ON_UI];
83 #if SUPPORT_LCD_TIMEOUT_KEEPING
84 if (0 != vconf_get_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, &value)) {
87 value = 0; /* keep agree with postin file */
90 vconf_set_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, value);
95 setting_get_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL, &value,
98 if (SETTING_RETURN_FAIL == ret || value < 0) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
101 value = 0; /* keep agree with postin file */
104 setting_set_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL,
107 #else // for MDM server
113 // if 120 < < 300, 120
114 // if 300 < < 600, 300
118 if (SETTING_RETURN_FAIL == ret || value < 15)
120 else if(value >= 15 && value < 30)
122 else if(value >= 30 && value < 60)
124 else if(value >= 60 && value < 120)
126 else if(value >= 120 && value < 300)
128 else if(value >= 300 && value < 600)
135 if (SETTING_RETURN_FAIL == ret || value < 30)
137 else if(value >= 30 && value < 60)
139 else if(value >= 60 && value < 120)
141 else if(value >= 120 && value < 300)
143 else if(value >= 300 && value < 600)
149 setting_set_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL,
155 snprintf(backlight_time_str, sizeof(backlight_time_str), "%s",
156 _("IDS_ST_BODY_ALWAYS_ON"));
157 } else if (value == 60) {
158 snprintf(backlight_time_str, sizeof(backlight_time_str), "%s",
159 _("IDS_COM_BODY_1_MINUTE"));
160 } else if (value > 60) {
161 snprintf(backlight_time_str, sizeof(backlight_time_str),
162 "%d %s", value / 60, (char *)(_("IDS_COM_BODY_MINUTES_LC")));
164 snprintf(backlight_time_str, sizeof(backlight_time_str),
165 "%d %s", value, (char *)(_("IDS_COM_BODY_SECONDS_LC")));
167 return (char *)g_strdup(backlight_time_str);
170 char *get_pa_powersaving_at_str()
173 char powersaving_at_str[MAX_DISPLAY_NAME_LEN_ON_UI + 1];
177 setting_get_int_slp_key(INT_SLP_SETTING_POWERSAVING_AT, &value,
179 if (SETTING_RETURN_FAIL == ret || value < 0) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
180 value = 30; /* keep agree with postin file */
181 setting_set_int_slp_key(INT_SLP_SETTING_POWERSAVING_AT,
185 snprintf(powersaving_at_str, MAX_DISPLAY_NAME_LEN_ON_UI, "At %d%% %s",
186 value, "battery power");
187 return (char *)g_strdup(powersaving_at_str);
190 char *get_pa_screen_timeout_str()
193 char screen_timeout_str[MAX_DISPLAY_NAME_LEN_ON_UI + 1];
197 setting_get_int_slp_key(INT_SLP_SETTING_POWERSAVING_SCREEN_TIMEOUT,
200 if (SETTING_RETURN_FAIL == ret || value < 0) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
201 value = 15; /* keep agree with postin file */
202 setting_set_int_slp_key
203 (INT_SLP_SETTING_POWERSAVING_SCREEN_TIMEOUT, value, &err);
207 snprintf(screen_timeout_str, MAX_DISPLAY_NAME_LEN_ON_UI, "%s",
209 } else if (value >= 60) {
210 snprintf(screen_timeout_str, MAX_DISPLAY_NAME_LEN_ON_UI,
212 (char *)(_("IDS_COM_BODY_MINUTES_LC")));
214 snprintf(screen_timeout_str, MAX_DISPLAY_NAME_LEN_ON_UI,
216 (char *)(_("IDS_COM_BODY_SECONDS_LC")));
218 return (char *)g_strdup(screen_timeout_str);
221 char *get_pa_display_language_str()
223 int ret = SETTING_RETURN_FAIL;
227 Eina_List* list = setting_get_language_list();
228 Eina_List* elist = NULL;
230 ret = setting_get_int_slp_key(INT_SLP_SETTING_LANG, &index, &err);
233 return g_strdup("Automatic");
235 setting_lang_entry* pnode;
238 EINA_LIST_FOREACH( list, elist, pnode)
240 if (pnode->number == index)
241 title = g_strdup(pnode->title);
246 char *get_pa_Wi_Fi_on_off_str()
249 int ret = SETTING_RETURN_FAIL;
251 setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
253 if (SETTING_RETURN_FAIL == ret) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
254 value = VCONFKEY_WIFI_OFF;
255 setting_set_int_slp_key(INT_SLP_SETTING_WIFI_STATUS,
256 VCONFKEY_WIFI_OFF, &err);
260 char *pa_wifi_device = vconf_get_str(VCONFKEY_WIFI_CONNECTED_AP_NAME);
261 SETTING_TRACE("pa_wifi_device:%s", pa_wifi_device);
262 if (NULL != pa_wifi_device && '\0' != pa_wifi_device[0]) {
263 return pa_wifi_device;
266 return (char*)g_strdup(setting_gettext("IDS_COM_BODY_ON_M_STATUS"));
268 return (char*)g_strdup(setting_gettext("IDS_COM_BODY_OFF_M_STATUS"));
272 char *get_Mobile_AP_on_off_str()
276 setting_get_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, &value,
279 /* 7 means bitwise-operation */
286 if (0 != ret || value < 0 || value > 7) {
288 setting_set_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, value,
293 return setting_gettext("IDS_COM_BODY_ON_M_STATUS");
295 return setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
299 char *get_BT_on_off_str()
301 int ret = SETTING_RETURN_FAIL;
303 ret = setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
305 if (SETTING_RETURN_FAIL == ret) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
306 value = VCONFKEY_BT_STATUS_OFF;
307 setting_set_int_slp_key(INT_SLP_SETTING_BT_STATUS,
308 VCONFKEY_BT_STATUS_OFF, &err);
311 if (VCONFKEY_BT_STATUS_OFF == value) {
312 return setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
314 return setting_gettext("IDS_COM_BODY_ON_M_STATUS");
318 char *get_NFC_on_off_str()
320 int ret = SETTING_RETURN_FAIL;
321 int value = 0, err = 0;
322 ret = setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
324 if (SETTING_RETURN_FAIL == ret) { /* file system exceptional handle, eg. The vconf file lost due to file system. */
325 SETTING_TRACE_DEBUG("fail to get nfc status from vconf");
326 value = VCONFKEY_NFC_STATE_OFF;
329 if (VCONFKEY_NFC_STATE_OFF == value) {
330 return setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
332 return setting_gettext("IDS_COM_BODY_ON_M_STATUS");
336 char *get_pa_time_format_str()
338 int ret = SETTING_RETURN_FAIL;
340 char *format_str[] = { _("IDS_COM_BODY_12_HOURS"),
341 _("IDS_ST_BODY_24_HOURS") };
343 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
345 setting_retvm_if(SETTING_RETURN_FAIL == ret, NULL, "Failed to get vconf value"); /* file system exceptional handle */
348 /* value 1:12H 2:24H */
349 if (value > 0 && value <= 2) /* 1, 2 */
350 return (char *)g_strdup(format_str[value - 1]);
352 return (char *)g_strdup(format_str[0]); /* set to 12H compelsery */
356 char *get_pa_date_format_str()
358 int ret = SETTING_RETURN_FAIL;
360 char *format_str[] = { _("IDS_ST_BODY_DDMMYYYY_DOT"),
361 _("IDS_ST_BODY_MM_DD_YYYY_DOT"),
362 _("IDS_COM_BODY_YYYYMMDD"), _("IDS_ST_BODY_YYYY_DD_MM_DOT")
365 setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
366 setting_retvm_if(SETTING_RETURN_FAIL == ret, NULL, "Failed to get vconf value"); /* file system exceptional handle */
367 return (char *)g_strdup(format_str[value]);
370 char *get_pa_week_format_str()
372 int ret = SETTING_RETURN_FAIL;
374 char *format_str[] = {
375 _("IDS_ST_BODY_SUNDAY"),
376 _("IDS_ST_BODY_MONDAY"),
380 setting_get_int_slp_key(INT_SLP_SETTING_WEEK_FORMAT, &value, &err);
381 setting_retvm_if(SETTING_RETURN_FAIL == ret, NULL, "Failed to get vconf value"); /* file system exceptional handle */
382 return (char *)g_strdup(format_str[value]);
385 char *get_pa_roaming_network_str()
387 int ret = SETTING_RETURN_FAIL;
389 char *roaming_str[] = {
390 _("IDS_ST_BODY_AUTO_DOWNLOAD"), _("IDS_COM_BODY_MANUAL"),
391 _("IDS_ST_BODY_ALWAYS_REJECT")
394 setting_get_int_slp_key(INT_SLP_SETTING_ROAMING_NETWORK, &value,
396 setting_retvm_if(SETTING_RETURN_FAIL == ret, NULL, "Failed to get vconf value"); /* file system exceptional handle */
397 return (char *)g_strdup(roaming_str[value]);
400 double get_widgets_factor()
402 return elm_scale_get();
405 char *setting_gettext(const char *s)
407 /* fisrt find in app pg */
413 char *p = dgettext(SETTING_PACKAGE, s);
415 if (!safeStrCmp(s, p)) { /* not found */
416 /* find in system pkg */
417 p = dgettext(SYSTEM_PACKAGE, s);
422 bool is_digital_str(const char *cstr)
424 if (cstr == NULL || cstr[0] == 0) {
428 int len = (int)(safeStrLen(cstr));
430 if (cstr[0] == '-' || cstr[0] == '+') {
438 if (cstr[pos] < '0' || cstr[pos] > '9') {
447 bool is_substr_ncase(const char *parentstr, const char *substr)
449 if (NULL == parentstr || '\0' == parentstr[0])
452 int word_len = safeStrLen(parentstr);
453 int search_len = safeStrLen(substr);
456 for (i = 0; i < word_len; i++) {
457 if (!strncasecmp(substr, &parentstr[i], search_len)) {
465 bool is_string_belong_to_array(const char *partern, const char **array,
469 for (; idx < array_num; idx++) {
470 if (!safeStrCmp(partern, array[idx])) {
477 //NULL, "", " ", " " etc.. are all empty strings
478 bool isEmptyStr(const char *str)
484 if (*str != '\0' && *str != ' ')
488 else if (*str == '\0')
498 int safeStrCmp(const char *s1, const char *s2)
500 /* Check NULL value first */
501 if (isEmptyStr(s1) && isEmptyStr(s2)) {
503 } else if (isEmptyStr(s1)) {
505 } else if (isEmptyStr(s2)) {
506 return SETTING_RETURN_FAIL;
509 return strcmp(s1, s2);
512 int safeStrNCmp(const char *s1, const char *s2, int len)
515 /* Check NULL value first */
516 if (isEmptyStr(s1) && isEmptyStr(s2)) {
518 } else if (isEmptyStr(s1)) {
520 } else if (isEmptyStr(s2)) {
521 return SETTING_RETURN_FAIL;
528 return strncmp(s1, s2, len);
531 char *safeStrNCat(char *dst, const char *src, int maxlen)
533 if (dst && !isEmptyStr(src) && maxlen > 0) {
534 (void) g_strlcat(dst, src, maxlen + 1);
541 char *safeCopyStr(char *dst, const char *src, int maxlen)
551 int temp = (int)safeStrLen(src);
552 len = (temp <= maxlen) ? temp : maxlen;
553 memcpy(dst, src, len);
562 int safeStrLen(const char *str)
564 if (isEmptyStr(str)) {
565 SETTING_TRACE_DEBUG("string is empty");
573 * get the int value of substring before delim
575 bool get_substring_int(const char **ipStr, int *ipValue, char delim)
577 int iValue = *ipValue = 0;
578 const char *str = *ipStr;
580 if (str == NULL || str[0] == 0) { /* empty string */
584 bool bNegative = FALSE;
585 if ('-' == str[0]) { /* allow Negative number.. */
589 if (str[0] < '0' || str[0] > '9') { /* first elementy is not digital */
593 if (str[0] == '0') { /* first elementy is 0 */
594 if (str[1] == delim) {
609 /****first elementy is not 0*/
610 iValue = iValue * 10 + str[0] - '0';
612 if (((unsigned int)iValue & 0x80000000) != 0) { /* think about overloading */
616 if (str[0] == delim) {
633 if (str[0] < '0' || str[0] > '9') {
642 #define MaxIPAddressLength 15
645 * CHeck Whether a special string Is An IP String
647 * @param ipstr string representing IP numbers like "aaa.bbb.ccc.ddd"
649 * @return true if it's IP format string otherwise false
651 bool is_ip_string(const char *ipstr)
653 if (NULL == ipstr || 0 == ipstr[0])
655 int len = (int)safeStrLen(ipstr);
656 if (len > MaxIPAddressLength) {
660 if (ipstr[len - 1] == '.') {
667 if (!get_substring_int(&ipstr, &ip, '.') || ip > 255) {
668 SETTING_TRACE("ipstr:%s", ipstr);
671 SETTING_TRACE("ipstr:%s", ipstr);
680 int setting_invoke_reset_function(char *lib_name, service_h service, void *ext)
682 SETTING_TRACE("Enter %s with lib_name:%s", __FUNCTION__, lib_name);
683 int (*reset) (service_h pair, void *ptr);
684 int ret = OPERATE_LIB_SUCESS;
686 void *handle = dlopen(lib_name, RTLD_LAZY);
688 SETTING_TRACE_ERROR(" >>>>>>>>>>> %s", dlerror());
689 return LOAD_LIB_FAILED;
693 reset = dlsym(handle, "setting_plugin_reset");
694 if ((error = dlerror()) != NULL) {
695 SETTING_TRACE_ERROR(" >>>>>>>>>>> %s", error);
697 return UNDEFINED_LIB_SYMBOL;
701 ret = (*reset) (service, ext); /* CALL */
703 if (ret < 0) ret += UNDEFINED_LIB_SYMBOL;//from -2 on
709 int excuteCmd(char* exec_path, int option_num, ...)
711 char cmd[MAX_COMMON_BUFFER_LEN + 1] = {0, };
712 snprintf(cmd, MAX_COMMON_BUFFER_LEN,
717 va_start(args, option_num);
721 for (; argno < option_num; argno++) {
722 para = va_arg( args, char *);
723 SETTING_TRACE("Parameter #%d is: %s", argno, para);
726 g_strlcat(cmd, " ", MAX_COMMON_BUFFER_LEN + 1);
727 g_strlcat(cmd, para, MAX_COMMON_BUFFER_LEN + 1);
733 SETTING_TRACE("excute:%s", cmd);
738 void create_fontlink(const char *linkpath, const char *linkname,
739 const char *fontfilepath, const char *fontfilename)
741 char newpath[MAX_COMMON_BUFFER_LEN + 1];
742 char lcpath[MAX_COMMON_BUFFER_LEN + 1];
745 snprintf(newpath, MAX_COMMON_BUFFER_LEN, "%s/%s", linkpath, linkname);
747 snprintf(lcpath, MAX_COMMON_BUFFER_LEN, "%s/%s", fontfilepath, fontfilename);
749 SETTING_TRACE("newpath:%s", newpath);
750 SETTING_TRACE("lcpath:%s", lcpath);
753 ret = symlink(lcpath, newpath);
754 setting_retm_if(ret != 0, "fail to call symlink");
757 char* get_icon_path(const char *package)
759 ail_appinfo_h handle;
762 char *icon_path = IMG_DefaultIcon;//The default icon must exist.(it will be installed by Setting App)
767 if (ail_package_get_appinfo(package, &handle) != AIL_ERROR_OK) {
768 SETTING_TRACE_ERROR("Failed to ail_package_get_appinfo.");
773 if (result && ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &icon_path) != AIL_ERROR_OK) {
774 SETTING_TRACE_ERROR("Failed to ail_appinfo_get_str.");
778 if (result && access(icon_path, R_OK|F_OK ) !=0 ) {//The file cannot be accessed.
779 SETTING_TRACE_ERROR("The file[%s] cannot be accessed. To use defaut icon.", icon_path);
780 icon_path = IMG_DefaultIcon;
783 ret_str = strdup(icon_path);
784 if (destroy && ail_package_destroy_appinfo(handle) != AIL_ERROR_OK) {
785 SETTING_TRACE_ERROR("Failed to ail_package_destroy_appinfo.");
794 dictionary* dic = iniparser_load("/etc/info.ini");
795 char* str = (char *)iniparser_getstr(dic, "Version:Build");
801 if (!strncmp(str, "SLP", 3)) return 1;
806 iniparser_freedict(dic);
815 char szEmul[__LEN_STR_EMUL+1];
816 const char* szBinVer = NULL;
818 dictionary* dic = iniparser_load(BIN_INFO_FILE_PATH);
819 // when failed to get the info, let's regard the binary as an emulator one
823 szBinVer = (const char*)iniparser_getstr(dic, "Version:Build");
825 char* str = g_strdup(szBinVer);
832 sscanf(str, "%*s %4s", szEmul);
838 iniparser_freedict(dic);
842 if (!strncmp(szEmul, __STR_EMUL, __LEN_STR_EMUL)) {
848 char *model_str = NULL;
849 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &model_str);
850 //SETTING_TRACE("model_str : %s", model_str);
851 if (ret != SYSTEM_INFO_ERROR_NONE) {
852 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
857 if (0 == safeStrCmp(KeyStr_Emulator, model_str)) {
867 int get_popup_btn_response_type(const char *btn_str)
869 SETTING_TRACE("btn_str:%s", btn_str);
870 POPUP_BTN_RESPONSE_TYPE rsp_type = POPUP_RESPONSE_INVALID;
871 retv_if(!btn_str, rsp_type);
872 if (0 == safeStrCmp(btn_str, _("IDS_COM_BODY_CLOSE"))
873 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_TRY"))//KeyStr_Try
874 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_OK"))
875 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_YES"))
876 || 0 == safeStrCmp(btn_str, _("IDS_ST_BODY_USE_MOTION"))
877 || 0 == safeStrCmp(btn_str, _("IDS_COM_POP_TRY_AGAIN"))
878 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_DELETE"))
879 || 0 == safeStrCmp(btn_str, _(KeyStr_Save)))
881 rsp_type = POPUP_RESPONSE_OK;
885 rsp_type = POPUP_RESPONSE_CANCEL;
890 #define SUPPORT_STATIC_LOAD 1
891 #if SUPPORT_STATIC_LOAD
892 static char *system_service_list[MAX_SYSTEM_SERVICE_NUM] = {NULL, };
894 void clear_system_service_data()
896 #if SUPPORT_STATIC_LOAD
898 for (idx = 0; idx < MAX_SYSTEM_SERVICE_NUM && system_service_list[idx]; idx++)
900 FREE(system_service_list[idx]);
905 bool is_system_service(const char *pkg_name)
907 //SLP native apps list,
908 if (0 == safeStrCmp(pkg_name, "com.samsung.menu-screen")
909 || 0 == safeStrCmp(pkg_name, "com.samsung.live-data-provider")
910 || 0 == safeStrCmp(pkg_name, "com.samsung.live-magazine")
911 || 0 == safeStrCmp(pkg_name, "com.samsung.pwlock")
912 || 0 == safeStrCmp(pkg_name, "com.samsung.quickpanel")
913 || 0 == safeStrCmp(pkg_name, "com.samsung.vtmain")
914 || 0 == safeStrCmp(pkg_name, "com.samsung.call")
915 || 0 == safeStrCmp(pkg_name, "usb_setting")
916 || 0 == safeStrCmp(pkg_name, "com.samsung.indicator")
917 || 0 == safeStrCmp(pkg_name, "com.samsung.cluster-home")
923 //OSP service app list,
925 #if SUPPORT_STATIC_LOAD
927 if (!system_service_list[0]) //just load the file
929 FILE *fp = fopen(SYSTEM_SERVICE_LIST_PATH, "r");
931 char result[MAX_PKG_NAME_LEN+1] = {0, };
932 while (fgets(result, MAX_PKG_NAME_LEN, fp))
934 result[strlen(result) - 1] = '\0';//offset 1
935 system_service_list[idx++] = strdup(result);
942 for (idx = 0; idx < MAX_SYSTEM_SERVICE_NUM && system_service_list[idx]; idx++)
944 if (0 == safeStrCmp(pkg_name, system_service_list[idx])) {
950 FILE *fp = fopen(SYSTEM_SERVICE_LIST_PATH, "r");
952 char result[MAX_PKG_NAME_LEN+1] = {0, };
953 while (fgets(result, MAX_PKG_NAME_LEN, fp))
955 result[strlen(result) - 1] = '\0';//offset 1
956 if (0 == safeStrCmp(pkg_name, result)) {
964 SETTING_TRACE("ret:%d", ret);
969 * should use g_free to free returned string
971 char *get_default_font(int language)
973 char *font_name = NULL;
977 case SETTING_LANG_KOREA:
978 font_name = g_strdup("SLPSansKorean");
980 case SETTING_LANG_CHINA:
981 /* output_font : SLPSansFallback*/
982 case SETTING_LANG_CANTONESE:
983 /* output_font : SLPSansFallback*/
984 case SETTING_LANG_TAIWAN:
985 font_name = g_strdup("SLPSansFallback");
987 case SETTING_LANG_JAPAN:
988 font_name = g_strdup("UDGothic");
990 case SETTING_LANG_AUTOMATIC:
991 /* output_font : HelveticaNeue*/
992 case SETTING_LANG_ENGLISH:
993 /* output_font : HelveticaNeue*/
994 case SETTING_LANG_GERMAN:
995 /* output_font : HelveticaNeue*/
996 case SETTING_LANG_DUTCH:
997 /* output_font : HelveticaNeue*/
998 case SETTING_LANG_SPAINISH:
999 /* output_font : HelveticaNeue*/
1000 case SETTING_LANG_PORTUGUESE:
1001 /* output_font : HelveticaNeue*/
1002 case SETTING_LANG_GREEK:
1003 /* output_font : HelveticaNeue*/
1004 case SETTING_LANG_ITALIAN:
1005 /* output_font : HelveticaNeue*/
1006 case SETTING_LANG_FRENCH:
1007 /* output_font : HelveticaNeue*/
1008 case SETTING_LANG_TURKISH:
1009 /* output_font : HelveticaNeue*/
1010 case SETTING_LANG_RUSSIAN:
1011 font_name = g_strdup("HelveticaNeue");
1014 font_name = g_strdup("HelveticaNeue");
1020 void *font_conf_doc_parse(char *doc_name, char *font_name)
1022 SETTING_TRACE_BEGIN;
1023 setting_retvm_if(doc_name == NULL, NULL, "Param data is NULL");
1024 setting_retvm_if(font_name == NULL, NULL, "Param data is NULL");
1025 xmlDocPtr doc = NULL;
1026 xmlNodePtr cur = NULL;
1027 xmlNodePtr cur2 = NULL;
1028 xmlNodePtr cur3 = NULL;
1029 xmlChar *key = NULL;
1031 doc = xmlParseFile(doc_name);
1032 setting_retvm_if(doc == NULL, NULL, "Document not parsed successfully.");
1034 cur = xmlDocGetRootElement(doc);
1037 SETTING_TRACE_DEBUG("empty document");
1043 if(xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) {
1044 SETTING_TRACE_DEBUG("document of the wrong type, root node != fontconfig");
1050 cur = cur->xmlChildrenNode;
1054 if((!xmlStrcmp(cur->name, (const xmlChar *)"match")))
1056 cur2 = cur->xmlChildrenNode;
1059 if((!xmlStrcmp(cur2->name, (const xmlChar *)"edit")))
1061 cur3 = cur2->xmlChildrenNode;
1064 if((!xmlStrcmp(cur3->name, (const xmlChar *)"string")))
1066 xmlNodeSetContent(cur3->xmlChildrenNode, (const xmlChar *)font_name);
1067 key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
1068 SETTING_TRACE_DEBUG("after changed, string is: %s\n", key);
1088 * should use g_free to free return string
1090 char *cur_font_get()
1092 SETTING_TRACE_BEGIN;
1093 xmlDocPtr doc = NULL;
1094 xmlNodePtr cur = NULL;
1095 xmlNodePtr cur2 = NULL;
1096 xmlNodePtr cur3 = NULL;
1097 xmlChar *key = NULL;
1099 char *font_name = NULL;
1101 doc = xmlParseFile(SETTING_FONT_CONF_FILE);
1102 setting_retvm_if(doc == NULL, NULL, "Document not parsed successfully.");
1104 cur = xmlDocGetRootElement(doc);
1107 SETTING_TRACE_DEBUG("empty document");
1113 if(xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) {
1114 SETTING_TRACE_DEBUG("document of the wrong type, root node != fontconfig");
1120 cur = cur->xmlChildrenNode;
1124 if((!xmlStrcmp(cur->name, (const xmlChar *)"match")))
1126 cur2 = cur->xmlChildrenNode;
1129 if((!xmlStrcmp(cur2->name, (const xmlChar *)"edit")))
1131 cur3 = cur2->xmlChildrenNode;
1134 if((!xmlStrcmp(cur3->name, (const xmlChar *)"string")))
1136 key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
1137 SETTING_TRACE_DEBUG("string is: %s", key);
1139 font_name = g_strdup((char *)key);
1160 static int __font_size_get()
1165 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
1166 retvm_if(ret != 0, -1, "get vconf failed");
1169 case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
1170 font_size = SMALL_FONT_DPI;
1172 case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
1173 font_size = MIDDLE_FONT_DPI;
1175 case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
1176 font_size = LARGE_FONT_DPI;
1178 case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
1179 font_size = HUGE_FONT_DPI;
1181 case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
1182 font_size = GIANT_FONT_DPI;
1185 font_size = MIDDLE_FONT_DPI;
1191 void font_config_set(char *font_name)
1193 Eina_List *text_classes = NULL;
1194 Elm_Text_Class *etc = NULL;
1195 const Eina_List *l = NULL;
1196 Eina_List *fo_list = NULL;
1197 Elm_Font_Overlay *efo = NULL;
1198 int font_size = __font_size_get();
1201 text_classes = elm_config_text_classes_list_get();
1203 fo_list = (Eina_List *)elm_config_font_overlay_list_get();
1205 Eina_List *ll = NULL;
1206 Eina_List *l_next = NULL;
1208 Eina_Bool slp_medium_exist = EINA_FALSE;
1209 Eina_Bool slp_roman_exist = EINA_FALSE;
1210 Eina_Bool slp_bold_exist = EINA_FALSE;
1211 Eina_Bool slp_regular_exist = EINA_FALSE;
1213 EINA_LIST_FOREACH_SAFE(fo_list, ll, l_next, efo)
1215 if (!safeStrCmp(efo->text_class, "slp_medium")) {
1216 elm_config_font_overlay_set(efo->text_class, (const char*)font_name, efo->size);
1217 slp_medium_exist = EINA_TRUE;
1218 } else if (!safeStrCmp(efo->text_class, "slp_roman")) {
1219 elm_config_font_overlay_set(efo->text_class, (const char*)font_name, efo->size);
1220 slp_roman_exist = EINA_TRUE;
1221 } else if (!safeStrCmp(efo->text_class, "slp_bold")) {
1222 elm_config_font_overlay_set(efo->text_class, (const char*)font_name, efo->size);
1223 slp_bold_exist = EINA_TRUE;
1224 } else if (!safeStrCmp(efo->text_class, "slp_regular")) {
1225 elm_config_font_overlay_set(efo->text_class, (const char*)font_name, efo->size);
1226 slp_regular_exist = EINA_TRUE;
1230 /* if slp_XX do not exist, need to set them, font size is -100(100%) */
1231 if (slp_medium_exist == EINA_FALSE) {
1232 elm_config_font_overlay_set("slp_medium", (const char*)font_name, MIDDLE_FONT_DPI);
1234 if (slp_roman_exist == EINA_FALSE) {
1235 elm_config_font_overlay_set("slp_roman", (const char*)font_name, MIDDLE_FONT_DPI);
1237 if (slp_bold_exist == EINA_FALSE) {
1238 elm_config_font_overlay_set("slp_bold", (const char*)font_name, MIDDLE_FONT_DPI);
1240 if (slp_regular_exist == EINA_FALSE) {
1241 elm_config_font_overlay_set("slp_regular", (const char*)font_name, MIDDLE_FONT_DPI);
1244 EINA_LIST_FOREACH(text_classes, l, etc)
1249 EINA_LIST_FOREACH(fo_list, ll, efo)
1251 if (!safeStrCmp(etc->name, efo->text_class)) {
1255 elm_config_font_overlay_set(etc->name, (const char*)font_name, size);
1258 elm_config_font_overlay_apply();
1259 elm_config_all_flush();
1260 elm_config_engine_set("software_x11");
1262 elm_config_text_classes_list_free(text_classes);
1263 text_classes = NULL;
1266 vconf_set_str(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, font_name);
1269 void font_size_set()
1271 Eina_List *text_classes = NULL;
1272 Elm_Text_Class *etc = NULL;
1273 const Eina_List *l = NULL;
1274 int font_size = __font_size_get();
1275 char *font_name = cur_font_get();
1277 if (font_size == -1) {
1278 SETTING_TRACE_DEBUG("failed to call font_size_get");
1282 text_classes = elm_config_text_classes_list_get();
1284 EINA_LIST_FOREACH(text_classes, l, etc)
1286 elm_config_font_overlay_set(etc->name, font_name, font_size);
1289 elm_config_all_flush();
1290 elm_config_engine_set("software_x11");
1292 elm_config_text_classes_list_free(text_classes);
1293 text_classes = NULL;