--- /dev/null
+#include "json_provider.h"
+
+#include <stdint.h>
+#include <glib.h>
+
+
+JsonProvider::JsonProvider()
+{
+ if (!mRootObj)
+ mRootObj = json_object_new();
+ if (!mOutputArr)
+ mOutputArr = json_array_new();
+
+ json_object_set_array_member(mRootObj, MMI_KEY_OUTPUT_EVENT, mOutputArr);
+ mNumClickableObj = 0;
+}
+JsonProvider::~JsonProvider()
+{
+ if (mAsrPartialObj) {
+ json_object_unref(mAsrPartialObj);
+ mAsrPartialObj = nullptr;
+ }
+ if (mAsrFinalObj) {
+ json_object_unref(mAsrFinalObj);
+ mAsrFinalObj = nullptr;
+ }
+
+ GList* uiList = json_array_get_elements(mUiClckbleArr);
+ GList* iter;
+ JsonObject* data;
+ if (g_list_length(uiList) > 0) {
+ iter = g_list_first(uiList);
+
+ while(NULL != iter) {
+ data = (JsonObject*)iter->data;
+ if (data) {
+ json_object_unref(data);
+ data = nullptr;
+ }
+ iter = g_list_next(iter);
+ }
+ }
+ if (mUiClckbleArr) {
+ json_array_unref(mUiClckbleArr);
+ mUiClckbleArr = nullptr;
+ }
+ if (mUiObjObj) {
+ json_object_unref(mUiObjObj);
+ mUiObjObj = nullptr;
+ }
+ if (mOutputArr) {
+ json_array_unref(mOutputArr);
+ mOutputArr = nullptr;
+ }
+ if (mRootObj) {
+ json_object_unref(mRootObj);
+ mRootObj = nullptr;
+ }
+}
+
+void JsonProvider::setInputEvent(const char* value)
+{
+ json_object_set_string_member(mRootObj, MMI_KEY_INPUT_EVENT, value);
+}
+
+void JsonProvider::setOutputEvent(const char* value)
+{
+ json_array_add_string_element(mOutputArr, value);
+}
+
+void JsonProvider::setAsrPartialResult(const char* result, int timeStamp)
+{
+ if (!mAsrPartialObj)
+ mAsrPartialObj = json_object_new();
+
+ json_object_set_object_member(mRootObj, MMI_KEY_ASR_PARTIAL_RESULT, mAsrPartialObj);
+ json_object_set_string_member(mAsrPartialObj, MMI_KEY_RESULT, result);
+ json_object_set_int_member(mAsrPartialObj, MMI_KEY_TIMESTAMP, timeStamp);
+}
+
+void JsonProvider::setAsrFinalResult(const char* result, int timeStamp)
+{
+ if (!mAsrFinalObj)
+ mAsrFinalObj = json_object_new();
+
+ json_object_set_object_member(mRootObj, MMI_KEY_ASR_FINAL_RESULT, mAsrFinalObj);
+ json_object_set_string_member(mAsrFinalObj, MMI_KEY_RESULT, result);
+ json_object_set_int_member(mAsrFinalObj, MMI_KEY_TIMESTAMP, timeStamp);
+}
+
+void JsonProvider::setUiObject(const char* resultType, const char* fgApp, const char* tooltipType, int numClickableObj, int timeStamp)
+{
+ if (!mUiObjObj)
+ mUiObjObj = json_object_new();
+
+ json_object_set_object_member(mRootObj, MMI_KEY_UI_OBJECT, mUiObjObj);
+ json_object_set_string_member(mUiObjObj, MMI_KEY_UI_OBJECT_RESULT_TYPE, resultType);
+ json_object_set_string_member(mUiObjObj, MMI_KEY_FOREGROUND_APP, fgApp);
+ json_object_set_string_member(mUiObjObj, MMI_KEY_TOOLTIP_TYPE, tooltipType);
+ json_object_set_int_member(mUiObjObj, MMI_KEY_NUM_OF_CLICKABLE_OBJECTS, numClickableObj);
+ json_object_set_int_member(mUiObjObj, MMI_KEY_TIMESTAMP, timeStamp);
+
+ mNumClickableObj = numClickableObj;
+
+}
+
+void JsonProvider::setInfoClickableObject(int idx, int x, int y, int w, int h, const char* text)
+{
+ if (!mUiClckbleArr) {
+ mUiClckbleArr = json_array_new();
+ json_object_set_array_member(mUiObjObj, MMI_KEY_OUTPUT_EVENT, mUiClckbleArr);
+ }
+
+ JsonObject* obj = json_object_new();
+ json_array_add_object_element(mUiClckbleArr, obj);
+ json_object_set_int_member(obj, MMI_KEY_INDEX, idx);
+ json_object_set_int_member(obj, MMI_KEY_X, x);
+ json_object_set_int_member(obj, MMI_KEY_Y, y);
+ json_object_set_int_member(obj, MMI_KEY_WIDTH, w);
+ json_object_set_int_member(obj, MMI_KEY_HEIGHT, h);
+ json_object_set_string_member(obj, MMI_KEY_TEXT, text);
+}
+
+std::string JsonProvider::jsonToString(void)
+{
+ // LOGD("");
+
+ std::string retv = std::string("");
+ if (!mRootObj) {
+ // LOGE("[ANLTCS ERROR] There is no json to convert");
+ return retv;
+ }
+
+ char *result = nullptr;
+
+ JsonNode *jsonNode = json_node_new(JSON_NODE_OBJECT);
+ if (!jsonNode) {
+ // LOGE("[ANLTCS ERROR] Failed to create Json Nod");
+ return retv;
+ }
+
+ json_node_set_object(jsonNode, mRootObj);
+ JsonGenerator *jsonGenerator = json_generator_new();
+ if (!jsonGenerator) {
+ // LOGE("Failed to get json generator");
+ goto errorHandle;
+ }
+ json_generator_set_root(jsonGenerator, jsonNode);
+
+ result = (char *)json_generator_to_data(jsonGenerator, NULL);
+ if (!result) {
+ // LOGE("Unable to json_generator_to_data");
+ goto errorHandle;
+ }
+
+ retv = string(result);
+ // LOGD("retv : [%s]", retv.c_str());
+
+errorHandle:
+ if (jsonNode) { json_node_free(jsonNode); jsonNode = nullptr; }
+ if (jsonGenerator) { g_object_unref(jsonGenerator); jsonGenerator = nullptr; }
+ if (result) { free (result); result = nullptr; }
+
+ return retv;
+}
--- /dev/null
+#ifndef __JSON_PROVIDER_H__
+#define __JSON_PROVIDER_H__
+
+#include <json-glib/json-glib.h>
+#include <string>
+
+
+using namespace std;
+
+#define MMI_KEY_INPUT_EVENT "input-event"
+#define MMI_KEY_VOICE_TOUCH "voice-touch"
+#define MMI_KEY_VOICE_RECOGNITION "voice-recognition"
+#define MMI_KEY_SCREEN_KEY "screen-key"
+#define MMI_KEY_OUTPUT_EVENT "output-event" // changed result
+#define MMI_KEY_ASR_PARTIAL_RESULT "asr-partial-result"
+#define MMI_KEY_ASR_FINAL_RESULT "asr-final-result"
+#define MMI_KEY_RESULT "result"
+#define MMI_KEY_TIMESTAMP "timestamp"
+#define MMI_KEY_UI_OBJECT "ui-object"
+#define MMI_KEY_UI_OBJECT_RESULT_TYPE "ui-object-result-type"
+#define MMI_KEY_SHOW_TOOLTIPS "show-tooltips"
+#define MMI_KEY_SHOW_GRIDS "show-grids"
+#define MMI_KEY_CLICKED_OBJECT "clicked-object"
+#define MMI_KEY_FOREGROUND_APP "foreground-app"
+#define MMI_KEY_TOOLTIP_TYPE "tooltip-type"
+#define MMI_KEY_NUMBER "number"
+#define MMI_KEY_TEXT "text"
+#define MMI_KEY_NUM_OF_CLICKABLE_OBJECTS "num-of-clickable-objects"
+#define MMI_KEY_INFO_OF_CLICKABLE_OBJECTS "info-of-clickable-objects"
+#define MMI_KEY_INDEX "idx"
+#define MMI_KEY_X "x"
+#define MMI_KEY_Y "y"
+#define MMI_KEY_WIDTH "w"
+#define MMI_KEY_HEIGHT "h"
+#define MMI_KEY_GRID_DEPTH "grid-depth"
+
+
+class JsonProvider {
+public:
+ JsonProvider();
+ ~JsonProvider();
+
+ void setInputEvent(const char* value); // "input-event", object
+ void setOutputEvent(const char* value); // "output-event", array
+
+ void setAsrPartialResult(const char* result, int timeStamp); // "asr-partial-result", object
+ void setAsrFinalResult(const char* result, int timeStamp); // "asr-final-result", object
+
+ void setUiObject(const char* resultType, const char* fgApp, const char* tooltipType, int numClickableObj, int timeStamp); // "ui-object", object
+ void setInfoClickableObject(int idx, int x, int y, int w, int h, const char* text);
+
+ std::string jsonToString(void);
+
+private:
+ JsonObject* mRootObj = nullptr;
+
+ JsonArray* mOutputArr = nullptr;
+ JsonObject* mAsrPartialObj = nullptr;
+ JsonObject* mAsrFinalObj = nullptr;
+ JsonObject* mUiObjObj = nullptr;
+ JsonArray* mUiClckbleArr = nullptr;
+ int mNumClickableObj;
+};
+
+
+#endif /* __JSON_PROVIDER_H__ */
\ No newline at end of file