Implements accessibility for eext_more_option for 4.0 UX 34/156334/2
authorJunsuChoi <jsuya.choi@samsung.com>
Wed, 18 Oct 2017 05:50:40 +0000 (14:50 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Wed, 18 Oct 2017 07:45:48 +0000 (16:45 +0900)
Change-Id: If276f68a716bc039e48b8c838d7b928a1f7157ab

inc/wearable/efl_extension_common_private.h
src/wearable/efl_extension_more_option.c
src/wearable/efl_extension_rotary_selector.c

index aa6d5c483543eb0bc4aec4642de3bb002d0ac4bf..284bd3704d8a48c7332e608b4880977dd5716d35 100644 (file)
@@ -227,7 +227,6 @@ struct _Eext_More_Option_Data {
    //for accessibility
    Evas_Object* cue_access_object;
    Evas_Object* cue_target_object;
-   Eina_Bool more_option_panel_hidden_is;
    //
 };
 
index 6944a5186836d04102ef77b74f8e3eeda3e7c2ea..a5d1ebc56f2c630bba8b0db70ba00dc63ccab8d5 100644 (file)
@@ -92,8 +92,6 @@ _panel_active_cb(void *data, Evas_Object *obj, const char *emission, const char
         if(elm_atspi_bridge_utils_is_screen_reader_enabled())
           {
              evas_object_smart_callback_call(mold->rotary_selector, "more,option,opened", NULL);
-             elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_FALSE);
-             evas_object_show(mold->rotary_selector);
           }
         //
      }
@@ -133,12 +131,6 @@ _panel_inactive_cb(void *data, Evas_Object *obj, const char *emission, const cha
         if(elm_atspi_bridge_utils_is_screen_reader_enabled())
           {
              evas_object_smart_callback_call(mold->rotary_selector, "more,option,closed", NULL);
-             if (!mold->more_option_panel_hidden_is)
-               {
-                  if (mold->cue_access_object)
-                    elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_TRUE);
-                  mold->more_option_panel_hidden_is = EINA_TRUE;
-               }
           }
         //
      }
@@ -296,13 +288,8 @@ _cue_hide_cb(void *data, Evas_Object *obj, const char *emission, const char *sou
 
    Eext_More_Option_Data *mold = data;
 
-   elm_layout_signal_emit(mold->panel, "cue,hide", "elm");
-
    // accessibility
-   if (mold->cue_access_object) {
-      elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_FALSE);
-   }
-   mold->more_option_panel_hidden_is = EINA_FALSE;
+   elm_layout_signal_emit(mold->panel, "cue,hide", "elm");
    //
 }
 
@@ -315,10 +302,6 @@ _cue_show_cb(void *data, Evas_Object *obj, const char *emission, const char *sou
 
    // accessibility
    elm_layout_signal_emit(mold->panel, "cue,show", "elm");
-   if (mold->cue_access_object) {
-      elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_TRUE);
-   }
-   mold->more_option_panel_hidden_is = EINA_TRUE;
    //
 }
 
@@ -348,12 +331,6 @@ _more_option_screen_reader_changed(void *data, Evas_Object *obj, void *event_inf
              elm_access_action_cb_set(mold->cue_access_object, ELM_ACCESS_ACTION_ACTIVATE, _access_action_cb, mold);
 
              evas_object_data_set(mold->more_option, "_cue_access_object", mold->cue_access_object);
-
-             if (mold->more_option_panel_hidden_is) {
-                elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_TRUE);
-             } else {
-                elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_FALSE);
-             }
           }
      }
    else
@@ -461,13 +438,6 @@ eext_more_option_add(Evas_Object *parent)
         elm_atspi_accessible_reading_info_type_set(mold->cue_access_object, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME);
         elm_access_action_cb_set(mold->cue_access_object, ELM_ACCESS_ACTION_ACTIVATE, _access_action_cb, mold);
         evas_object_data_set(mold->more_option, "_cue_access_object", mold->cue_access_object);
-
-        mold->more_option_panel_hidden_is = elm_panel_hidden_get(mold->panel);
-        if (mold->more_option_panel_hidden_is) {
-           elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_TRUE);
-        } else {
-           elm_atspi_accessible_can_highlight_set(mold->cue_access_object, EINA_FALSE);
-        }
      }
    //
 
index 2b21eeede5dea49219b6c4cc0131da89870a3fe4..2218526f5992b486006206bbaec455ad4f3f2d3f 100644 (file)
@@ -3188,6 +3188,9 @@ eext_rotary_selector_item_del(Eext_Object_Item *item)
         else if (before_item && !after_item)
           elm_atspi_accessible_relationship_append(before_item->base.obj, ELM_ATSPI_RELATION_FLOWS_TO, before_item->base.obj);
 
+        evas_object_smart_callback_del(find_item->base.obj, "clicked",_accessibility_item_btn_clicked_cb);
+        evas_object_smart_callback_del(find_item->base.obj, "atspi,highlighted", _accessibility_item_btn_highlighted_cb);
+        elm_atspi_accessible_gesture_cb_set(find_item->base.obj, NULL, NULL);
      }
    //
 
@@ -3199,6 +3202,10 @@ eext_rotary_selector_item_del(Eext_Object_Item *item)
 
    _item_update_animation_run(rsd);
 
+   /* Accessibility */
+   _accessibility_item_chain_end_set(rsd);
+   //
+
    return;
 }
 
@@ -4004,7 +4011,6 @@ _accessibility_item_btn_highlighted_cb(void *data, Evas_Object *obj, void *event
              _item_selected_signal_send(rsd, previous_item_index, rsd->selected_index);
              if (last_index < rsd->selected_index)
                {
-                  _page_animation_run(rsd, EINA_TRUE);
                   _selector_update(rsd, EINA_TRUE, EINA_TRUE);
                }
              else
@@ -4022,7 +4028,6 @@ _accessibility_item_btn_highlighted_cb(void *data, Evas_Object *obj, void *event
              _item_selected_signal_send(rsd, previous_item_index, rsd->selected_index);
              if (first_index > rsd->selected_index)
                {
-                  _page_animation_run(rsd, EINA_FALSE);
                   _selector_update(rsd, EINA_TRUE, EINA_TRUE);
                }
              else
@@ -4034,13 +4039,6 @@ _accessibility_item_btn_highlighted_cb(void *data, Evas_Object *obj, void *event
      }
 }
 
-void _accessibility_page_change(Eext_Rotary_Selector_Data *rsd, int previous_item_index, Eina_Bool dir)
-{
-   _item_selected_signal_send(rsd, previous_item_index, rsd->selected_index);
-   _page_animation_run(rsd, dir);
-   _selector_update(rsd, EINA_TRUE, EINA_TRUE);
-}
-
 static void
 _rotary_selector_moreoption_opened_cb(void *data, Evas_Object *obj, void *event_info)
 {
@@ -4183,8 +4181,49 @@ _accessibility_item_gesutre_cb(void *data, Elm_Atspi_Gesture_Info gesture_info,
      return EINA_FALSE;
 
    if (rsd->previous_page_animator || rsd->next_page_animator)
-     return EINA_TRUE;
+     return EINA_FALSE;
 
+   Eina_List *l;
+   Eext_Rotary_Selector_Item *item = NULL;
+   EINA_LIST_FOREACH(rsd->item_list,l,item)
+     {
+        if (item->base.obj == obj)
+           break;
+     }
+   if (!item)
+     return EINA_FALSE;
+
+   switch (gesture_info.type)
+     {
+        case ELM_ATSPI_GESTURE_ONE_FINGER_FLICK_LEFT:
+          if (item->index % (_ROTARY_SELECTOR_PAGE_ITEM_MAX) == 0 && item->index - 1 > 0)
+            {
+               rsd->selected_index = item->index - 1;
+               _page_animation_run(rsd, EINA_FALSE);
+               _selector_update(rsd, EINA_TRUE, EINA_TRUE);
+               Eext_Rotary_Selector_Item *_item = _item_get(rsd, rsd->selected_index);
+               if (_item)
+                 {
+                    rsd->accessible_need_highlight_obj = _item->base.obj;
+                    return EINA_TRUE;
+                 }
+            }
+        break;
+        case ELM_ATSPI_GESTURE_ONE_FINGER_FLICK_RIGHT:
+          if (item->index % (_ROTARY_SELECTOR_PAGE_ITEM_MAX) == _ROTARY_SELECTOR_PAGE_ITEM_MAX - 1 && rsd->selected_index < rsd->item_count - 1)
+            {
+               rsd->selected_index = item->index + 1;
+               _page_animation_run(rsd, EINA_TRUE);
+               _selector_update(rsd, EINA_TRUE, EINA_TRUE);
+               Eext_Rotary_Selector_Item *_item = _item_get(rsd, rsd->selected_index);
+               if (_item)
+                 {
+                    rsd->accessible_need_highlight_obj = _item->base.obj;
+                    return EINA_TRUE;
+                 }
+            }
+        break;
+     }
    return EINA_FALSE;
 }