Add json provider in IU 65/281565/1
authorsooyeon <sooyeon.kim@samsung.com>
Wed, 14 Sep 2022 08:37:51 +0000 (17:37 +0900)
committerTizen AI <ai.tzn.sec@samsung.com>
Tue, 20 Sep 2022 03:06:22 +0000 (12:06 +0900)
Change-Id: I8f12b90e58e7a99bf7713395680fd8b4681e7bd5
Signed-off-by: sooyeon <sooyeon.kim@samsung.com>
src/mmimgr/iu/json_provider.cpp [new file with mode: 0644]
src/mmimgr/iu/json_provider.h [new file with mode: 0644]
src/mmimgr/meson.build

diff --git a/src/mmimgr/iu/json_provider.cpp b/src/mmimgr/iu/json_provider.cpp
new file mode 100644 (file)
index 0000000..b003c68
--- /dev/null
@@ -0,0 +1,165 @@
+#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;
+}
diff --git a/src/mmimgr/iu/json_provider.h b/src/mmimgr/iu/json_provider.h
new file mode 100644 (file)
index 0000000..00c6c69
--- /dev/null
@@ -0,0 +1,66 @@
+#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
index 9011afb5b12b41aa93155d936076135534f89a3e..17590fab6039baafe11518e911650208a8d99fd9 100644 (file)
@@ -36,6 +36,8 @@ mmimgr_srcs = [
        'iu/StringUtil.h',
        'iu/CommandManager.cpp',
        'iu/CommandManager.h',
+       'iu/json_provider.cpp',
+       'iu/json_provider.h'
        ]
 
 install_headers(