apply font-change commands by socket 85/108585/2
authorMyoungJune Park <mj2004.park@samsung.com>
Thu, 5 Jan 2017 06:39:32 +0000 (15:39 +0900)
committerMyoungJune Park <mj2004.park@samsung.com>
Thu, 5 Jan 2017 06:58:26 +0000 (15:58 +0900)
Change-Id: Idf88e1573c4990310e9f16d14b701edf63ac6056
Signed-off-by: MyoungJune Park <mj2004.park@samsung.com>
src/system_setting_platform.c
system-settings-util/src/system_settings_util.c

index e0fd469..c493e5f 100644 (file)
 #include <tzplatform_config.h>
 #include <alarm.h>
 
-#ifdef USE_EFL_ASSIST
-#include <efl_assist.h>
-#endif
-
 
 
 #define SETTING_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf"
index 3e9c331..e76a560 100644 (file)
@@ -7,8 +7,14 @@
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/un.h>
+#include <sys/socket.h>
+#include <systemd/sd-login.h>
 #include <fcntl.h>
 
+#define EFL_CONFIG_SOCK_PATH "/run/user_ext/%d"
+#define EFL_CONFIG_SOCKET_FILE ".efl-config.sock"
+
 #include <regex.h>
 
 #include <dlog.h>
@@ -269,140 +275,131 @@ char *_get_default_font()
        return __get_main_font_family_name_by_alias(SETTING_FONT_TIZEN_DEFAULT_FONT_ALIAS);
 }
 
-/*  LCOV_EXCL_START */
-bool font_config_set(char *font_name)
+bool _is_in_system_session()
 {
        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 ret = 0;
+       char *slice = 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;
+       ret = sd_pid_get_slice(getpid(), &slice);
+       if (0 <= ret && slice) {
+               if (0 == strncmp(slice, "system.slice", strlen("system.slice"))) {
+                       free(slice);
+                       return true;
                }
+       } else {
+               SETTING_TRACE("sd_pid_get_slice() Fail(%d)", ret);
+       }
 
-               /* 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;
-               }
+       free(slice);
+       return false;
+}
 
+bool _get_active_uid(uid_t *uid)
+{
+       SETTING_TRACE_BEGIN;
+       int active_user_count = 0;
+       uid_t *active_user_list = NULL;
+
+       active_user_count = sd_get_active_uids(&active_user_list);
+       /* the number of active users is 1 in tizen3.0 */
+       if (1 == active_user_count && active_user_list) {
+               *uid = active_user_list[0];
+               SETTING_TRACE("active uid = %d", *uid);
+       } else {
+               SETTING_TRACE("sd_get_active_uids() Fail(%d)", active_user_count);
+               free(active_user_list);
+               return false;
        }
 
-       /* 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);
-       }
+       return true;
+}
 
-       /* Tizen */
-       if (tizen_exist == EINA_FALSE) {
-               elm_config_font_overlay_set("tizen", (const char *)font_name,  MIDDLE_FONT_DPI);
+bool
+_efl_config_set(char *msg)
+{
+       SETTING_TRACE_BEGIN;
+       int fd;
+       char sock_file[1024] = {0};
+       uid_t active_uid = getuid();
+       bool ret = false;
+
+       if (_is_in_system_session() == true) {
+               if (_get_active_uid(&active_uid) == false) {
+                       SETTING_TRACE("get active uid fail");
+                       return ret;
+               }
        }
 
-       elm_config_font_overlay_set("tizen", (const char *)font_name,  MIDDLE_FONT_DPI);
+       snprintf(sock_file, sizeof(sock_file), EFL_CONFIG_SOCK_PATH"/%s",
+                       active_uid,
+                       EFL_CONFIG_SOCKET_FILE);
 
-       /* Tizen */
-       elm_config_font_overlay_set("tizen", (const char *)font_name,  MIDDLE_FONT_DPI);
+       do {
+               int r, size, flags;
+               struct sockaddr_un server_addr;
 
-       EINA_LIST_FOREACH(text_classes, l, etc) {
-               ll = NULL;
+               fd = socket(PF_UNIX, SOCK_STREAM, 0);
+               if (fd < 0) {
+                       SETTING_TRACE("socket[%d] error :%d", fd, errno);
+                       break;
+               }
 
-               size = font_size;
-               EINA_LIST_FOREACH(fo_list, ll, efo) {
-                       if (!strcmp(etc->name, efo->text_class)) {
-                               size = efo->size;
-                       }
+               flags = fcntl(fd, F_GETFL, 0);
+               if (flags == -1)
+                       flags = 0;
+               r = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+               if (0 != r)
+                       SETTING_TRACE("fcntl fail : %d", errno);
+
+               bzero(&server_addr, sizeof(server_addr));
+               server_addr.sun_family = AF_UNIX;
+               snprintf(server_addr.sun_path, sizeof(server_addr.sun_path), "%s",
+                               sock_file);
+
+               r = connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
+               if (r != 0) {
+                       SETTING_TRACE("connect error : %d, %d", r, errno);
+                       break;
                }
-               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
+               size = write(fd, msg, strlen(msg));
+               if (size <= 0) {
+                       SETTING_TRACE("write fail : %d", errno);
+               } else {
+                       ret = true;
+               }
+       } while (0);
 
-       elm_config_font_overlay_apply();
-       elm_config_all_flush();
-       elm_config_save();
-       return 1;
+       return ret;
 }
-/*  LCOV_EXCL_STOP */
 
 /*  LCOV_EXCL_START */
-void __font_size_set()
+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;
+       char buf[255] = { 0 };
        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();
+       bool ret;
 
-       EINA_LIST_FOREACH(text_classes, l, etc) {
-               elm_config_font_overlay_set(etc->name, font_name, font_size);
-       }
+       snprintf(buf, sizeof(buf), "font_name: %s, font_size: %d", font_name, font_size);
+       ret = _efl_config_set(buf);
 
-       elm_config_text_classes_list_free(text_classes);
+       return ret;
+}
+/*  LCOV_EXCL_STOP */
 
-#ifdef USE_EFL_ASSIST
-       ea_theme_system_font_set(font_name, font_size);
-       ea_theme_system_fonts_apply();
-#endif
+/*  LCOV_EXCL_START */
+void __font_size_set()
+{
+       SETTING_TRACE_BEGIN;
+       char buf[255] = { 0 };
+       int font_size = __font_size_get();
+       char *font_name = _get_cur_font();
 
-       elm_config_font_overlay_apply();
-       elm_config_all_flush();
-       elm_config_save();
+       snprintf(buf, sizeof(buf), "font_name: %s, font_size: %d", font_name, font_size);
+       _efl_config_set(buf);
 
-       text_classes = NULL;
        g_free(font_name);
 }
 /*  LCOV_EXCL_STOP */