Fix the size of app id
[platform/core/uifw/stt.git] / client / stt_setting.c
old mode 100755 (executable)
new mode 100644 (file)
index f6347b3..9609c72
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd All Rights Reserved 
+*  Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  limitations under the License.
 */
 
-
-#include <sys/wait.h>
+#include <dirent.h>
 #include <Ecore.h>
-#include <sys/types.h>
+#include <libxml/parser.h>
 #include <sys/stat.h>
-#include <dirent.h>
+#include <sys/types.h>
+#include <sys/wait.h>
 
+#include "stt_config_mgr.h"
 #include "stt_main.h"
 #include "stt_setting.h"
-#include "stt_setting_dbus.h"
-
-
-static int __check_setting_stt_daemon();
 
-static bool g_is_daemon_started = false;
-
-static Ecore_Timer* g_setting_connect_timer = NULL;
 
 static stt_setting_state_e g_state = STT_SETTING_STATE_NONE;
 
-static stt_setting_initialized_cb g_initialized_cb;
-
+static stt_setting_supported_engine_cb g_engine_cb;
 static void* g_user_data;
 
-static int g_reason;
+static stt_setting_config_changed_cb g_config_changed_cb;
+static void* g_config_changed_user_data;
 
-/* API Implementation */
-static Eina_Bool __stt_setting_initialized(void *data)
-{
-       g_initialized_cb(g_state, g_reason, g_user_data);
+static stt_setting_engine_changed_cb g_engine_changed_cb;
+static void* g_engine_changed_user_data;
 
-       return EINA_FALSE;
+const char* stt_tag()
+{
+       return "sttc";
 }
 
-static Eina_Bool __stt_setting_connect_daemon(void *data)
+void __config_engine_changed_cb(const char* engine_id, const char* setting, const char* language, bool support_silence, bool need_credential, void* user_data)
 {
-       /* Send hello */
-       if (0 != stt_setting_dbus_request_hello()) {
-               if (false == g_is_daemon_started) {
-                       g_is_daemon_started = true;
-                       __check_setting_stt_daemon();
-               }
-               return EINA_TRUE;
-       }
-
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Connect daemon");
-
-       /* do request initialize */
-       int ret = -1;
-
-       ret = stt_setting_dbus_request_initialize();
+       if (NULL != engine_id)  SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine id(%s)", engine_id);
+       if (NULL != setting)    SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine setting(%s)", setting);
+       if (NULL != language)   SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Language(%s)", language);
+       SLOG(LOG_DEBUG, TAG_STTC, "Silence(%s), Credential(%s)", support_silence ? "on" : "off", need_credential ? "need" : "no need");
 
-       if (STT_SETTING_ERROR_ENGINE_NOT_FOUND == ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine not found");
-       } else if (STT_SETTING_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to connection : %d", ret);
-       } else {
-               /* success to connect stt-daemon */
-               g_state = STT_SETTING_STATE_READY;
-       }
-
-       g_reason = ret;
+       if (NULL != g_config_changed_cb)
+               g_engine_changed_cb(g_config_changed_user_data);
+}
 
-       ecore_timer_add(0, __stt_setting_initialized, NULL);
+void __config_lang_changed_cb(const char* before_language, const char* current_language, void* user_data)
+{
+       SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Lang changed : lang(%s)", current_language);
 
-       g_setting_connect_timer = NULL;
+       if (NULL != g_config_changed_cb)
+               g_config_changed_cb(g_config_changed_user_data);
+}
 
-       SLOG(LOG_DEBUG, TAG_STTC, "=====");
-       SLOG(LOG_DEBUG, TAG_STTC, " ");
+void __config_bool_changed_cb(stt_config_type_e type, bool bool_value, void* user_data)
+{
+       SECURE_SLOG(LOG_DEBUG, TAG_STTC, " type(%d) bool(%s)", type, bool_value ? "on" : "off");
 
-       return EINA_FALSE;
+       if (NULL != g_config_changed_cb)
+               g_config_changed_cb(g_config_changed_user_data);
 }
 
-int stt_setting_initialize(stt_setting_initialized_cb callback, void* user_data)
+int stt_setting_initialize(void)
 {
        SLOG(LOG_DEBUG, TAG_STTC, "===== Initialize STT Setting");
 
        if (STT_SETTING_STATE_READY == g_state) {
-               SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. \n");
+               SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. ");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
                SLOG(LOG_DEBUG, TAG_STTC, " ");
                return STT_SETTING_ERROR_NONE;
        }
 
-       if( 0 != stt_setting_dbus_open_connection() ) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to open connection\n ");
-               SLOG(LOG_DEBUG, TAG_STTC, "=====");
-               SLOG(LOG_DEBUG, TAG_STTC, " ");
+       int ret = stt_config_mgr_initialize(getpid());
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to initialize config manager : %d", ret);
                return STT_SETTING_ERROR_OPERATION_FAILED;
        }
 
-       g_initialized_cb = callback;
-       g_user_data = user_data;
+       ret = stt_config_mgr_set_callback(getpid(), __config_engine_changed_cb, __config_lang_changed_cb, __config_bool_changed_cb, NULL);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to set config changed : %d", ret);
+               return STT_SETTING_ERROR_OPERATION_FAILED;
+       }
 
-       g_setting_connect_timer = ecore_timer_add(0, __stt_setting_connect_daemon, NULL);
+       g_state = STT_SETTING_STATE_READY;
+
+       g_engine_changed_cb = NULL;
+       g_engine_changed_user_data = NULL;
+
+       g_config_changed_cb = NULL;
+       g_config_changed_user_data = NULL;
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
        SLOG(LOG_DEBUG, TAG_STTC, " ");
@@ -113,31 +103,11 @@ int stt_setting_initialize(stt_setting_initialized_cb callback, void* user_data)
        return STT_SETTING_ERROR_NONE;
 }
 
-int stt_setting_finalize ()
+int stt_setting_finalize()
 {
        SLOG(LOG_DEBUG, TAG_STTC, "===== Finalize STT Setting");
-       
-       int ret = 0;
-
-       if (STT_SETTING_STATE_READY == g_state) {
-               ret = stt_setting_dbus_request_finalilze();
-               if (0 != ret) {
-                       SLOG(LOG_ERROR, TAG_STTC, "Fail : finialize(%d)", ret);
-               }
-       }
 
-       if (NULL != g_setting_connect_timer) {
-               SLOG(LOG_DEBUG, TAG_STTC, "Setting Connect Timer is deleted");
-               ecore_timer_del(g_setting_connect_timer);
-       }
-
-       g_is_daemon_started = false;
-
-       if (0 != stt_setting_dbus_close_connection()) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to close connection");
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Finalize");
-       }
+       stt_config_mgr_finalize(getpid());
 
        g_state = STT_SETTING_STATE_NONE;
 
@@ -147,6 +117,11 @@ int stt_setting_finalize ()
        return STT_SETTING_ERROR_NONE;
 }
 
+bool __config_mgr_get_engine_list(const char* engine_id, const char* engine_name, const char* setting, bool support_silence, void* user_data)
+{
+       return g_engine_cb(engine_id, engine_name, setting, g_user_data);
+}
+
 int stt_setting_foreach_supported_engines(stt_setting_supported_engine_cb callback, void* user_data)
 {
        SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported engines");
@@ -165,13 +140,16 @@ int stt_setting_foreach_supported_engines(stt_setting_supported_engine_cb callba
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_get_engine_list(callback, user_data);
+       g_engine_cb = callback;
+       g_user_data = user_data;
+
+       int ret = stt_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
                SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported engines");
        }
-       
+
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
        SLOG(LOG_DEBUG, TAG_STTC, " ");
 
@@ -196,7 +174,7 @@ int stt_setting_get_engine(char** engine_id)
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_get_engine(engine_id);
+       int ret = stt_config_mgr_get_engine(engine_id);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
@@ -227,7 +205,9 @@ int stt_setting_set_engine(const char* engine_id)
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_set_engine(engine_id);
+       SECURE_SLOG(LOG_DEBUG, TAG_STTC, "New engine id : %s", engine_id);
+
+       int ret = stt_config_mgr_set_engine(engine_id);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
@@ -236,7 +216,7 @@ int stt_setting_set_engine(const char* engine_id)
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
        SLOG(LOG_DEBUG, TAG_STTC, " ");
-    
+
        return ret;
 }
 
@@ -258,14 +238,24 @@ int stt_setting_foreach_supported_languages(stt_setting_supported_language_cb ca
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_get_language_list(callback, user_data);
+       char* current_engine;
+       int ret = stt_config_mgr_get_engine(&current_engine);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to get current engine : %d", ret);
+               return -1;
+       }
+
+       ret = stt_config_mgr_get_language_list(current_engine, (stt_config_supported_langauge_cb)callback, user_data);
+
+       if (NULL != current_engine)
+               free(current_engine);
 
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
                SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported languages");
        }
-       
+
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
        SLOG(LOG_DEBUG, TAG_STTC, " ");
 
@@ -290,11 +280,11 @@ int stt_setting_get_default_language(char** language)
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_get_default_language(language);
+       int ret = stt_config_mgr_get_default_language(language);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported voices");
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Default language : %s", *language);
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -321,11 +311,11 @@ int stt_setting_set_default_language(const char* language)
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = stt_setting_dbus_request_set_default_language(language);
+       int ret = stt_config_mgr_set_default_language(language);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set default voice");
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set default language : %s", language);
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -334,11 +324,9 @@ int stt_setting_set_default_language(const char* language)
        return ret;
 }
 
-int stt_setting_get_profanity_filter(bool* value)
+int stt_setting_set_auto_language(bool value)
 {
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Get profanity filter");
-
-       int ret = 0;
+       SLOG(LOG_DEBUG, TAG_STTC, "===== Set auto voice");
 
        if (STT_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
@@ -347,44 +335,18 @@ int stt_setting_get_profanity_filter(bool* value)
                return STT_SETTING_ERROR_INVALID_STATE;
        }
 
-       if (NULL == value) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
+       if (value != true && value != false) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Invalid value");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
                SLOG(LOG_DEBUG, TAG_STTC, " ");
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       ret = stt_setting_dbus_request_get_profanity_filter(value);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get profanity filter(%s)", *value ? "true":"false");
-       }
-       
-       SLOG(LOG_DEBUG, TAG_STTC, "=====");
-       SLOG(LOG_DEBUG, TAG_STTC, " ");
-
-       return ret;
-}
-
-int stt_setting_set_profanity_filter(const bool value)
-{
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Set profanity filter");
-
-       int ret = 0;
-
-       if (STT_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
-               SLOG(LOG_DEBUG, TAG_STTC, "=====");
-               SLOG(LOG_DEBUG, TAG_STTC, " ");
-               return STT_SETTING_ERROR_INVALID_STATE;
-       }
-
-       ret = stt_setting_dbus_request_set_profanity_filter(value);
+       int ret = stt_config_mgr_set_auto_language(value);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set profanity filter(%s)", value ? "true":"false");
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -393,71 +355,42 @@ int stt_setting_set_profanity_filter(const bool value)
        return ret;
 }
 
-int stt_setting_get_punctuation_override(bool* value)
+int stt_setting_get_auto_language(bool* value)
 {
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Get punctuation override");
-
-       int ret = 0;
+       SLOG(LOG_DEBUG, TAG_STTC, "===== Get auto language");
 
        if (STT_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
                SLOG(LOG_DEBUG, TAG_STTC, " ");
                return STT_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == value) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] param is NULL");
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
                SLOG(LOG_DEBUG, TAG_STTC, " ");
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       ret = stt_setting_dbus_request_get_punctuation_override(value);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret); 
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get punctuation override(%s)", *value ? "true":"false");
-       }
-
-       SLOG(LOG_DEBUG, TAG_STTC, "=====");
-       SLOG(LOG_DEBUG, TAG_STTC, " ");
-
-       return ret;
-}
-
-int stt_setting_set_punctuation_override(bool value)
-{
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Set punctuation override");
-
-       int ret = 0;
-
-       if (STT_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
-               SLOG(LOG_DEBUG, TAG_STTC, "=====");
-               SLOG(LOG_DEBUG, TAG_STTC, " ");
-               return STT_SETTING_ERROR_INVALID_STATE;
-       }
-
-       ret = stt_setting_dbus_request_set_punctuation_override(value);
+       int ret = stt_config_mgr_get_auto_language(value);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set punctuation override(%s)", value ? "true":"false");
+               /* Copy value */
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
        SLOG(LOG_DEBUG, TAG_STTC, " ");
 
-       return ret;
+       return 0;
 }
 
 int stt_setting_get_silence_detection(bool* value)
 {
        SLOG(LOG_DEBUG, TAG_STTC, "===== Get silence detection");
 
-       int ret = 0;
-
        if (STT_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -472,11 +405,11 @@ int stt_setting_get_silence_detection(bool* value)
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       ret = stt_setting_dbus_request_get_silence_detection(value);
+       int ret = stt_config_mgr_get_silence_detection(value);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get silence detection(%s)", *value ? "true":"false");
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get silence detection(%s)", *value ? "true" : "false");
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -489,8 +422,6 @@ int stt_setting_set_silence_detection(bool value)
 {
        SLOG(LOG_DEBUG, TAG_STTC, "===== Set silence detection");
 
-       int ret = 0;
-
        if (STT_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
                SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -498,11 +429,11 @@ int stt_setting_set_silence_detection(bool value)
                return STT_SETTING_ERROR_INVALID_STATE;
        }
 
-       ret = stt_setting_dbus_request_set_silence_detection(value);
+       int ret = stt_config_mgr_set_silence_detection(value);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set silence detection(%s)", value ? "true":"false");
+               SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set silence detection(%s)", value ? "true" : "false");
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -511,159 +442,44 @@ int stt_setting_set_silence_detection(bool value)
        return ret;
 }
 
-int stt_setting_foreach_engine_settings(stt_setting_engine_setting_cb callback, void* user_data)
+int stt_setting_set_engine_changed_cb(stt_setting_engine_changed_cb callback, void* user_data)
 {
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach engine setting");
-
-       int ret = 0;
-
-       if (STT_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
-               SLOG(LOG_DEBUG, TAG_STTC, "=====");
-               SLOG(LOG_DEBUG, TAG_STTC, " ");
-               return STT_SETTING_ERROR_INVALID_STATE;
-       }
-
        if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_STTC, "=====");
-               SLOG(LOG_DEBUG, TAG_STTC, " ");
-               return STT_SETTING_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = stt_setting_dbus_request_get_engine_setting(callback, user_data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);    
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach engine setting");
-       }
-
-       SLOG(LOG_DEBUG, TAG_STTC, "=====");
-       SLOG(LOG_DEBUG, TAG_STTC, " ");
-
-       return ret;
-}
-
-int stt_setting_set_engine_setting(const char* key, const char* value)
-{
-       SLOG(LOG_DEBUG, TAG_STTC, "===== Set engine setting");
-
-       int ret = 0;
-
-       if (STT_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
-               return STT_SETTING_ERROR_INVALID_STATE;
-       }
-
-       if (NULL == key || NULL == value) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] parameter is NULL");
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
                return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       ret = stt_setting_dbus_request_set_engine_setting(key, value);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR]  Result (%d)", ret);    
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set engine setting(%s)", *value ? "true":"false");
-       }
-
-       SLOG(LOG_DEBUG, TAG_STTC, "=====");
-       SLOG(LOG_DEBUG, TAG_STTC, " ");
+       g_engine_changed_cb = callback;
+       g_engine_changed_user_data = user_data;
 
-       return ret;
+       return STT_SETTING_ERROR_NONE;
 }
 
-int __setting_get_cmd_line(char *file, char *buf) 
+int stt_setting_unset_engine_changed_cb()
 {
-       FILE *fp = NULL;
-       int i;
-
-       fp = fopen(file, "r");
-       if (fp == NULL) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Get command line");
-               return -1;
-       }
-
-       memset(buf, 0, 256);
-       fgets(buf, 256, fp);
-       fclose(fp);
+       g_engine_changed_cb = NULL;
+       g_engine_changed_user_data = NULL;
 
-       return 0;
+       return STT_SETTING_ERROR_NONE;
 }
 
-static bool __stt_setting_is_alive()
+int stt_setting_set_config_changed_cb(stt_setting_config_changed_cb callback, void* user_data)
 {
-       DIR *dir;
-       struct dirent *entry;
-       struct stat filestat;
-       
-       int pid;
-       char cmdLine[256];
-       char tempPath[256];
-
-       dir  = opendir("/proc");
-       if (NULL == dir) {
-               SLOG(LOG_ERROR, TAG_STTC, "process checking is FAILED");
-               return FALSE;
-       }
-
-       while ((entry = readdir(dir)) != NULL) {
-               if (0 != lstat(entry->d_name, &filestat))
-                       continue;
-
-               if (!S_ISDIR(filestat.st_mode))
-                       continue;
-
-               pid = atoi(entry->d_name);
-               if (pid <= 0) continue;
-
-               sprintf(tempPath, "/proc/%d/cmdline", pid);
-               if (0 != __setting_get_cmd_line(tempPath, cmdLine)) {
-                       continue;
-               }
-
-               if ( 0 == strncmp(cmdLine, "[stt-daemon]", strlen("[stt-daemon]")) ||
-                       0 == strncmp(cmdLine, "stt-daemon", strlen("stt-daemon")) ||
-                       0 == strncmp(cmdLine, "/usr/bin/stt-daemon", strlen("/usr/bin/stt-daemon"))) {
-                               SLOG(LOG_DEBUG, TAG_STTC, "stt-daemon is ALIVE !! \n");
-                               closedir(dir);
-                               return TRUE;
-               }
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
+               return STT_SETTING_ERROR_INVALID_PARAMETER;
        }
-       SLOG(LOG_DEBUG, TAG_STTC, "THERE IS NO stt-daemon !! \n");
 
-       closedir(dir);
-       return FALSE;
+       g_config_changed_cb = callback;
+       g_config_changed_user_data = user_data;
 
+       return STT_SETTING_ERROR_NONE;
 }
 
-int __check_setting_stt_daemon()
+int stt_setting_unset_config_changed_cb()
 {
-       if (TRUE == __stt_setting_is_alive()) 
-               return 0;
-       
-       /* fork-exec stt-daemom */
-       int pid = 0, i = 0;
-
-       pid = fork();
-
-       switch(pid) {
-       case -1:
-               SLOG(LOG_DEBUG, TAG_STTC, "Fail to create stt-daemon");
-               break;
-
-       case 0:
-               setsid();
-               for( i = 0 ; i < _NSIG ; i++ )
-                       signal(i, SIG_DFL);
-
-               execl("/usr/bin/stt-daemon", "/usr/bin/stt-daemon", NULL);
-               break;
-
-       default:
-               break;
-       }
-
-       return 0;
-}
+       g_config_changed_cb = NULL;
+       g_config_changed_user_data = NULL;
 
+       return STT_SETTING_ERROR_NONE;
+}
\ No newline at end of file