Unification of handling value-change event 57/292957/5
authorLukasz Oleksak <l.oleksak@samsung.com>
Wed, 17 May 2023 15:47:16 +0000 (17:47 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Fri, 19 May 2023 07:44:18 +0000 (07:44 +0000)
This patch changes:

* now in all cases when text to read is composed for value-change reading request
  an reading info type customization for STATE reading is taken into consideration;
  previously it was inconsistent
* now TV and Mobile versions use the same logic for handling value-change
  reading request (except for the difference in testing if event's source object
  is currently tracked object, for mobile HIGHLIGHTED state is checked since for TV
  FOCUSED state is checked)
* limitation of handling value-change reading requests in mobile version
  to role SLIDER and FILLER was removed, thans to that chage of page in pagination
  UI control can be anounced by screen reader
* reading an accessible name for FILLER case was removed; since new general
  mechanism for providing textual representation of current value is available
  it should be used (see: https://review.tizen.org/gerrit/#/c/platform/core/accessibility/screen-reader/+/291276/)

Change-Id: I1a809f78332fc155474ee0fe82e83f74ccf9076a

src/app_tracker.c
src/reading_composer.c

index d5707f595e5103e9f5f0a508baa08bf427a1bcac..f512733f75dd0bb958da73e98e7d04d53263742d 100644 (file)
@@ -143,11 +143,17 @@ static void _read_value(AtspiAccessible *obj)
        if (!obj)
                return;
 
-       char* text_to_speak = NULL;
        ReadingComposerData *rcd = reading_composer_data_get(obj);
-       text_to_speak = reading_composer_value_text_get(rcd);
+
+       if (!rcd)
+               return;
+
+       Live_Region_Politeness mode = try_parse_politeness(rcd->attributes);
+       if (object_has_highlighted_state(obj) || mode != ACCESSIBLE_LIVE_REGION_OFF) {
+               char* text_to_speak = reading_composer_value_text_get(rcd);
+               tw_speak_and_free(text_to_speak, mode == ACCESSIBLE_LIVE_REGION_ASSERTIVE ? 1 : 0);
+       }
        reading_composer_data_free(rcd);
-       tw_speak_and_free(text_to_speak, EINA_TRUE);
 }
 
 static void timer_reschedule(App_Tracker_Data *atd)
@@ -392,18 +398,8 @@ static void _on_atspi_event_cb(AtspiEvent *event, void *user_data)
                tw_speak_customized(name, EINA_TRUE, EINA_TRUE, event->source, 0);
                g_free(name);
                goto end;
-       } else if (!g_strcmp0(event->type, "object:property-change:accessible-value")) { // for reading slider and spinner value changes
-               if (role == ATSPI_ROLE_SLIDER && (get_object_reading_info_type_attributes(event->source) & ACCESSIBLE_READING_INFO_TYPE_STATE)) {
-                       _read_value(event->source);
-               } else if (role == ATSPI_ROLE_FILLER) {
-                       gchar *name = atspi_accessible_get_name(event->source, NULL);
-                       if (!name) {
-                               ERROR("name is null");
-                               goto end;
-                       }
-                       tw_speak_customized(name, EINA_TRUE, EINA_TRUE, event->source, 0);
-                       g_free(name);
-               }
+       } else if (!g_strcmp0(event->type, "object:property-change:accessible-value")) {
+               _read_value(event->source);
        } else if (!g_strcmp0(event->type, "object:state-changed:animated") && (role == ATSPI_ROLE_LIST_ITEM)
                           && (get_object_reading_info_type_attributes(event->source) & ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION)) {
                GError *err = NULL;
index ff258ada192844c1d2a7455cb5e2cc99d2a2acd1..b39459d179db3b6926f59f5dcd6b355513829be2 100644 (file)
@@ -723,6 +723,9 @@ char* reading_composer_value_text_get(ReadingComposerData *data)
        if (!data)
                return NULL;
 
+       if (!(reading_composer_reading_attribute_get(rm) & ACCESSIBLE_READING_INFO_TYPE_STATE))
+               return NULL;
+
        Eina_Strbuf *buf = eina_strbuf_new();
        add_value_text(buf, rm);