Update sensor handle list for user callback accepted/tizen/unified/20191011.101528 submit/tizen/20191011.062256
authorAbhay Agarwal <ay.agarwal@samsung.com>
Fri, 11 Oct 2019 02:29:50 +0000 (11:29 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 11 Oct 2019 06:09:11 +0000 (15:09 +0900)
Provide handle of sensors which are also present in AND/OR condition
This patch also fix AND/OR condition when only one condition is applied

Change-Id: I8ca7299c5eaffffb4f07d230626c1a5cdd1df50c
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
packaging/capi-network-ua.spec
src/user-awareness-monitors.c

index 5325c952868b73f5cfb3a1782b47a1b009ee2314..b3f6185dffd8279dfeaa61d2137b6e440b67e58e 100644 (file)
@@ -1,6 +1,6 @@
 Name: capi-network-ua
 Summary: User Awareness Framework CAPI
-Version: 0.11.5
+Version: 0.11.6
 Release: 1
 License: Apache-2.0
 Source0: %{name}-%{version}.tar.gz
index 2453054832465110dabe87a021471e7802e7cc75..2e9cd3a2c2fbc75b4b96900c7499b3dd43c8e2e7 100644 (file)
@@ -238,7 +238,7 @@ static gboolean __ua_monitor_check_presence_and_or_condition(ua_monitor_s *monit
                        or_condition ? "true" : "false");
 
        if (monitor->presence_bitmask_and == 0 || monitor->presence_bitmask_or == 0)
-               condition_result = monitor->presence_bitmask_and ? or_condition : and_condition;
+               condition_result = monitor->presence_bitmask_and ? and_condition : or_condition;
        else if (monitor->presence_conjunction == UA_OR_OPERATION)
                condition_result = and_condition || or_condition;
        else
@@ -293,10 +293,6 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
        env_bitmask = monitor->presence_detected_bitmask
                        & (UA_SENSOR_MOTION | UA_SENSOR_LIGHT);
 
-       /** Get sensor list*/
-       sensors = ua_sensor_get_sensor_handle_list(
-               monitor->presence_detected_bitmask & (user_state->sensor_bitmask | env_bitmask));
-
        /**
         * Filter the list of found_devices according to sensors mentioned in
         * AND/OR conditions.
@@ -316,6 +312,11 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
                        devices = g_slist_prepend(devices, dev);
        }
 
+       /** Get sensor list*/
+       sensors = ua_sensor_get_sensor_handle_list(
+               monitor->presence_detected_bitmask & (user_state->sensor_bitmask | env_bitmask)
+               & filter_bitmask);
+
        ((ua_presence_user_detected_cb)monitor->presence_user_cb.callback)(
                                        UA_ERROR_NONE, monitor, user_handle,
                                        devices, sensors,
@@ -336,6 +337,7 @@ static void __ua_monitor_send_env_user_presence_cb(ua_monitor_s *monitor)
        FUNC_ENTRY;
        GSList *sensors = 0;
        gboolean condition_result = 0;
+       unsigned int filter_bitmask = 0;
 
        if (monitor->env_user_cb_sent) {
                UA_DBG("Environmental User presence cb already sent");
@@ -352,7 +354,10 @@ static void __ua_monitor_send_env_user_presence_cb(ua_monitor_s *monitor)
        }
 
        /** Get sensor list*/
-       sensors = ua_sensor_get_sensor_handle_list(monitor->presence_detected_bitmask);
+       filter_bitmask =
+                       monitor->presence_bitmask_and | monitor->presence_bitmask_or;
+       sensors = ua_sensor_get_sensor_handle_list(monitor->presence_detected_bitmask
+               & filter_bitmask);
 
        ((ua_presence_user_detected_cb)monitor->presence_user_cb.callback)(
                                        UA_ERROR_NONE, monitor, NULL,
@@ -525,6 +530,7 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor,
 {
        FUNC_ENTRY;
        unsigned int env_absence_bitmask = 0;
+       unsigned int filter_bitmask = 0;
        unsigned int user_sensor_bitmask = user_state->sensor_bitmask;
        gboolean and_condition = 0;
        gboolean or_condition = 0;
@@ -571,7 +577,7 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor,
                        or_condition ? "true" : "false");
 
        if (monitor->absence_bitmask_and == 0 || monitor->absence_bitmask_or == 0)
-               condition_result = monitor->absence_bitmask_and ? or_condition : and_condition;
+               condition_result = monitor->absence_bitmask_and ? and_condition : or_condition;
        else if (monitor->absence_conjunction == UA_OR_OPERATION)
                condition_result = and_condition || or_condition;
        else
@@ -584,8 +590,11 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor,
        }
 
        /** Get sensor list*/
+       filter_bitmask =
+                       monitor->absence_bitmask_and | monitor->absence_bitmask_or;
        sensors = ua_sensor_get_sensor_handle_list(
-               monitor->absence_detected_bitmask & (user_sensor_bitmask | env_absence_bitmask));
+               monitor->absence_detected_bitmask & (user_sensor_bitmask | env_absence_bitmask)
+               & filter_bitmask);
 
        ((ua_absence_user_detected_cb)monitor->absence_user_cb.callback)(
                                        UA_ERROR_NONE, monitor, user_handle, sensors,