From d20f06d4a5dde3c3834ffa088c5102997963d429 Mon Sep 17 00:00:00 2001 From: JinWang An Date: Fri, 22 Apr 2016 22:12:59 +0900 Subject: [PATCH] Divided EFL packages from capi system system setting Change-Id: Ibdfcbefafb38a084af49e9de821a32da87db9eeb Signed-off-by: JinWang An --- CMakeLists.txt | 15 +- packaging/capi-system-system-settings.spec | 2 + src/system_setting_platform.c | 641 +++++---------------- system-settings-util/CMakeLists.txt | 43 ++ .../include/system_settings_util.h | 4 + system-settings-util/src/system_settings_util.c | 519 +++++++++++++++++ 6 files changed, 733 insertions(+), 491 deletions(-) create mode 100755 system-settings-util/CMakeLists.txt create mode 100644 system-settings-util/include/system_settings_util.h create mode 100644 system-settings-util/src/system_settings_util.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dfb259..56626ff 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,14 +7,20 @@ PROJECT(${fw_name}) SET(CMAKE_INSTALL_PREFIX /usr) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(SYSTEM_SETTINGS_UTIL system-settings-util) +SET(LIB_SYSTEM_SETTINGS_UTIL system-settings-util) + SET(LIBDIR "${CMAKE_LIBDIR}") SET(INC_DIR include) INCLUDE_DIRECTORIES(${INC_DIR}) -SET(requires "elementary ecore dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info") - +SET(requires "dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info") SET(pc_requires "capi-base-common") + + + + IF(TIZEN_WEARABLE) ADD_DEFINITIONS(-DTIZEN_WEARABLE) ENDIF(TIZEN_WEARABLE) @@ -46,7 +52,10 @@ ADD_DEFINITIONS("-D_TZ_SYS_SHARE=\"${TZ_SYS_SHARE}\"") SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib") -aux_source_directory(src SOURCES) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/${SYSTEM_SETTINGS_UTIL}/include) +ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${SYSTEM_SETTINGS_UTIL}) + +AUX_SOURCE_DIRECTORY(src SOURCES) ADD_LIBRARY(${fw_name} SHARED ${SOURCES}) TARGET_LINK_LIBRARIES(${fw_name} ${${fw_name}_LDFLAGS}) diff --git a/packaging/capi-system-system-settings.spec b/packaging/capi-system-system-settings.spec index 4b849d7..c7f5fd8 100755 --- a/packaging/capi-system-system-settings.spec +++ b/packaging/capi-system-system-settings.spec @@ -64,6 +64,7 @@ export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE" MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER} -DCMAKE_LIBDIR=%{_libdir} \ + -DCMAKE_INCLUDEDIR=%{_includedir} \ -DTZ_SYS_DATA=%{TZ_SYS_DATA} \ -DTZ_SYS_ETC=%{TZ_SYS_ETC} \ -DTZ_SYS_RO_SHARE=%{TZ_SYS_RO_SHARE} \ @@ -89,5 +90,6 @@ rm -rf %{buildroot} %files devel %manifest %{name}.manifest %{_includedir}/system/*.h +%{_includedir}/system_settings_util.h %{_libdir}/pkgconfig/*.pc %{_libdir}/lib*.so diff --git a/src/system_setting_platform.c b/src/system_setting_platform.c index 42dd8a7..e3a1a15 100644 --- a/src/system_setting_platform.c +++ b/src/system_setting_platform.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -36,12 +37,6 @@ #include -/*#include */ - -#include -#include -#include - #include #include @@ -53,44 +48,23 @@ #include #endif -#ifdef TIZEN_WEARABLE -#define SMALL_FONT_DPI (-90) -#endif -#ifdef TIZEN_MOBILE -#define SMALL_FONT_DPI (-80) -#endif -#define MIDDLE_FONT_DPI (-100) -#ifdef TIZEN_WEARABLE -#define LARGE_FONT_DPI (-110) -#endif -#ifdef TIZEN_MOBILE -#define LARGE_FONT_DPI (-150) -#endif -#define HUGE_FONT_DPI (-190) -#define GIANT_FONT_DPI (-250) - -#define SETTING_FONT_PRELOAD_FONT_PATH _TZ_SYS_RO_SHARE"/fonts" -#define SETTING_FONT_DOWNLOADED_FONT_PATH _TZ_SYS_RO_SHARE"/fonts" - #define SETTING_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf" #define SETTING_DEFAULT_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf" -#define SETTING_STR_LEN 256 - -#define SETTING_TIME_ZONEINFO_PATH "/usr/share/zoneinfo/" -#define SETTING_TIME_SHARE_LOCAL_PATH "/usr/share/locale" +#define SETTING_TIME_ZONEINFO_PATH "/usr/share/zoneinfo/" +#define SETTING_TIME_SHARE_LOCAL_PATH "/usr/share/locale" #define SETTING_TZONE_SYMLINK_PATH "/etc/localtime" -static char *_get_cur_font(); -static void __font_size_set(); -static int __font_size_get(); -static char *_get_default_font(); - -static bool font_config_set(char *font_name); -static void font_config_set_notification(); int _is_file_accessible(const char *path); -int __is_available_font(char *font_name); + +bool dl_is_supported_image_type_load(char *path); +bool dl_font_config_set(char *font_name); +char *dl_get_font_info(char *str); +int *dl_is_available_font(char *str); +void dl_font_size_set(); +void dl_font_config_set_notification(); + /** * VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR has a path of the ringtone file which user choose @@ -184,7 +158,7 @@ int system_setting_get_font_size(system_settings_key_e key, system_setting_data_ int system_setting_get_default_font_type(system_settings_key_e key, system_setting_data_type_e data_type, void **value) { SETTING_TRACE_BEGIN; - char *font_name = _get_default_font(); + char *font_name = dl_get_font_info("default"); if (font_name) { *value = (void *)font_name; return SYSTEM_SETTINGS_ERROR_NONE; @@ -197,7 +171,7 @@ int system_setting_get_default_font_type(system_settings_key_e key, system_setti int system_setting_get_font_type(system_settings_key_e key, system_setting_data_type_e data_type, void **value) { SETTING_TRACE_BEGIN; - char *font_name = _get_cur_font(); + char *font_name = dl_get_font_info("cur"); *value = (void *)font_name; return SYSTEM_SETTINGS_ERROR_NONE; @@ -326,48 +300,149 @@ int system_setting_set_email_alert_ringtone(system_settings_key_e key, system_se return SYSTEM_SETTINGS_ERROR_NONE; } +bool dl_is_supported_image_type_load(char *path) +{ + void *handle; + int error; + bool ret = false; + bool (*image_type_check)(char *path); + + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return false; + } + + image_type_check = dlsym(handle, "__is_supported_image_type_load"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find __is_supported_image_type_load function at libsystem-settings-util.so.0.1.0"); + return false; + } + ret = image_type_check(path); + dlclose(handle); + return ret; +} -bool __is_supported_image_type_load(char *path) +int *dl_is_available_font(char *str) { - SETTING_TRACE_BEGIN; - /*evas_init(); */ - ecore_evas_init(); - Ecore_Evas *ee; - Evas *evas; + void *handle; + int error; + int ret = false; + int (*check_available_font)(char *font_name); + + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return false; + } - ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL); - evas = ecore_evas_get(ee); + check_available_font = dlsym(handle, "_is_available_font"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find font_config_set function at libsystem-settings-util.so.0.1.0"); + return false; + } + ret = check_available_font(str); + dlclose(handle); + return ret; +} - Evas_Object *img = evas_object_image_add(evas); - evas_object_image_file_set(img, path, NULL); - Evas_Load_Error ret = evas_object_image_load_error_get(img); +void dl_font_size_set() +{ + void *handle; + int error; + void (*set_font_size)(); - bool result = false; - if (ret == EVAS_LOAD_ERROR_NONE) { - SETTING_TRACE("%s - OK", path); - result = true; - } else { - SETTING_TRACE("%s - NO", path); - result = false; + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return; + } + + set_font_size = dlsym(handle, "__font_size_set"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find font_config_set function at libsystem-settings-util.so.0.1.0"); + return; } - ecore_evas_free(ee); - evas_shutdown(); - return result; + set_font_size(); + dlclose(handle); + return; } -bool __is_supported_image_type(char *path) +void dl_font_config_set_notification() { - SETTING_TRACE_BEGIN; + void *handle; + int error; + void (*set_font_nodification)(); + + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return; + } + + set_font_nodification = dlsym(handle, "font_config_set_notification"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find font_config_set function at libsystem-settings-util.so.0.1.0"); + return; + } + set_font_nodification(); + dlclose(handle); + return; +} + +bool dl_font_config_set(char *font_name) +{ + void *handle; + int error; bool ret = false; + bool (*check_font_type)(char *font_name); - evas_init(); - if (evas_object_image_extension_can_load_get(path)) - ret = true; - else - ret = false; + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return false; + } - evas_shutdown(); + check_font_type = dlsym(handle, "font_config_set"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find font_config_set function at libsystem-settings-util.so.0.1.0"); + return false; + } + ret = check_font_type(font_name); + dlclose(handle); + return ret; +} + +char *dl_get_font_info(char *str) +{ + void *handle; + int error; + char* ret = NULL; + char *(*get_font_info)(); + + handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + if(!handle) + { + SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); + return false; + } + + if(strcmp(str,"cur") == 0) + get_font_info = dlsym(handle, "_get_cur_font"); + else + get_font_info = dlsym(handle, "_get_default_font"); + if((error = dlerror()) != NULL) { + SETTING_TRACE("ERROR!! canNOT find %s function at libsystem-settings-util.so.0.1.0", str); + return false; + } + ret = get_font_info(); + dlclose(handle); return ret; } @@ -521,7 +596,7 @@ int system_setting_set_wallpaper_home_screen(system_settings_key_e key, system_s char *vconf_value; vconf_value = (char *)value; - bool isok = __is_supported_image_type_load(vconf_value); + bool isok = dl_is_supported_image_type_load(vconf_value); if (!isok) { /* not supported */ SETTING_TRACE("path : %s is not supported file format", vconf_value); @@ -620,7 +695,7 @@ int system_setting_set_wallpaper_lock_screen(system_settings_key_e key, system_s char *vconf_value; vconf_value = (char *)value; - bool isok = __is_supported_image_type_load(vconf_value); + bool isok = dl_is_supported_image_type_load(vconf_value); if (!isok) { /* not supported */ SETTING_TRACE("path : %s is not supported file format", vconf_value); @@ -653,7 +728,7 @@ int system_setting_set_font_size(system_settings_key_e key, system_setting_data_ if (system_setting_vconf_set_value_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, *vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - __font_size_set(); + dl_font_size_set(); SETTING_TRACE_END; return SYSTEM_SETTINGS_ERROR_NONE; } @@ -687,7 +762,7 @@ void *font_conf_doc_parse(char *doc_name, char *font_name) cur = cur->xmlChildrenNode; - Eina_Bool is_changed = EINA_FALSE; + bool is_changed = false; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) { cur2 = cur->xmlChildrenNode; @@ -710,7 +785,7 @@ void *font_conf_doc_parse(char *doc_name, char *font_name) key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); xmlFree(key); key = NULL; - is_changed = EINA_TRUE; + is_changed = true; } cur3 = cur3->next; } @@ -725,7 +800,7 @@ void *font_conf_doc_parse(char *doc_name, char *font_name) key = xmlNodeListGetString(doc, cur2->xmlChildrenNode, 1); xmlFree(key); key = NULL; - is_changed = EINA_TRUE; + is_changed = true; } else if ((!xmlStrcmp(cur2->name, (const xmlChar *)"prefer"))) { cur3 = cur2->xmlChildrenNode; while (cur3 != NULL) { @@ -734,7 +809,7 @@ void *font_conf_doc_parse(char *doc_name, char *font_name) key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); xmlFree(key); key = NULL; - is_changed = EINA_TRUE; + is_changed = true; cur3 = cur3->next; return doc; } @@ -763,7 +838,7 @@ int system_setting_set_font_type(system_settings_key_e key, system_setting_data_ font_name = (char *)value; /* get current font list */ - int is_found = __is_available_font(font_name); + int is_found = dl_is_available_font(font_name); if (is_found) { SETTING_TRACE("found font : %s ", font_name); @@ -772,7 +847,7 @@ int system_setting_set_font_type(system_settings_key_e key, system_setting_data_ return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - bool bsave = font_config_set(font_name); + bool bsave = dl_font_config_set(font_name); if (!bsave) { SETTING_TRACE(" font type save error by font_config_set() "); @@ -788,7 +863,7 @@ int system_setting_set_font_type(system_settings_key_e key, system_setting_data_ doc = NULL; } - font_config_set_notification(); + dl_font_config_set_notification(); char *vconf_value; vconf_value = (char *)value; @@ -1026,416 +1101,6 @@ int system_setting_unset_changed_callback_motion_activation(system_settings_key_ return system_setting_vconf_unset_changed_cb(VCONFKEY_SETAPPL_MOTION_ACTIVATION, 3); } -static char *_get_cur_font() -{ - SETTING_TRACE_BEGIN; - xmlDocPtr doc = NULL; - xmlNodePtr cur = NULL; - xmlNodePtr cur2 = NULL; - xmlNodePtr cur3 = NULL; - xmlChar *key = NULL; - - char *font_name = NULL; - - doc = xmlParseFile(SETTING_FONT_CONF_FILE); - - cur = xmlDocGetRootElement(doc); - - if (cur == NULL) { - xmlFreeDoc(doc); - doc = NULL; - return NULL; - } - - if (xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) { - xmlFreeDoc(doc); - doc = NULL; - return NULL; - } - - cur = cur->xmlChildrenNode; - - while (cur != NULL) { - if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) { - cur2 = cur->xmlChildrenNode; - while (cur2 != NULL) { - if ((!xmlStrcmp(cur2->name, (const xmlChar *)"edit"))) { - cur3 = cur2->xmlChildrenNode; - while (cur3 != NULL) { - if ((!xmlStrcmp(cur3->name, (const xmlChar *)"string"))) { - key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); - - font_name = g_strdup((char *)key); - xmlFree(key); - key = NULL; - xmlFreeDoc(doc); - doc = NULL; - return font_name; - } - cur3 = cur3->next; - } - } - cur2 = cur2->next; - } - } - cur = cur->next; - } - - xmlFreeDoc(doc); - doc = NULL; - return NULL; -} - -static void font_config_set_notification() -{ - SETTING_TRACE_BEGIN; -#if 0 - /* notification */ - Ecore_X_Window ecore_win = ecore_x_window_root_first_get(); - Ecore_X_Atom atom = ecore_x_atom_get("FONT_TYPE_change"); - ecore_x_window_prop_string_set(ecore_win, atom, "tizen"); -#endif -} - -int __is_available_font(char *font_name) -{ - SETTING_TRACE_BEGIN; - FcObjectSet *os = NULL; - FcFontSet *fs = NULL; - FcPattern *pat = NULL; - FcConfig *font_config = NULL; - - int ret = 0; - - if (font_name == NULL) - return -1; - - font_config = FcInitLoadConfigAndFonts(); - - /*setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts"); */ - - char *locale = setlocale(0, NULL); - - pat = FcPatternCreate(); - - os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0); - - if (os) { - fs = FcFontList(font_config, pat, os); - FcObjectSetDestroy(os); - os = NULL; - } - - if (pat) { - FcPatternDestroy(pat); - pat = NULL; - } - - if (fs) { - int j; - SETTING_TRACE("fs->nfont = %d", fs->nfont); - - for (j = 0; j < fs->nfont; j++) { - FcChar8 *family = NULL; - FcChar8 *file = NULL; - - if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) { - int preload_path_len = strlen(SETTING_FONT_PRELOAD_FONT_PATH); - int download_path_len = strlen(SETTING_FONT_DOWNLOADED_FONT_PATH); - - if (file && (!strncmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) - || !strncmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len))) { - char *family_result = NULL; - FcChar8 *lang = NULL; - int id = 0; - if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) { - break; - } - if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) { - break; - } - family_result = (char *)family; - - /* Find proper family name for current locale. */ - while (locale && family && lang) { - if (!strncmp(locale, (char *)lang, strlen((char *)lang))) { - family_result = (char *)family; - break; - } - - /* I will set english as default family language. */ - /* If there is no proper family language for current locale, */ - /* we have to show the english family name. */ - if (!strcmp((char *)lang, "en")) { - family_result = (char *)family; - } - id++; - if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) { - break; - } - if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) { - break; - } - } - - if (family_result) { - SETTING_TRACE("-------- FONT - family_result = %s", (char *)family_result); - if (strcmp(family_result, font_name) == 0) { - ret = 1; - break; - } - } - } - } - } - FcFontSetDestroy(fs); - fs = NULL; - } - FcConfigDestroy(font_config); - font_config = NULL; - return ret; -} - - -static char *_get_default_font() -{ - SETTING_TRACE_BEGIN; - xmlDocPtr doc = NULL; - xmlNodePtr cur = NULL; - xmlNodePtr cur2 = NULL; - xmlNodePtr cur3 = NULL; - xmlChar *key = NULL; - struct _xmlAttr *properties = NULL; - char *default_font_name = NULL; - - doc = xmlParseFile(SETTING_DEFAULT_FONT_CONF_FILE); - - cur = xmlDocGetRootElement(doc); - - if (cur == NULL) { - xmlFreeDoc(doc); - doc = NULL; - return NULL; - } - - if (xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) { - xmlFreeDoc(doc); - doc = NULL; - return NULL; - } - - cur = cur->xmlChildrenNode; - - while (cur != NULL) { - if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) { - cur2 = cur->xmlChildrenNode; - while (cur2 != NULL) { - if ((!xmlStrcmp(cur2->name, (const xmlChar *)"edit"))) { - properties = cur2->properties; - /*find the "name" property*/ - while (NULL != properties) { - if (!xmlStrcmp(properties->name, (const xmlChar *)"name")) { - break; - } - properties = properties->next; - } - - /*If the value of "name" property is "family", then get the child node string, - it shall be the default font type*/ - if (NULL != properties && !xmlStrcmp(properties->children->content, (const xmlChar *)"family")) { - cur3 = cur2->xmlChildrenNode; - while (cur3 != NULL) { - if ((!xmlStrcmp(cur3->name, (const xmlChar *)"string"))) { - key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); - default_font_name = g_strdup((char *)key); - xmlFree(key); - key = NULL; - xmlFreeDoc(doc); - doc = NULL; - return default_font_name; - } - cur3 = cur3->next; - } - } - } - cur2 = cur2->next; - } - } - cur = cur->next; - } - - xmlFreeDoc(doc); - doc = NULL; - return NULL; -} - -static bool font_config_set(char *font_name) -{ - SETTING_TRACE_BEGIN; - Eina_List *text_classes = NULL; - Elm_Text_Class *etc = NULL; - const Eina_List *l = NULL; - Eina_List *fo_list = NULL; - Elm_Font_Overlay *efo = NULL; - - int font_size = __font_size_get(); - int size = 0; - - text_classes = elm_config_text_classes_list_get(); - - fo_list = (Eina_List *)elm_config_font_overlay_list_get(); - - Eina_List *ll = NULL; - Eina_List *l_next = NULL; - - Eina_Bool slp_medium_exist = EINA_FALSE; - Eina_Bool slp_roman_exist = EINA_FALSE; - Eina_Bool slp_bold_exist = EINA_FALSE; - Eina_Bool slp_regular_exist = EINA_FALSE; - - /* Tizen */ - Eina_Bool tizen_exist = EINA_FALSE; - - EINA_LIST_FOREACH_SAFE(fo_list, ll, l_next, efo) { - if (!strcmp(efo->text_class, "tizen_medium")) { - elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); - slp_medium_exist = EINA_TRUE; - } else if (!strcmp(efo->text_class, "tizen_roman")) { - elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); - slp_roman_exist = EINA_TRUE; - } else if (!strcmp(efo->text_class, "tizen_bold")) { - elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); - slp_bold_exist = EINA_TRUE; - } else if (!strcmp(efo->text_class, "tizen_regular")) { - elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); - slp_regular_exist = EINA_TRUE; - } - - /* Tizen */ - if (!strcmp(efo->text_class, "tizen")) { - elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); - tizen_exist = EINA_TRUE; - } - - } - - /* if slp_XX do not exist, need to set them, font size is -100(100%) */ - if (slp_medium_exist == EINA_FALSE) { - elm_config_font_overlay_set("tizen_medium", (const char *)font_name, MIDDLE_FONT_DPI); - } - if (slp_roman_exist == EINA_FALSE) { - elm_config_font_overlay_set("tizen_roman", (const char *)font_name, MIDDLE_FONT_DPI); - } - if (slp_bold_exist == EINA_FALSE) { - elm_config_font_overlay_set("tizen_bold", (const char *)font_name, MIDDLE_FONT_DPI); - } - if (slp_regular_exist == EINA_FALSE) { - elm_config_font_overlay_set("tizen_regular", (const char *)font_name, MIDDLE_FONT_DPI); - } - - /* Tizen */ - if (tizen_exist == EINA_FALSE) { - elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); - } - - elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); - - /* Tizen */ - elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); - - EINA_LIST_FOREACH(text_classes, l, etc) { - ll = NULL; - - size = font_size; - EINA_LIST_FOREACH(fo_list, ll, efo) { - if (!strcmp(etc->name, efo->text_class)) { - size = efo->size; - } - } - elm_config_font_overlay_set(etc->name, (const char *)font_name, size); - } - elm_config_text_classes_list_free(text_classes); - text_classes = NULL; - - /* add new function */ -#ifdef USE_EFL_ASSIST - ea_theme_system_font_set(font_name, font_size); - ea_theme_system_fonts_apply(); -#endif - - elm_config_font_overlay_apply(); - elm_config_all_flush(); - elm_config_save(); - return 1; -} - -static void __font_size_set() -{ - SETTING_TRACE_BEGIN; - Eina_List *text_classes = NULL; - Elm_Text_Class *etc = NULL; - const Eina_List *l = NULL; - int font_size = __font_size_get(); - char *font_name = _get_cur_font(); - - if (font_size == -1) { - return; - } - - text_classes = elm_config_text_classes_list_get(); - - EINA_LIST_FOREACH(text_classes, l, etc) { - elm_config_font_overlay_set(etc->name, font_name, font_size); - } - - elm_config_text_classes_list_free(text_classes); - -#ifdef USE_EFL_ASSIST - ea_theme_system_font_set(font_name, font_size); - ea_theme_system_fonts_apply(); -#endif - - elm_config_font_overlay_apply(); - elm_config_all_flush(); - elm_config_save(); - - text_classes = NULL; - g_free(font_name); -} - -static int __font_size_get() -{ - SETTING_TRACE_BEGIN; - int font_size = -1; - - int vconf_value = -1; - if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &vconf_value)) { - return -1; - } - - switch (vconf_value) { - case SYSTEM_SETTINGS_FONT_SIZE_SMALL: - font_size = SMALL_FONT_DPI; - break; - case SYSTEM_SETTINGS_FONT_SIZE_NORMAL: - font_size = MIDDLE_FONT_DPI; - break; - case SYSTEM_SETTINGS_FONT_SIZE_LARGE: - font_size = LARGE_FONT_DPI; - break; - case SYSTEM_SETTINGS_FONT_SIZE_HUGE: - font_size = HUGE_FONT_DPI; - break; - case SYSTEM_SETTINGS_FONT_SIZE_GIANT: - font_size = GIANT_FONT_DPI; - break; - default: - font_size = MIDDLE_FONT_DPI; - break; - } - return font_size; -} - /*//////////////////////////////////////////////////////////////////////////////////////// */ /*--------------------------------------- */ int system_setting_get_locale_country(system_settings_key_e key, system_setting_data_type_e data_type, void **value) diff --git a/system-settings-util/CMakeLists.txt b/system-settings-util/CMakeLists.txt new file mode 100755 index 0000000..a1a238f --- /dev/null +++ b/system-settings-util/CMakeLists.txt @@ -0,0 +1,43 @@ +#set variable +# SYSTEM_SETTINGS_UTIL - setting-common + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(${SYSTEM_SETTINGS_UTIL}) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +SET(requires "elementary ecore dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info") + +PKG_CHECK_MODULES(system_settings_util REQUIRED ${requires}) + +FOREACH(flag ${system_settings_util_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Werror-implicit-function-declaration") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") + +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + MESSAGE("add -DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DSLP_DEBUG") +ADD_DEFINITIONS("-shared") + +#SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl, --rpath=/usr/lib") + +#make lib-${LIB_SYSTEM_SETTINGS_UTIL}.so files +ADD_LIBRARY(${LIB_SYSTEM_SETTINGS_UTIL} SHARED + ./src/system_settings_util.c +) + +TARGET_LINK_LIBRARIES(${LIB_SYSTEM_SETTINGS_UTIL} ${system_settings_util_LDFLAGS}) +SET_TARGET_PROPERTIES(${LIB_SYSTEM_SETTINGS_UTIL} PROPERTIES VERSION 0.1.0 SOVERSION 1) +INSTALL(TARGETS ${LIB_SYSTEM_SETTINGS_UTIL} DESTINATION ${CMAKE_LIBDIR}) + +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/system_settings_util.h DESTINATION ${CMAKE_INCLUDEDIR}) + diff --git a/system-settings-util/include/system_settings_util.h b/system-settings-util/include/system_settings_util.h new file mode 100644 index 0000000..cd51373 --- /dev/null +++ b/system-settings-util/include/system_settings_util.h @@ -0,0 +1,4 @@ +bool font_config_set(char *font_name); +int __is_available_font(char *font_name); +char *_get_default_font(); +char *_get_cur_font(); diff --git a/system-settings-util/src/system_settings_util.c b/system-settings-util/src/system_settings_util.c new file mode 100644 index 0000000..0810222 --- /dev/null +++ b/system-settings-util/src/system_settings_util.c @@ -0,0 +1,519 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#ifdef TIZEN_WEARABLE +#define SMALL_FONT_DPI (-90) +#endif +#ifdef TIZEN_MOBILE +#define SMALL_FONT_DPI (-80) +#endif +#define MIDDLE_FONT_DPI (-100) +#ifdef TIZEN_WEARABLE +#define LARGE_FONT_DPI (-110) +#endif +#ifdef TIZEN_MOBILE +#define LARGE_FONT_DPI (-150) +#endif +#define HUGE_FONT_DPI (-190) +#define GIANT_FONT_DPI (-250) + +#define SETTING_FONT_PRELOAD_FONT_PATH _TZ_SYS_RO_SHARE"/fonts" +#define SETTING_FONT_DOWNLOADED_FONT_PATH _TZ_SYS_RO_SHARE"/fonts" + +#define SETTING_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf" +#define SETTING_DEFAULT_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf" + + +bool font_config_set(char *font_name); +int __is_available_font(char *font_name); +char *_get_default_font(); +char *_get_cur_font(); + +int __font_size_get(); +void __font_size_set(); + +bool __is_supported_image_type_load(char *path) +{ + SETTING_TRACE_BEGIN; + //evas_init(); + ecore_evas_init(); + Ecore_Evas *ee; + Evas *evas; + + ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL); + evas = ecore_evas_get(ee); + + Evas_Object *img = evas_object_image_add(evas); + evas_object_image_file_set(img, path, NULL); + Evas_Load_Error ret = evas_object_image_load_error_get(img); + + bool result = false; + if (ret == EVAS_LOAD_ERROR_NONE) { + SETTING_TRACE("%s - OK", path); + result = true; + } else { + SETTING_TRACE("%s - NO", path); + result = false; + } + ecore_evas_free(ee); + evas_shutdown(); + return result; +} + +bool __is_supported_image_type(char *path) +{ + SETTING_TRACE_BEGIN; + bool ret = false; + + evas_init(); + if (evas_object_image_extension_can_load_get(path)) + ret = true; + else + ret = false; + + evas_shutdown(); + + return ret; +} + +char *_get_cur_font() +{ + SETTING_TRACE_BEGIN; + xmlDocPtr doc = NULL; + xmlNodePtr cur = NULL; + xmlNodePtr cur2 = NULL; + xmlNodePtr cur3 = NULL; + xmlChar *key = NULL; + + char *font_name = NULL; + + doc = xmlParseFile(SETTING_FONT_CONF_FILE); + + cur = xmlDocGetRootElement(doc); + + if (cur == NULL) { + xmlFreeDoc(doc); + doc = NULL; + return NULL; + } + + if (xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) { + xmlFreeDoc(doc); + doc = NULL; + return NULL; + } + + cur = cur->xmlChildrenNode; + + while (cur != NULL) { + if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) { + cur2 = cur->xmlChildrenNode; + while (cur2 != NULL) { + if ((!xmlStrcmp(cur2->name, (const xmlChar *)"edit"))) { + cur3 = cur2->xmlChildrenNode; + while (cur3 != NULL) { + if ((!xmlStrcmp(cur3->name, (const xmlChar *)"string"))) { + key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); + + font_name = g_strdup((char *)key); + xmlFree(key); + key = NULL; + xmlFreeDoc(doc); + doc = NULL; + return font_name; + } + cur3 = cur3->next; + } + } + cur2 = cur2->next; + } + } + cur = cur->next; + } + + xmlFreeDoc(doc); + doc = NULL; + return NULL; +} + +void font_config_set_notification() +{ + SETTING_TRACE_BEGIN; +#if 0 + /* notification */ + Ecore_X_Window ecore_win = ecore_x_window_root_first_get(); + Ecore_X_Atom atom = ecore_x_atom_get("FONT_TYPE_change"); + ecore_x_window_prop_string_set(ecore_win, atom, "tizen"); +#endif +} + +int __is_available_font(char *font_name) +{ + SETTING_TRACE_BEGIN; + FcObjectSet *os = NULL; + FcFontSet *fs = NULL; + FcPattern *pat = NULL; + Eina_List *list = NULL; + FcConfig *font_config = NULL; + + int ret = 0; + + if (font_name == NULL) + return -1; + + font_config = FcInitLoadConfigAndFonts(); + + /*setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts"); */ + + char *locale = setlocale(0, NULL); + + pat = FcPatternCreate(); + + os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0); + + if (os) { + fs = FcFontList(font_config, pat, os); + FcObjectSetDestroy(os); + os = NULL; + } + + if (pat) { + FcPatternDestroy(pat); + pat = NULL; + } + + if (fs) { + int j; + SETTING_TRACE("fs->nfont = %d", fs->nfont); + + for (j = 0; j < fs->nfont; j++) { + FcChar8 *family = NULL; + FcChar8 *file = NULL; + + if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) { + int preload_path_len = strlen(SETTING_FONT_PRELOAD_FONT_PATH); + int download_path_len = strlen(SETTING_FONT_DOWNLOADED_FONT_PATH); + + if (file && (!strncmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) + || !strncmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len))) { + char *family_result = NULL; + FcChar8 *lang = NULL; + int id = 0; + if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) { + break; + } + if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) { + break; + } + family_result = (char *)family; + + /* Find proper family name for current locale. */ + while (locale && family && lang) { + if (!strncmp(locale, (char *)lang, strlen((char *)lang))) { + family_result = (char *)family; + break; + } + + /* I will set english as default family language. */ + /* If there is no proper family language for current locale, */ + /* we have to show the english family name. */ + if (!strcmp((char*)lang, (char*)"en")) { + family_result = (char *)family; + } + id++; + if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) { + break; + } + if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) { + break; + } + } + + if (family_result) { + SETTING_TRACE("-------- FONT - family_result = %s", (char *)family_result); + if (strcmp(family_result, font_name) == 0) { + ret = 1; + break; + } + } + } + } + } + FcFontSetDestroy(fs); + fs = NULL; + } + FcConfigDestroy(font_config); + font_config = NULL; + return ret; +} + + +char *_get_default_font() +{ + SETTING_TRACE_BEGIN; + xmlDocPtr doc = NULL; + xmlNodePtr cur = NULL; + xmlNodePtr cur2 = NULL; + xmlNodePtr cur3 = NULL; + xmlChar *key = NULL; + struct _xmlAttr *properties = NULL; + char *default_font_name = NULL; + + doc = xmlParseFile(SETTING_DEFAULT_FONT_CONF_FILE); + + cur = xmlDocGetRootElement(doc); + + if (cur == NULL) { + xmlFreeDoc(doc); + doc = NULL; + return NULL; + } + + if (xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) { + xmlFreeDoc(doc); + doc = NULL; + return NULL; + } + + cur = cur->xmlChildrenNode; + + while (cur != NULL) { + if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) { + cur2 = cur->xmlChildrenNode; + while (cur2 != NULL) { + if ((!xmlStrcmp(cur2->name, (const xmlChar *)"edit"))) { + properties = cur2->properties; + /*find the "name" property*/ + while (NULL != properties) { + if (!xmlStrcmp(properties->name, (const xmlChar *)"name")) { + break; + } + properties = properties->next; + } + + /*If the value of "name" property is "family", then get the child node string, + it shall be the default font type*/ + if (NULL != properties && !xmlStrcmp(properties->children->content, (const xmlChar *)"family")) { + cur3 = cur2->xmlChildrenNode; + while (cur3 != NULL) { + if ((!xmlStrcmp(cur3->name, (const xmlChar *)"string"))) { + key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); + default_font_name = g_strdup((char *)key); + xmlFree(key); + key = NULL; + xmlFreeDoc(doc); + doc = NULL; + return default_font_name; + } + cur3 = cur3->next; + } + } + } + cur2 = cur2->next; + } + } + cur = cur->next; + } + + xmlFreeDoc(doc); + doc = NULL; + return NULL; +} + +bool font_config_set(char *font_name) +{ + SETTING_TRACE_BEGIN; + Eina_List *text_classes = NULL; + Elm_Text_Class *etc = NULL; + const Eina_List *l = NULL; + Eina_List *fo_list = NULL; + Elm_Font_Overlay *efo = NULL; + + int font_size = __font_size_get(); + int size = 0; + + text_classes = elm_config_text_classes_list_get(); + + fo_list = (Eina_List *)elm_config_font_overlay_list_get(); + + Eina_List *ll = NULL; + Eina_List *l_next = NULL; + + Eina_Bool slp_medium_exist = EINA_FALSE; + Eina_Bool slp_roman_exist = EINA_FALSE; + Eina_Bool slp_bold_exist = EINA_FALSE; + Eina_Bool slp_regular_exist = EINA_FALSE; + + /* Tizen */ + Eina_Bool tizen_exist = EINA_FALSE; + + EINA_LIST_FOREACH_SAFE(fo_list, ll, l_next, efo) { + if (!strcmp(efo->text_class, "tizen_medium")) { + elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); + slp_medium_exist = EINA_TRUE; + } else if (!strcmp(efo->text_class, "tizen_roman")) { + elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); + slp_roman_exist = EINA_TRUE; + } else if (!strcmp(efo->text_class, "tizen_bold")) { + elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); + slp_bold_exist = EINA_TRUE; + } else if (!strcmp(efo->text_class, "tizen_regular")) { + elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); + slp_regular_exist = EINA_TRUE; + } + + /* Tizen */ + if (!strcmp(efo->text_class, "tizen")) { + elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size); + tizen_exist = EINA_TRUE; + } + + } + + /* if slp_XX do not exist, need to set them, font size is -100(100%) */ + if (slp_medium_exist == EINA_FALSE) { + elm_config_font_overlay_set("tizen_medium", (const char *)font_name, MIDDLE_FONT_DPI); + } + if (slp_roman_exist == EINA_FALSE) { + elm_config_font_overlay_set("tizen_roman", (const char *)font_name, MIDDLE_FONT_DPI); + } + if (slp_bold_exist == EINA_FALSE) { + elm_config_font_overlay_set("tizen_bold", (const char *)font_name, MIDDLE_FONT_DPI); + } + if (slp_regular_exist == EINA_FALSE) { + elm_config_font_overlay_set("tizen_regular", (const char *)font_name, MIDDLE_FONT_DPI); + } + + /* Tizen */ + if (tizen_exist == EINA_FALSE) { + elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); + } + + elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); + + /* Tizen */ + elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI); + + EINA_LIST_FOREACH(text_classes, l, etc) { + ll = NULL; + + size = font_size; + EINA_LIST_FOREACH(fo_list, ll, efo) { + if (!strcmp(etc->name, efo->text_class)) { + size = efo->size; + } + } + elm_config_font_overlay_set(etc->name, (const char *)font_name, size); + } + elm_config_text_classes_list_free(text_classes); + text_classes = NULL; + + /* add new function */ +#ifdef USE_EFL_ASSIST + ea_theme_system_font_set(font_name, font_size); + ea_theme_system_fonts_apply(); +#endif + + elm_config_font_overlay_apply(); + elm_config_all_flush(); + elm_config_save(); + return 1; +} + +void __font_size_set() +{ + SETTING_TRACE_BEGIN; + Eina_List *text_classes = NULL; + Elm_Text_Class *etc = NULL; + const Eina_List *l = NULL; + int font_size = __font_size_get(); + char *font_name = _get_cur_font(); + + if (font_size == -1) { + return; + } + + text_classes = elm_config_text_classes_list_get(); + + EINA_LIST_FOREACH(text_classes, l, etc) { + elm_config_font_overlay_set(etc->name, font_name, font_size); + } + + elm_config_text_classes_list_free(text_classes); + +#ifdef USE_EFL_ASSIST + ea_theme_system_font_set(font_name, font_size); + ea_theme_system_fonts_apply(); +#endif + + elm_config_font_overlay_apply(); + elm_config_all_flush(); + elm_config_save(); + + text_classes = NULL; + g_free(font_name); +} + +int __font_size_get() +{ + SETTING_TRACE_BEGIN; + int font_size = -1; + + int vconf_value = -1; + if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &vconf_value)) { + return -1; + } + + switch (vconf_value) { + case SYSTEM_SETTINGS_FONT_SIZE_SMALL: + font_size = SMALL_FONT_DPI; + break; + case SYSTEM_SETTINGS_FONT_SIZE_NORMAL: + font_size = MIDDLE_FONT_DPI; + break; + case SYSTEM_SETTINGS_FONT_SIZE_LARGE: + font_size = LARGE_FONT_DPI; + break; + case SYSTEM_SETTINGS_FONT_SIZE_HUGE: + font_size = HUGE_FONT_DPI; + break; + case SYSTEM_SETTINGS_FONT_SIZE_GIANT: + font_size = GIANT_FONT_DPI; + break; + default: + font_size = MIDDLE_FONT_DPI; + break; + } + return font_size; +} -- 2.7.4