Add APIs to get list of added payload info
authorAbhay agarwal <ay.agarwal@samsung.com>
Fri, 6 Dec 2019 12:02:41 +0000 (17:32 +0530)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Mon, 30 Dec 2019 07:45:56 +0000 (16:45 +0900)
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
include/user-awareness-private.h
include/user-awareness.h
src/user-awareness-payload.c
test/uat-devices.c
test/uat-payload.c
test/uat-users.c

index 28bcd3e7cfeb6654ed996761a0772a212dbe69af..19ac1b9046e79c1de9d69e2145ee5ff7461d25fa 100644 (file)
@@ -537,6 +537,26 @@ void _ua_get_uam_payload_from_ua(uam_ble_payload_s *uam_payload, ua_payload_info
  */
 ua_payload_info_s* _ua_payload_clone(ua_payload_info_s *org_payload);
 
+/**
+ * @brief Retrieves the payload handle of all the added payloads.
+ * @since_tizen 5.5
+ *
+ * @param[in] foreach_cb Callback function to be invoked with payload handle.
+ * @param[in] user_data The user data to be passed when callback is called.
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UA_ERROR_NONE Successful
+ * @retval #UA_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @exception
+ * @pre
+ * @post
+ *
+ * @see ua_added_payload_cb()
+ */
+int _ua_foreach_added_payload(ua_added_payload_cb foreach_cb,
+               void *user_data);
+
 /**
  * @brief Add a device handle to internal device-list.
  * @since_tizen 5.5
index aad6a2cba154e84ff43c31f360e3e155f49acbd5..98bc85b37e64d6131626d50be0d315cd9d245625 100644 (file)
@@ -3063,6 +3063,51 @@ int ua_payload_add_service(
                ua_payload_h payload_handle,
                ua_service_h service_handle);
 
+/**
+ * @ingroup CAPI_NETWORK_UA_MODULE
+ * @brief Callback to get all payload handles.
+ * @since_tizen 5.5
+ *
+ * @remarks The @a payload_handle should not be released.
+ * @remarks The @a payload_handle can be used only in the callback.
+ *
+ * @param[in] payload_handle The payload handle.
+ * @param[in] user_data User data passed in ua_payload_foreach_added().
+ *
+ * @exception
+ * @pre
+ * @post
+ *
+ * @see ua_payload_foreach_added()
+ */
+typedef bool (*ua_added_payload_cb)(
+               ua_payload_h payload_handle,
+               void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_UA_MODULE
+ * @brief Retrieves the payload handle of all the registered payloads.
+ * @since_tizen 5.5
+ *
+ * @param[in] foreach_cb Callback function to be invoked with payload handle.
+ * @param[in] user_data The user data to be passed when callback is called.
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UA_ERROR_NONE Successful
+ * @retval #UA_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #UA_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #UA_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @exception
+ * @pre
+ * @post
+ *
+ * @see ua_added_payload_cb()
+ */
+int ua_payload_foreach_added(
+               ua_added_payload_cb foreach_cb,
+               void *user_data);
+
 /**
  * @ingroup CAPI_NETWORK_UA_MODULE
  * @brief Gets sensor's status.
index ec0ed4d139cb189387b2eb560360738699a2f242..b4c5973a459f49ab462ada4c706e32a49cf43eb3 100644 (file)
@@ -23,7 +23,7 @@
 #include <user-awareness-private.h>
 #include <user-awareness-util.h>
 
-GSList *ua_payload_list;
+GSList *ua_payloads_list;
 
 int ua_payload_create(ua_payload_h *payload_handle)
 {
@@ -51,7 +51,7 @@ int ua_payload_create(ua_payload_h *payload_handle)
        *payload_handle = (ua_payload_h)payload;
        payload->handle = *payload_handle;
 
-       ua_payload_list = g_slist_append(ua_payload_list, payload);
+       ua_payloads_list = g_slist_append(ua_payloads_list, payload);
 
        FUNC_EXIT;
        return UA_ERROR_NONE;
@@ -77,7 +77,7 @@ int ua_payload_destroy(ua_payload_h handle)
        ua_payload_info_s *payload = (ua_payload_info_s *)handle;
 
        UA_VALIDATE_INPUT_PARAMETER(handle);
-       UA_VALIDATE_HANDLE(handle, ua_payload_list);
+       UA_VALIDATE_HANDLE(handle, ua_payloads_list);
 
        /* Do not remove from list if payload is added to database */
        if (payload->isadded) {
@@ -86,7 +86,7 @@ int ua_payload_destroy(ua_payload_h handle)
                /* LCOV_EXCL_STOP */
        }
 
-       ua_payload_list = g_slist_remove(ua_payload_list, payload);
+       ua_payloads_list = g_slist_remove(ua_payloads_list, payload);
        _ua_free_ua_payload_info_s(payload);
 
        FUNC_EXIT;
@@ -260,7 +260,6 @@ int ua_payload_add_service(ua_payload_h payload_handle,
        return UA_ERROR_NONE;
 }
 
-/*
 ua_payload_info_s* _ua_get_payload_from_uam(uam_ble_payload_s *uam_payload)
 {
        FUNC_ENTRY;
@@ -296,6 +295,86 @@ ua_payload_info_s* _ua_get_payload_from_uam(uam_ble_payload_s *uam_payload)
        return payload;
 }
 
+int _ua_foreach_added_payload(ua_added_payload_cb foreach_cb,
+       void *user_data)
+{
+       FUNC_ENTRY;
+       int i;
+       int ret = UAM_ERROR_NONE;
+       GSList *l;
+       ua_payload_info_s *u;
+       GPtrArray *payload_list = NULL;
+       uam_ble_payload_s *ptr;
+
+       UA_VALIDATE_INPUT_PARAMETER(foreach_cb);
+
+       payload_list = g_ptr_array_new();
+       retv_if(NULL == payload_list, UA_ERROR_OUT_OF_MEMORY);
+
+       ret = _ua_get_error_code(_uam_get_added_payloads(&payload_list));
+       if (UA_ERROR_NONE != ret) {
+               /* LCOV_EXCL_START */
+               UA_ERR("Failed with error: %s(0x%X)",
+                               _ua_get_error_string(ret), ret);
+               g_ptr_array_free(payload_list, TRUE);
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+
+       if (ua_payloads_list) {
+               g_slist_free_full(ua_payloads_list, _ua_free_ua_payload_info_s);
+               ua_payloads_list = NULL;
+       }
+
+       for (i = 0; i < payload_list->len; i++) {
+               ptr = g_ptr_array_index(payload_list, i);
+               if (ptr) {
+                       ua_payload_info_s* payload_info;
+                       payload_info = _ua_get_payload_from_uam(ptr);
+
+                       payload_info->isadded = true;
+                       payload_info->handle = (ua_payload_h)payload_info;
+
+                       ua_payloads_list = g_slist_append(ua_payloads_list, payload_info);
+               } else {
+                       /* LCOV_EXCL_START */
+                       UA_ERR("OPERATION_FAILED(0x%08x)",
+                                       UA_ERROR_OPERATION_FAILED);
+                       ret = UA_ERROR_OPERATION_FAILED;
+                       /* LCOV_EXCL_STOP */
+                       goto done;
+               }
+       }
+
+       for (l = ua_payloads_list; l; l = g_slist_next(l)) {
+               u = (ua_payload_info_s *)l->data;
+
+               if (!foreach_cb(u->handle, user_data))
+                       break;
+       }
+
+done:
+       g_ptr_array_foreach(payload_list, (GFunc)g_free, NULL);
+       g_ptr_array_free(payload_list, TRUE);
+
+       FUNC_EXIT;
+       return ret;
+}
+
+int ua_payload_foreach_added(
+               ua_added_payload_cb foreach_cb,
+               void *user_data)
+{
+       FUNC_ENTRY;
+       UA_VALIDATE_INPUT_PARAMETER(foreach_cb);
+
+       int ret = _ua_foreach_added_payload(foreach_cb, user_data);
+
+       FUNC_EXIT;
+       return ret;
+}
+
+/*
 ua_payload_info_s* _ua_payload_clone(ua_payload_info_s *org_payload)
 {
        FUNC_ENTRY;
@@ -330,8 +409,7 @@ ua_payload_info_s* _ua_payload_clone(ua_payload_info_s *org_payload)
        FUNC_EXIT;
        return payload;
 }
-*/
-/*
+
 int ua_payload_get_primary_key(
                ua_device_h handle,
                char *primary_key)
index be54b56e8115d352ace70419e0ae844a3c17b445..d3db478ed77c72dcd759bd336875688610abab89 100644 (file)
@@ -441,8 +441,7 @@ static int run_ua_device_foreach_added(
 
        uat_clear_device_list();
 
-       ret = ua_device_foreach_added(
-                                       __foreach_added_device_cb, NULL);
+       ret = ua_device_foreach_added(__foreach_added_device_cb, NULL);
 
        msg(" - ua_device_foreach_added() ret: [0x%X] [%s]",
                ret, uat_get_error_str(ret));
@@ -598,4 +597,3 @@ struct menu_data menu_sel_device[] = {
        { "2", "Apply", NULL, uat_select_device, NULL },
        { NULL, NULL, },
 };
-
index fddef8e810531fddb160ab08b828e8c28c71345a..2f7ded182e31e64632da4774263ab9f82442043b 100644 (file)
@@ -21,6 +21,9 @@
 #include <glib.h>
 #include <gio/gio.h>
 
+#include <user-awareness.h>
+
+#include "uat-menu.h"
 #include "uat-common.h"
 
 extern ua_device_h g_device_h; /**< Device handle */
@@ -32,6 +35,25 @@ static char g_payload_device_icon[MENU_DATA_SIZE + 1] = {0,}; /**< payload devic
 static char g_payload_secondary_key[MENU_DATA_SIZE + 1] = {0,}; /**< payload secondary_key for the selected device */
 static char g_payload_device_uid_str[MENU_DATA_SIZE + 1] = {0,}; /**< payload device_uid for the selected device */
 
+GSList *payload_list = NULL; /**< Payload List */
+int idx_payload = 0; /**< Found payload sequence number */
+
+char g_selected_payload_idx[MENU_DATA_SIZE + 1] = {0,}; /** Selected payload id */
+
+static void  ___free_payload(gpointer data)
+{
+       ua_payload_h handle = data;
+       ua_payload_destroy(handle);
+       handle = NULL;
+}
+
+void uat_clear_payload_list(void)
+{
+       g_slist_free_full(payload_list, ___free_payload);
+       payload_list = NULL;
+       idx_payload = 0;
+}
+
 static int run_ua_payload_create(
        MManager *mm, struct menu_data *menu)
 {
@@ -196,6 +218,100 @@ static int run_ua_payload_add_service(
        return RET_SUCCESS;
 }
 
+static bool __foreach_added_payload_cb(
+       ua_payload_h payload_handle, void *user_data)
+{
+/*
+       int ret = UA_ERROR_NONE;
+       ua_user_h handle = NULL;
+       char *account = NULL;
+       char *name = NULL;
+       unsigned long long last_seen = 0;
+
+       if (!user_handle) {
+               msgr("user_handle is NULL");
+               return true;
+       }
+
+       ret = ua_user_clone(&handle, user_handle);
+       if (UA_ERROR_NONE != ret) {
+               msgr("ua_user_clone() result: [0x%X] [%s]",
+                       ret, uat_get_error_str(ret));
+       }
+
+       user_list = g_slist_append(user_list, handle);
+       idx_user++;
+
+       ret = ua_user_get_account(handle, &account);
+       if (UA_ERROR_NONE == ret) {
+               msglr("[%d]", idx_user);
+               msglr("User account info %s", account);
+               g_free(account);
+       }
+
+       ret = ua_user_get_name(handle, &name);
+       if (UA_ERROR_NONE == ret) {
+               msglr("User Name : %s", name);
+               g_free(name);
+       }
+
+       ret = ua_user_get_last_presence(handle, &last_seen);
+       if (UA_ERROR_NONE == ret)
+               msglr("last present at %llu", last_seen);
+*/
+
+       return true;
+}
+
+static int run_ua_payload_foreach_added(
+       MManager *mm, struct menu_data *menu)
+{
+       int ret = UA_ERROR_NONE;
+
+       msg("ua_payload_foreach_added");
+
+       uat_clear_payload_list();
+
+       ret = ua_payload_foreach_added(__foreach_added_payload_cb, NULL);
+
+       msg(" - ua_payload_foreach_added() ret: [0x%X] [%s]",
+               ret, uat_get_error_str(ret));
+
+       return RET_SUCCESS;
+}
+
+int uat_select_payload(MManager *mm, struct menu_data *menu)
+{
+/*
+       GSList *iter = user_list;
+
+       int id = 0;
+       int selected_id = 0;
+
+       if (strlen(g_selected_user_idx))
+               selected_id = (unsigned char)strtol(g_selected_user_idx, NULL, 10);
+
+       if (selected_id <= 0) {
+               msg("Please select user first");
+               return RET_SUCCESS;
+       }
+
+       while (NULL != iter) {
+               GSList *next = iter->next;
+               ua_user_h *handle = iter->data;
+               if (handle && ++id == selected_id) {
+                       g_user_h = handle; // Make selected user as a current one
+                       update_user_info(); // Update user info.
+                       msg("Select user done");
+                       return RET_SUCCESS;
+               }
+               iter = next;
+       }
+*/
+
+       return RET_SUCCESS;
+}
+
 static struct menu_data menu_ua_payload_set_primary_key[] = {
        { "1", "Primary Key (0 to 255)",
                NULL, NULL, g_payload_primary_key },
@@ -213,7 +329,7 @@ static struct menu_data menu_ua_payload_set_device_icon[] = {
 };
 
 static struct menu_data menu_ua_payload_set_secondary_key[] = {
-       { "1", "Purpose (0 to 255)",
+       { "1", "Secondary Key (0 to 255)",
                NULL, NULL, g_payload_secondary_key },
        { "2", "run", NULL,
                run_ua_payload_set_secondary_key, NULL },
@@ -232,6 +348,13 @@ static struct menu_data menu_ua_payload_set_device_uid[] = {
        { NULL, NULL, },
 };
 
+struct menu_data menu_sel_added_payload[] = {
+       { "1", "Payload list", NULL,
+               run_ua_payload_foreach_added, g_selected_payload_idx},
+       { "2", "Apply", NULL, uat_select_payload, NULL },
+       { NULL, NULL, },
+};
+
 struct menu_data menu_ua_payloads[] = {
        { "1", "ua_payload_create",
                NULL, run_ua_payload_create, NULL },
@@ -249,5 +372,13 @@ struct menu_data menu_ua_payloads[] = {
                NULL, run_ua_payload_add, NULL },
        { "8", ANSI_COLOR_LIGHTGREEN "ua_payload_add_service" ANSI_COLOR_NORMAL,
                NULL, run_ua_payload_add_service, NULL },
+       { "9", ANSI_COLOR_LIGHTMAGENTA "ua_payload_foreach_added" ANSI_COLOR_NORMAL,
+               menu_sel_added_payload, NULL, NULL },
        { NULL, NULL, },
 };
+
+//struct menu_data menu_sel_payload[] = {
+//     { "1", "User list", NULL, run_ua_payload_foreach_added, g_selected_payload_idx},
+//     { "2", "Apply", NULL, uat_select_payload , NULL },
+//     { NULL, NULL, },
+//};
index e1d5a3777682ff77e443efbf5e507cd5c74c8d8a..fb2ed36e15dc059d03796ee81f3a25b2f70c6f86 100644 (file)
@@ -42,7 +42,7 @@ extern char g_mac_addr_str[MENU_DATA_SIZE + 1]; /**< MAC of the selected device
 extern char g_service_str[MENU_DATA_SIZE + 1]; /**< Service name */
 
 GSList *user_list = NULL; /**< User List */
-int idx_user = 0; /**< Found device sequence number */
+int idx_user = 0; /**< Found user sequence number */
 
 extern char g_selected_device_idx[MENU_DATA_SIZE + 1]; /**< Selected device id */
 extern GSList *g_device_list; /**< Device List */
@@ -712,4 +712,3 @@ struct menu_data menu_sel_user[] = {
        { "2", "Apply", NULL, uat_select_user , NULL },
        { NULL, NULL, },
 };
-