Remove voice-control-elm dependency 57/155357/7
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 13 Oct 2017 04:34:38 +0000 (13:34 +0900)
committerHwanKyu Jhun <h.jhun@samsung.com>
Tue, 17 Oct 2017 03:01:15 +0000 (03:01 +0000)
This patch removes the voice-control-elm dependency.
After this patch is applied, the appcore-efl-base calls dlopen() to
use the voice-control-elm APIs.

Change-Id: Iddb550cbf2aca3241e05b8eb1d419266ab5b37fd
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
CMakeLists.txt
packaging/app-core.spec
src/efl_base/appcore_efl_base.c

index c9cc480..2a2289b 100644 (file)
@@ -88,7 +88,7 @@ SET(SRCS_efl src/legacy/appcore-efl.c src/efl_base/appcore_efl_base.c)
 SET(HEADERS_efl appcore-efl.h appcore_efl_base.h)
 
 INCLUDE(FindPkgConfig)
-SET(APPCORE_PKG_CHECK_MODULES2 "elementary dlog aul bundle voice-control-elm")
+SET(APPCORE_PKG_CHECK_MODULES2 "elementary dlog aul bundle")
 
 pkg_check_modules(pkg_efl REQUIRED ${APPCORE_PKG_CHECK_MODULES2})
 
index d417968..ab08ec2 100644 (file)
@@ -24,7 +24,6 @@ BuildRequires:  pkgconfig(pkgmgr-info)
 BuildRequires:  pkgconfig(ttrace)
 BuildRequires:  cmake
 BuildRequires:  pkgconfig(capi-system-info)
-BuildRequires:  pkgconfig(voice-control-elm)
 
 %description
 SLP common application basic
index a133d1c..2a2bb75 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 #include <stdbool.h>
+#include <dlfcn.h>
 #include <Elementary.h>
 #include <vconf.h>
-#include <voice_control_elm.h>
-#include <voice_control_elm_private.h>
 
 #include "appcore_efl_base_private.h"
 #include "appcore_efl_base.h"
 
-static bool vc_elm_initialized;
+#define PATH_LIB_VC_ELM "/usr/lib/libvc-elm.so.0"
+
+static bool __vc_elm_initialized;
+static void *__vc_elm_handle;
+static int (*__vc_elm_initialize)(void);
+static int (*__vc_elm_deinitialize)(void);
+static int (*__vc_elm_set_auto_register_mode)(int, int);
+
+static void __unload_vc_elm(void)
+{
+       if (!__vc_elm_handle)
+               return;
+
+       __vc_elm_initialize = NULL;
+       __vc_elm_deinitialize = NULL;
+       __vc_elm_set_auto_register_mode = NULL;
+
+       dlclose(__vc_elm_handle);
+       __vc_elm_handle = NULL;
+}
+
+static int __load_vc_elm(void)
+{
+       if (__vc_elm_handle)
+               return 0;
+
+       if (access(PATH_LIB_VC_ELM, F_OK) != 0) {
+               _ERR("Failed to access %s", PATH_LIB_VC_ELM);
+               return -1;
+       }
+
+       __vc_elm_handle = dlopen(PATH_LIB_VC_ELM, RTLD_LAZY | RTLD_GLOBAL);
+       if (!__vc_elm_handle) {
+               _ERR("Failed to open %s", PATH_LIB_VC_ELM);
+               return -1;
+       }
+
+       __vc_elm_initialize = dlsym(__vc_elm_handle, "vc_elm_initialize");
+       if (!__vc_elm_initialize) {
+               _ERR("Failed to load vc_elm_initialize");
+               __unload_vc_elm();
+               return -1;
+       }
+
+       __vc_elm_deinitialize = dlsym(__vc_elm_handle, "vc_elm_deinitialize");
+       if (!__vc_elm_deinitialize) {
+               _ERR("Failed to load vc_elm_deinitialize");
+               __unload_vc_elm();
+               return -1;
+       }
+
+       __vc_elm_set_auto_register_mode = dlsym(__vc_elm_handle,
+                       "vc_elm_set_auto_register_mode");
+       if (!__vc_elm_set_auto_register_mode) {
+               _ERR("Failed to load vc_elm_set_auto_register_mode");
+               __unload_vc_elm();
+               return -1;
+       }
+
+       return 0;
+}
 
 static void __vc_vtauto_changed_cb(keynode_t *key, void *data)
 {
@@ -40,22 +99,54 @@ static void __vc_vtauto_changed_cb(keynode_t *key, void *data)
 
        vt_automode = vconf_keynode_get_bool(key);
        if (vt_automode) {
-               if (!vc_elm_initialized) {
-                       vc_elm_initialize();
-                       vc_elm_initialized = true;
+               if (!__vc_elm_initialized) {
+                       __vc_elm_initialize();
+                       __vc_elm_initialized = true;
                }
-               vc_elm_set_auto_register_mode(2, 0);
+               __vc_elm_set_auto_register_mode(2, 0);
        } else {
-               vc_elm_deinitialize();
-               vc_elm_initialized = false;
+               __vc_elm_deinitialize();
+               __vc_elm_initialized = false;
        }
 }
 
+static void __vc_elm_init(void)
+{
+       int vt_automode = 0;
+       int r;
+
+       r = __load_vc_elm();
+       if (r < 0)
+               return;
+
+       vconf_notify_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE,
+                       __vc_vtauto_changed_cb, NULL);
+       vconf_get_bool(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, &vt_automode);
+       if (vt_automode) {
+               if (!__vc_elm_initialized) {
+                       __vc_elm_initialize();
+                       __vc_elm_initialized = true;
+               }
+               __vc_elm_set_auto_register_mode(2, 0);
+       }
+}
+
+static void __vc_elm_finish(void)
+{
+       vconf_ignore_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE,
+                       __vc_vtauto_changed_cb);
+       if (__vc_elm_initialized) {
+               __vc_elm_deinitialize();
+               __vc_elm_initialized = false;
+       }
+
+       __unload_vc_elm();
+}
+
 static void __efl_app_init(int argc, char **argv, void *data)
 {
        int hint;
        const char *hwacc;
-       int vt_automode = 0;
 
        elm_init(argc, argv);
 
@@ -76,26 +167,12 @@ static void __efl_app_init(int argc, char **argv, void *data)
        }
 
        /* VC voice touch setting */
-       vconf_notify_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE,
-                       __vc_vtauto_changed_cb, NULL);
-       vconf_get_bool(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, &vt_automode);
-       if (vt_automode) {
-               if (!vc_elm_initialized) {
-                       vc_elm_initialize();
-                       vc_elm_initialized = true;
-               }
-               vc_elm_set_auto_register_mode(2, 0);
-       }
+       __vc_elm_init();
 }
 
 static void __efl_app_finish(void)
 {
-       vconf_ignore_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE,
-                       __vc_vtauto_changed_cb);
-       if (vc_elm_initialized) {
-               vc_elm_deinitialize();
-               vc_elm_initialized = false;
-       }
+       __vc_elm_finish();
 
        elm_shutdown();