*/
#include "voicecontrol/voicecontrol_instance.h"
-#include "voicecontrol/voicecontrol_client.h"
-#include "voicecontrol/voicecontrol_util.h"
#include <voice_control.h>
#include <voice_control_internal.h>
+#include "voicecontrol/voicecontrol_client.h"
+#include "voicecontrol/voicecontrol_util.h"
#include <functional>
-#include "common/picojson.h"
#include "common/logger.h"
+#include "common/picojson.h"
#include "common/platform_exception.h"
#include "common/scope_exit.h"
#include "common/tools.h"
namespace {
// The privileges that are required in Voicecontrol API
const std::string kPrivilegeVoiceControl = "http://tizen.org/privilege/recorder";
-
-void ReplyAsync(VoiceControlInstance* instance, const std::string& listenerId, bool isSuccess, picojson::object& param) {
- ScopeLogger();
- param["listenerId"] = picojson::value(listenerId);
- param["status"] = picojson::value(isSuccess ? "success" : "error");
-
- /* All callback functions are called by voice control framework */
- /* Send result from callback to javascript */
- picojson::value result = picojson::value(param);
-
- instance->PostMessage(instance, result.serialize().c_str());
-}
-
-
-
-/* Define callback functions for voice control */
-void VcResultCb(vc_result_event_e event, vc_cmd_list_h cmd_list, const char* result, void *user_data) {
- ScopeLogger();
- VoiceControlInstance *instance = static_cast<VoiceControlInstance *>(user_data);
-
- if (nullptr != instance && VoiceControlClient::GetInstance()->IsResultListenerSet()) {
- LoggerD("VcResultCb");
- picojson::object param = picojson::object();
- param["event"] = picojson::value(std::string(((event == VC_RESULT_EVENT_RESULT_SUCCESS) ? "SUCCESS" : "FAILURE")));
-
- int len = 0;
- int ret = VC_ERROR_NONE;
-
- ret = vc_cmd_list_get_count(cmd_list, &len);
- if (VC_ERROR_NONE != ret) {
- LoggerE("Fail to get the count of the result list");
- return;
- }
-
- picojson::array& value_vector = param.insert(std::make_pair("list",
- picojson::value(picojson::array(len)))).first->second.get<picojson::array>();
-
- ret = vc_cmd_list_first(cmd_list);
- for (auto i = 0; VC_ERROR_NONE == ret && i < len; i++) {
- LoggerD("Current (%d), Count (%d)", i, len);
- vc_cmd_h vc_command = nullptr;
- char* command = nullptr;
- SCOPE_EXIT {
- free(command);
- };
-
- ret = vc_cmd_list_get_current(cmd_list, &vc_command);
- if (VC_ERROR_NONE != ret) {
- break;
- }
- ret = vc_cmd_get_command(vc_command, &command);
- if (VC_ERROR_NONE != ret) {
- break;
- }
-
- if (nullptr != command) {
- LoggerD("Command (%s)", command);
- value_vector[i] = picojson::value(command);
- }
-
- ret = vc_cmd_list_next(cmd_list);
- }
-
- param["results"] = picojson::value(std::string(result));
-
- ReplyAsync(instance, ON_RESULT, true, param);
- }
-}
-
-void VcLanguageChangedCb(const char* previous, const char* current, void* user_data) {
- ScopeLogger();
- VoiceControlInstance *instance = static_cast<VoiceControlInstance *>(user_data);
- if (nullptr != instance && VoiceControlClient::GetInstance()->IsLanguageChangedListenerSet()) {
- LoggerD("VcLanguageChangedCb");
- picojson::object param = picojson::object();
- param["previous"] = picojson::value(std::string(previous));
- param["current"] = picojson::value(std::string(current));
-
- ReplyAsync(instance, ON_LANG, true, param);
- }
-}
-} // namespace
+} // namespace
using namespace common;
using namespace extension::voicecontrol;
-VoiceControlInstance::VoiceControlInstance() {
+VoiceControlInstance::VoiceControlInstance() : voice_control_client() {
using namespace std::placeholders;
- #define REGISTER_SYNC(c,x) \
- RegisterSyncHandler(c, std::bind(&VoiceControlInstance::x, this, _1, _2));
+#define REGISTER_SYNC(c, x) \
+ RegisterSyncHandler(c, std::bind(&VoiceControlInstance::x, this, _1, _2));
REGISTER_SYNC("VoiceControlClient_getCurrentLanguage", GetCurrentLanguage);
REGISTER_SYNC("VoiceControlClient_setCommandList", SetCommandList);
REGISTER_SYNC("VoiceControlClient_unsetCommandList", UnsetCommandList);
REGISTER_SYNC("VoiceControlClient_removeLanguageChangeListener", RemoveLanguageChangeListener);
REGISTER_SYNC("VoiceControlClient_release", Release);
REGISTER_SYNC("VoiceControlClientManager_getVoiceControlClient", GetVoiceControlClient);
- #undef REGISTER_SYNC
+#undef REGISTER_SYNC
}
VoiceControlInstance::~VoiceControlInstance() {
}
}
-#define CHECK_EXIST(args, name, out) \
- if (!args.contains(name)) {\
- ReportError(TypeMismatchException(name + " is required argument"), out);\
- return;\
+#define CHECK_EXIST(args, name, out) \
+ if (!args.contains(name)) { \
+ ReportError(TypeMismatchException(name + " is required argument"), out); \
+ return; \
}
-void VoiceControlInstance::GetVoiceControlClient(const picojson::value& args, picojson::object& out) {
+void VoiceControlInstance::GetVoiceControlClient(const picojson::value& args,
+ picojson::object& out) {
ScopeLogger();
CHECK_PRIVILEGE_ACCESS(kPrivilegeVoiceControl, &out);
}
ret = vc_prepare_sync();
- if (VC_ERROR_NONE != ret) {
+ if (VC_ERROR_NONE != ret) {
LogAndReportError(MakeErrorObject(ret), &out);
return;
}
ReportSuccess(out);
}
-
void VoiceControlInstance::Release(const picojson::value& args, picojson::object& out) {
ScopeLogger();
int ret = VC_ERROR_NONE;
ScopeLogger();
std::string language;
- common::PlatformResult result = VoiceControlClient::GetInstance()->GetCurrentLanguage(&language);
+ common::PlatformResult result = voice_control_client.GetCurrentLanguage(&language);
if (result.IsSuccess()) {
ReportSuccess(picojson::value(language), out);
CHECK_EXIST(args, TYPE, out)
CHECK_EXIST(args, LIST, out)
- std::string type = args.get(TYPE).get<std::string>();
+ const std::string& type = args.get(TYPE).get<std::string>();
std::vector<picojson::value> list = args.get(LIST).get<picojson::array>();
- common::PlatformResult result = VoiceControlClient::GetInstance()->SetCommandList(list, type);
+ common::PlatformResult result = voice_control_client.SetCommandList(list, type);
if (result.IsSuccess()) {
ReportSuccess(out);
CHECK_EXIST(args, TYPE, out)
- std::string type = args.get(TYPE).get<std::string>();
+ const std::string& type = args.get(TYPE).get<std::string>();
- common::PlatformResult result = VoiceControlClient::GetInstance()->UnsetCommandList(type);
+ common::PlatformResult result = voice_control_client.UnsetCommandList(type);
if (result.IsSuccess()) {
ReportSuccess(out);
void VoiceControlInstance::AddResultListener(const picojson::value& args, picojson::object& out) {
ScopeLogger();
- common::PlatformResult result = VoiceControlClient::GetInstance()->AddResultListener();
+ common::PlatformResult result = voice_control_client.AddResultListener();
if (result.IsSuccess()) {
ReportSuccess(out);
}
}
-void VoiceControlInstance::RemoveResultListener(const picojson::value& args, picojson::object& out) {
+void VoiceControlInstance::RemoveResultListener(const picojson::value& args,
+ picojson::object& out) {
ScopeLogger();
- common::PlatformResult result = VoiceControlClient::GetInstance()->RemoveResultListener();
+ common::PlatformResult result = voice_control_client.RemoveResultListener();
if (result.IsSuccess()) {
ReportSuccess(out);
}
}
-void VoiceControlInstance::AddLanguageChangeListener(const picojson::value& args, picojson::object& out) {
+void VoiceControlInstance::AddLanguageChangeListener(const picojson::value& args,
+ picojson::object& out) {
ScopeLogger();
- common::PlatformResult result = VoiceControlClient::GetInstance()->AddLanguageChangeListener();
+ common::PlatformResult result = voice_control_client.AddLanguageChangeListener();
if (result.IsSuccess()) {
ReportSuccess(out);
}
}
-void VoiceControlInstance::RemoveLanguageChangeListener(const picojson::value& args, picojson::object& out) {
+void VoiceControlInstance::RemoveLanguageChangeListener(const picojson::value& args,
+ picojson::object& out) {
ScopeLogger();
- common::PlatformResult result = VoiceControlClient::GetInstance()->RemoveLanguageChangeListener();
+ common::PlatformResult result = voice_control_client.RemoveLanguageChangeListener();
if (result.IsSuccess()) {
ReportSuccess(out);
}
}
+void VoiceControlInstance::ReplyAsync(VoiceControlInstance* instance, const std::string& listenerId,
+ bool isSuccess, picojson::object& param) {
+ ScopeLogger();
+ param["listenerId"] = picojson::value(listenerId);
+ param["status"] = picojson::value(isSuccess ? "success" : "error");
+
+ /* All callback functions are called by voice control framework */
+ /* Send result from callback to javascript */
+ picojson::value result = picojson::value(param);
+
+ instance->PostMessage(instance, result.serialize().c_str());
+}
+
+/* Define callback functions for voice control */
+void VoiceControlInstance::VcResultCb(vc_result_event_e event, vc_cmd_list_h cmd_list,
+ const char* result, void* user_data) {
+ ScopeLogger();
+ VoiceControlInstance* instance = static_cast<VoiceControlInstance*>(user_data);
+
+ if (nullptr != instance && instance->voice_control_client.IsResultListenerSet()) {
+ LoggerD("VcResultCb");
+ picojson::object param = picojson::object();
+ param["event"] =
+ picojson::value(((event == VC_RESULT_EVENT_RESULT_SUCCESS) ? "SUCCESS" : "FAILURE"));
+
+ int len = 0;
+ int ret = VC_ERROR_NONE;
+
+ ret = vc_cmd_list_get_count(cmd_list, &len);
+ if (VC_ERROR_NONE != ret) {
+ LoggerE("Fail to get the count of the result list");
+ return;
+ }
+
+ ret = vc_cmd_list_first(cmd_list);
+ if (VC_ERROR_NONE != ret) {
+ LoggerE("Fail to get the first element of the result list");
+ }
+
+ picojson::array& value_vector =
+ param.insert(std::make_pair("list", picojson::value(picojson::array(len))))
+ .first->second.get<picojson::array>();
+ param["results"] = picojson::value(result);
+
+ for (int i = 0; VC_ERROR_NONE == ret && i < len; i++) {
+ LoggerD("Current (%d), Count (%d)", i, len);
+ vc_cmd_h vc_command = nullptr;
+ char* command = nullptr;
+ SCOPE_EXIT {
+ free(command);
+ };
+
+ ret = vc_cmd_list_get_current(cmd_list, &vc_command);
+ if (VC_ERROR_NONE != ret) {
+ break;
+ }
+
+ ret = vc_cmd_get_command(vc_command, &command);
+ if (VC_ERROR_NONE != ret) {
+ break;
+ }
+
+ if (nullptr != command) {
+ LoggerD("Command (%s)", command);
+ value_vector[i] = picojson::value(command);
+ }
+
+ ret = vc_cmd_list_next(cmd_list);
+ }
+
+ ReplyAsync(instance, ON_RESULT, true, param);
+ }
+}
+
+void VoiceControlInstance::VcLanguageChangedCb(const char* previous, const char* current,
+ void* user_data) {
+ ScopeLogger();
+ VoiceControlInstance* instance = static_cast<VoiceControlInstance*>(user_data);
+ if (nullptr != instance && instance->voice_control_client.IsLanguageChangedListenerSet()) {
+ LoggerD("VcLanguageChangedCb");
+ picojson::object param = picojson::object();
+ param["previous"] = picojson::value(previous);
+ param["current"] = picojson::value(current);
+
+ ReplyAsync(instance, ON_LANG, true, param);
+ }
+}
+
#undef CHECK_EXIST
-} // namespace voicecontrol
-} // namespace extension
+} // namespace voicecontrol
+} // namespace extension
namespace voicecontrol {
namespace {
- /* Error message text */
- const std::string NO_ERROR = "No error";
- const std::string INVALID_PARAMETER = "Invalid parameter!";
- const std::string OUT_OF_MEMORY = "Out of memory!";
- const std::string OPERATION_FAILED = "Operation failed!";
- const std::string PERMISSION_DENIED = "Permission denied!";
- const std::string NOT_SUPPORTED = "Not supported!";
-
- /* Parameter name */
- const std::string CALLBACK_ID = "callbackId";
- const std::string TYPE = "type";
- const std::string LIST = "list";
- const std::string COMMAND = "command";
-
- /* Voice control command type */
- const std::string FOREGROUND = "FOREGROUND";
-
- /* Listener types on javascript */
- const std::string ON_RESULT = "onresult";
- const std::string ON_LANG = "onlanguagechanged";
+/* Error message text */
+const std::string NO_ERROR = "No error";
+const std::string INVALID_PARAMETER = "Invalid parameter!";
+const std::string OUT_OF_MEMORY = "Out of memory!";
+const std::string OPERATION_FAILED = "Operation failed!";
+const std::string PERMISSION_DENIED = "Permission denied!";
+const std::string NOT_SUPPORTED = "Not supported!";
+
+/* Parameter name */
+const std::string CALLBACK_ID = "callbackId";
+const std::string TYPE = "type";
+const std::string LIST = "list";
+const std::string COMMAND = "command";
+
+/* Voice control command type */
+const std::string FOREGROUND = "FOREGROUND";
+
+/* Listener types on javascript */
+const std::string ON_RESULT = "onresult";
+const std::string ON_LANG = "onlanguagechanged";
}
- const std::string& MakeErrorMessage(const int ret);
- common::PlatformResult MakeErrorObject(const int ret);
+const std::string& MakeErrorMessage(const int ret);
+common::PlatformResult MakeErrorObject(const int ret);
+int VcConvertCmdType(const std::string& type);
-} // namespace voicecontrol
-} // namespace extension
+} // namespace voicecontrol
+} // namespace extension
-#endif // VOICECONTROL_VOICECONTROL_UTIL_H_
\ No newline at end of file
+#endif // VOICECONTROL_VOICECONTROL_UTIL_H_
\ No newline at end of file