MMC status check & font,size changed events added
authorSung-jae Park <nicesj.park@samsung.com>
Thu, 18 Apr 2013 04:58:46 +0000 (13:58 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Thu, 18 Apr 2013 04:58:46 +0000 (13:58 +0900)
Update font (name & size) changed event handler.

Add MMC status chage event handler

Change-Id: I26d72234b24ec108abd5b13126aeec2f5838484a

CMakeLists.txt
packaging/org.tizen.data-provider-slave.spec
src/main.c

index 67af1e2..d754f07 100644 (file)
@@ -23,6 +23,7 @@ pkg_check_modules(pkg REQUIRED
        evas
        livebox
        elementary
+       capi-system-system-settings
 )
 
 SET(PACKAGE "${PROJECT_NAME}")
index 4075b16..d07121b 100644 (file)
@@ -2,7 +2,7 @@
 
 Name: org.tizen.data-provider-slave
 Summary: Plugin type livebox service provider.
-Version: 0.10.3
+Version: 0.10.4
 Release: 1
 Group: HomeTF/Livebox
 License: Flora License
@@ -29,6 +29,7 @@ BuildRequires: pkgconfig(edje)
 BuildRequires: pkgconfig(evas)
 BuildRequires: pkgconfig(livebox)
 BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(capi-system-system-settings)
 
 %description
 Plugin type liveboxes are managed by this.
index 5649a26..4300762 100644 (file)
@@ -31,6 +31,8 @@
 #include <Edje.h>
 #include <Eina.h>
 
+#include <system_settings.h>
+
 #include <dlog.h>
 #include <bundle.h>
 #include <heap-monitor.h>
 #include "so_handler.h"
 #include "lb.h"
 
-/*!
- * \NOTE
- * Undocumented API
- */
-extern void evas_common_font_flush(void);
-extern int evas_common_font_cache_get(void);
-extern void evas_common_font_cache_set(int size);
-
 #define TEXT_CLASS     "tizen"
 #define TEXT_SIZE      -100
 
+#if !defined(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME "db/setting/accessibility/font_name"
+#endif
+
+#if !defined(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE "db/setting/accessibility/font_size"
+#endif
+
 static struct info {
        Ecore_Event_Handler *property_handler;
        int heap_monitor;
+       char *font_name;
+       int font_size;
 } s_info = {
        .property_handler = NULL,
        .heap_monitor = 0,
+       .font_name = NULL,
+       .font_size = 3,
 };
 
-static Eina_Bool update_font_cb(void *data)
+static void update_font_cb(void *data)
 {
+       Eina_List *list;
+       char *text;
+
+       list = edje_text_class_list();
+       EINA_LIST_FREE(list, text) {
+               if (!strncasecmp(text, TEXT_CLASS, strlen(TEXT_CLASS))) {
+                       int size;
+                       switch (s_info.font_size) {
+                       case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
+                               size = -80;
+                               break;
+                       case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
+                               size = -100;
+                               break;
+                       case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
+                               size = -150;
+                               break;
+                       case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
+                               size = -190;
+                               break;
+                       case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
+                               size = -250;
+                               break;
+                       default:
+                               size = -100;
+                               break;
+                       }
+
+                       DbgPrint("Update text class %s (%s, %d)\n", text, s_info.font_name, size);
+                       edje_text_class_del(text);
+                       edje_text_class_set(text, s_info.font_name, size);
+               } else {
+                       DbgPrint("Skip text class %s\n", text);
+               }
+       }
+
        lb_system_event_all(LB_SYS_EVENT_FONT_CHANGED);
-       return ECORE_CALLBACK_CANCEL;
 }
 
-static Eina_Bool property_cb(void *data, int type, void *event)
+static void font_changed_cb(system_settings_key_e key, void *user_data)
 {
-       Ecore_X_Event_Window_Property *info = (Ecore_X_Event_Window_Property *)event;
-
-       if (info->atom == ecore_x_atom_get("FONT_TYPE_change") || info->atom == ecore_x_atom_get("BADA_FONT_change")) {
-               Eina_List *list;
-               char *text;
-               char *font;
-               int cache;
-
-               font = vconf_get_str("db/setting/accessibility/font_name");
-               if (!font)
-                       return ECORE_CALLBACK_PASS_ON;
-
-               cache = evas_common_font_cache_get();
-               evas_common_font_cache_set(0);
-               evas_common_font_flush();
-
-               list = edje_text_class_list();
-               EINA_LIST_FREE(list, text) {
-                       if (!strncasecmp(text, TEXT_CLASS, strlen(TEXT_CLASS))) {
-                               edje_text_class_del(text);
-                               edje_text_class_set(text, font, TEXT_SIZE);
-                               DbgPrint("Update text class %s (%s, %d)\n", text, font, TEXT_SIZE);
-                       } else {
-                               DbgPrint("Skip text class %s\n", text);
-                       }
-               }
+       int ret;
+       char *font_name;
 
-               evas_common_font_cache_set(cache);
-               free(font);
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_name);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE || !font_name)
+               return;
 
-               /*!
-                * \NOTE
-                * Try to update all liveboxes
-                */
-               if (!ecore_timer_add(0.1f, update_font_cb, NULL)) {
-                       ErrPrint("Failed to add timer for updating fonts\n");
-                       lb_system_event_all(LB_SYS_EVENT_FONT_CHANGED);
-               }
+       if (s_info.font_name && !strcmp(s_info.font_name, font_name)) {
+               DbgPrint("Font is not changed\n");
+               free(font_name);
+               return;
+       }
+
+       if (s_info.font_name) {
+               free(s_info.font_name);
+               s_info.font_name = NULL;
        }
 
-       return ECORE_CALLBACK_PASS_ON;
+       s_info.font_name = font_name;
+       DbgPrint("Font name is changed to %s\n", s_info.font_name);
+
+       /*!
+        * \NOTE
+        * Try to update all liveboxes
+        */
+       update_font_cb(NULL);
+}
+
+static void font_size_cb(system_settings_key_e key, void *user_data)
+{
+       int size;
+
+       if (system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size) != SYSTEM_SETTINGS_ERROR_NONE)
+               return;
+
+       if (size == s_info.font_size) {
+               DbgPrint("Font size is not changed\n");
+               return;
+       }
+
+       s_info.font_size = size;
+       DbgPrint("Font size is changed to %d\n", size);
+
+       update_font_cb(NULL);
+}
+
+static void mmc_changed_cb(keynode_t *node, void *user_data)
+{
+       DbgPrint("MMC status is changed\n");
+       lb_system_event_all(LB_SYS_EVENT_MMC_STATUS_CHANGED);
 }
 
 static void time_changed_cb(keynode_t *node, void *user_data)
@@ -141,10 +191,6 @@ static bool app_create(void *data)
        else
                setenv("PROVIDER_COM_CORE_THREAD", "false", 0);
 
-       s_info.property_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, property_cb, NULL);
-       if (!s_info.property_handler)
-               ErrPrint("Failed to add a property change event handler\n");
-
        ret = livebox_service_init();
        DbgPrint("Livebox service init: %d\n", ret);
 
@@ -160,8 +206,25 @@ static bool app_create(void *data)
        ret = update_monitor_init();
        DbgPrint("Content update monitor is initiated: %d\n", ret);
 
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_changed_cb, NULL);
+       DbgPrint("System font is changed: %d\n", ret);
+       
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE, font_size_cb, NULL);
+       DbgPrint("System font size is changed: %d\n", ret);
+
        ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_STIME, time_changed_cb, NULL);
-       DbgPrint("System time event callback added: %d\n", ret);
+       DbgPrint("System time changed event callback added: %d\n", ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mmc_changed_cb, NULL);
+       DbgPrint("MMC status changed event callback added: %d\n", ret);
+
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &s_info.font_name);
+       if (ret == SYSTEM_SETTINGS_ERROR_NONE)
+               DbgPrint("Current font: %s\n", s_info.font_name);
+
+       ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &s_info.font_size);
+       if (ret == SYSTEM_SETTINGS_ERROR_NONE)
+               DbgPrint("Current size: %d\n", s_info.font_size);
 
        return TRUE;
 }
@@ -170,6 +233,15 @@ static void app_terminate(void *data)
 {
        int ret;
 
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE);
+       ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_STIME, time_changed_cb);
+       DbgPrint("Remove time changed callback: %d\n", ret);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mmc_changed_cb);
+       DbgPrint("Remove MMC status changed callback: %d\n", ret);
+
        ret = update_monitor_fini();
        DbgPrint("Content update monitor is finalized: %d\n", ret);
        ret = fault_fini();