Introduce invalid area 63/270263/2
authorShinwoo Kim <cinoo.kim@samsung.com>
Thu, 27 Jan 2022 07:42:15 +0000 (16:42 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Thu, 27 Jan 2022 07:52:33 +0000 (16:52 +0900)
This patch absorbs the forked git commit below.
https://github.sec.samsung.net/Tizen-DA/e-mod-tizen-screen-reader/commit/aae916a292f2c36f91812a5d3da87fbd04f49904

Above commit and forked git could be removed by this patch introducing
the invalid area.

To make invalid area have size, we need following change.

e-tizen-data/default/config/tizen-mobile/module.screen_reader.accessibility.src

 group "Screen_Reader_Accessibility_Config" struct {
       value "gesture.quickpanel_area_size" uint: 40;
       value "gesture.longpress_timeout" float: 0.4;
+      value "gesture.invalid_area_size.top" uint: 70;
+      value "gesture.invalid_area_size.bottom" uint: 50;
 }

Change-Id: I2995ec5356993c430ec6ff072dcba8dcc7bab1aa

src/e_mod_accessibility_conf.c
src/e_mod_accessibility_conf.h
src/e_screen_reader_gestures.c

index 703ace0..3779c4e 100644 (file)
@@ -3,6 +3,7 @@
 
 #define DEFAULT_QUICKPANEL_AREA_SIZE 60
 #define DEFAULT_LONGPRESS_TIMEOUT 0.4
+#define DEFAULT_INVALID_AREA_SIZE 0
 #define ACCESSIBILITY_CONFIG "Screen_Reader_Accessibility_Config"
 #define MODULE_ACCESSIBILITY "module.screen_reader.accessibility"
 
@@ -26,6 +27,10 @@ _e_accessibility_conf_value_check( void )
       aconfig->conf->gesture.quickpanel_area_size = DEFAULT_QUICKPANEL_AREA_SIZE;
    if (aconfig->conf->gesture.longpress_timeout <= 0.0)
       aconfig->conf->gesture.longpress_timeout = DEFAULT_LONGPRESS_TIMEOUT;
+   if (aconfig->conf->gesture.invalid_area_size.top < 0)
+      aconfig->conf->gesture.invalid_area_size.top = DEFAULT_INVALID_AREA_SIZE;
+   if (aconfig->conf->gesture.invalid_area_size.bottom < 0)
+      aconfig->conf->gesture.invalid_area_size.bottom = DEFAULT_INVALID_AREA_SIZE;
 }
 
 void
@@ -41,6 +46,8 @@ e_accessibility_conf_init(E_Module *m)
 
    E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.quickpanel_area_size, UINT);
    E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.longpress_timeout, DOUBLE);
+   E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.invalid_area_size.top, UINT);
+   E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.invalid_area_size.bottom, UINT);
 
    aconfig->conf = e_config_domain_load(MODULE_ACCESSIBILITY, aconfig->conf_edd);
 
index d5dfd0b..80294c4 100644 (file)
@@ -7,6 +7,10 @@ typedef struct _E_Accessibility_Conf_Edd {
        struct {
                unsigned int quickpanel_area_size;
                double longpress_timeout;
+               struct {
+                       unsigned int top;
+                       unsigned int bottom;
+               } invalid_area_size;
        } gesture;
 } E_Accessibility_Conf_Edd;
 
index 38cdadd..38bcfa3 100644 (file)
@@ -80,7 +80,7 @@ struct _Cover
         Eina_Bool started; // indicates if taps recognition process has started
         Eina_Bool pressed; // indicates if finger is down
         int n_taps;        // number of taps captures in sequence
-        int finger[3];        // device id of finget
+        int finger[3];        // device id of finger
         Ecore_Timer *timer;  // sequence expiration timer
         int x_org[3], y_org[3];    // coordinates of first tap
         gesture_type_e tap_type;
@@ -95,6 +95,11 @@ struct _Cover
         int drag_y_delta;
    } tap_n_hold_gesture_data;
 
+   struct {
+        int n_taps;
+        Eina_Bool invalid_pressed;
+   } finger_data;
+
    Ecore_Timer *up_timer;
 };
 typedef struct _Cover Cover;
@@ -1593,6 +1598,85 @@ _mouse_button_down(int type, Ecore_Event_Mouse_Button *event)
 }
 
 static Eina_Bool
+_is_event_on_valid_area(int type, int x, int y)
+{
+   E_Zone *zone;
+   E_Accessibility_Conf_Edd* conf;
+   Eina_Bool is_invalid_area = EINA_FALSE;
+
+   conf = e_accessibility_get_configuration();
+   if (!conf) return EINA_TRUE;
+
+   if (conf->gesture.invalid_area_size.top == 0 &&
+       conf->gesture.invalid_area_size.bottom == 0) return EINA_TRUE;
+
+   zone = e_zone_current_get();
+   if (!zone) return EINA_TRUE;
+
+   /*TODO: handle zone->rot.act 90, 270 */
+   if ((y > zone->h - conf->gesture.invalid_area_size.bottom) ||
+       (y < conf->gesture.invalid_area_size.top ))
+     {
+        is_invalid_area = EINA_TRUE;
+     }
+
+   if (ECORE_EVENT_MOUSE_BUTTON_DOWN == type)
+     {
+        if (is_invalid_area)
+          {
+             if (cover->finger_data.n_taps == 0)
+                cover->finger_data.invalid_pressed = EINA_TRUE;
+          }
+        cover->finger_data.n_taps++;
+
+        if (is_invalid_area || cover->finger_data.invalid_pressed)
+           return EINA_FALSE;
+     }
+   else if (ECORE_EVENT_MOUSE_BUTTON_UP == type)
+     {
+        cover->finger_data.n_taps--;
+        if (cover->finger_data.invalid_pressed)
+          {
+             if (cover->finger_data.n_taps == 0)
+                cover->finger_data.invalid_pressed = EINA_FALSE;
+             return EINA_FALSE;
+          }
+     }
+   else
+     {
+        if (is_invalid_area && (cover->finger_data.n_taps == 0))
+          return EINA_FALSE;
+
+        if (cover->finger_data.invalid_pressed)
+          return EINA_FALSE;
+     }
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_is_valid_event(int type, void *event)
+{
+   if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
+     {
+        Ecore_Event_Mouse_Button *ev = event;
+        return _is_event_on_valid_area(type, ev->x, ev->y);
+     }
+   else if (type == ECORE_EVENT_MOUSE_BUTTON_UP)
+     {
+       Ecore_Event_Mouse_Button *ev = event;
+       return _is_event_on_valid_area(type, ev->x, ev->y);
+     }
+   else if (type == ECORE_EVENT_MOUSE_MOVE)
+     {
+        Ecore_Event_Mouse_Move *ev = event;
+        return _is_event_on_valid_area(type, ev->x, ev->y);
+     }
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
 _event_filter(void *data, void *loop_data, int type, void *event)
 {
    Eina_Bool ret = EINA_TRUE;
@@ -1602,6 +1686,12 @@ _event_filter(void *data, void *loop_data, int type, void *event)
         return ret;
      }
 
+   /* FHub requirement */
+   if (!_is_valid_event(type, event))
+     {
+        return ret;
+     }
+
    if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
      {
         ret = _mouse_button_down(type, event);