[TV] Enable reading on accessible-name change of focused object 24/296324/1 accepted/tizen/7.0/unified/20230727.173912
authorLukasz Oleksak <l.oleksak@samsung.com>
Tue, 25 Jul 2023 13:51:16 +0000 (15:51 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Tue, 25 Jul 2023 14:06:20 +0000 (14:06 +0000)
Change-Id: I300061fe1e66ac2e656e71e30616bd26394b5b04

include/screen_reader.h
src/screen_reader_spi.c

index 4650147fca30e5787658f1780ca48659d0a811b1..73eb2539e302aea5157763b9bb933cc5648a26c1 100644 (file)
@@ -20,6 +20,7 @@
 #define TEXT_INSERT_SIG "object:text-changed:insert"
 #define TEXT_DELETE_SIG "object:text-changed:delete"
 #define STATE_CHECKED_SIG "object:state-changed:checked"
+#define NAME_CHANGED_SIG "object:property-change:accessible-name"
 
 typedef enum {
        read_as_xml,
index 437c2af690675532ca17a2bb512f29a2e91a30cb..ebc7780322a3f8597d46a5832a7c7618cecc440c 100644 (file)
@@ -204,6 +204,14 @@ static char *spi_on_value_changed_get_text(SpiData *spi, AtspiEvent *event)
        return text_to_read;
 }
 
+static char *spi_on_name_changed_get_text(SpiData *spi, AtspiEvent *event)
+{
+       char *text_to_read = NULL;
+       spi->currently_focused = event->source;
+       text_to_read = reading_composer_name_get(spi->currently_focused);
+       return text_to_read;
+}
+
 static char *spi_get_password_text(SpiData *spi, AtspiEvent *event)
 {
        AtspiText *iface_text = NULL;
@@ -337,6 +345,13 @@ void spi_event_get_text_to_read(
                        *text_to_read = g_strdup(_("IDS_ACCS_TBOPT_CHECKED_TTS"));
                else
                        *text_to_read = g_strdup(_("IDS_ACCS_TBOPT_NOT_CHECKED_TTS"));
+       } else if (!g_strcmp0(event->type, NAME_CHANGED_SIG)) {
+               Live_Region_Politeness mode = try_parse_politeness(attrs, object_has_focused_state(event->source));
+               if (mode != ACCESSIBLE_LIVE_REGION_OFF) {
+                       *text_to_read = spi_on_name_changed_get_text(spi, event);
+                       if (cancel)
+                               *cancel = mode == ACCESSIBLE_LIVE_REGION_ASSERTIVE ? 1 : 0;
+               }
        } else {
                ERROR("Unknown event type");
        }
@@ -495,6 +510,7 @@ SpiData *spi_init(void)
        spi_listener_register(spi->listener, STATE_FOCUSED_SIG);
        spi_listener_register(spi->listener, CARET_MOVED_SIG);
        spi_listener_register(spi->listener, VALUE_CHANGED_SIG);
+       spi_listener_register(spi->listener, NAME_CHANGED_SIG);
        spi_listener_register(spi->listener, TEXT_INSERT_SIG);
        spi_listener_register(spi->listener, TEXT_DELETE_SIG);
        spi_listener_register(spi->listener, STATE_CHECKED_SIG);
@@ -536,6 +552,7 @@ void spi_shutdown(SpiData *spi)
        spi_listener_deregister(spi->listener, STATE_FOCUSED_SIG);
        spi_listener_deregister(spi->listener, CARET_MOVED_SIG);
        spi_listener_deregister(spi->listener, VALUE_CHANGED_SIG);
+       spi_listener_deregister(spi->listener, NAME_CHANGED_SIG);
        spi_listener_deregister(spi->listener, TEXT_INSERT_SIG);
        spi_listener_deregister(spi->listener, TEXT_DELETE_SIG);
        g_object_unref(spi->listener);