[screen reader] Code refactoring: reading composer 36/239536/8
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Mon, 27 Jul 2020 11:09:11 +0000 (13:09 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Thu, 30 Jul 2020 13:48:44 +0000 (15:48 +0200)
* simplify implementation

Change-Id: I7ad86ceb01148c981b89b133819ca71cda07c999

include/reading_composer.h
src/app_tracker.c
src/navigator.c
src/reading_composer.c
src/screen_reader_spi.c

index 9c47aaadea4aa3edabfe9d3b6f2dfdb79bc06c04..1446d4ac2e1911d5ef52ded8a90c7c72dba1851f 100644 (file)
@@ -5,10 +5,7 @@
 
 #define TTS_MAX_TEXT_SIZE  2000
 
-unsigned short int reading_composer_reading_attribute_get(
-               AtspiAccessibleReadingMaterial *rm);
-
-void reading_composer_reading_material_free(AtspiAccessibleReadingMaterial *rm);
+typedef AtspiAccessibleReadingMaterial ReadingComposerData;
 
 /**
  * @brief This function should return "physical" textual representation o UI element,
@@ -17,21 +14,27 @@ void reading_composer_reading_material_free(AtspiAccessibleReadingMaterial *rm);
  */
 char* reading_composer_name_get(AtspiAccessible *obj);
 
+/**
+ * @brief This function gets object description by ipc.
+ */
+ReadingComposerData* reading_composer_data_get(AtspiAccessible *obj);
+
+/**
+ * @brief This function frees memory allocated for object description.
+ */
+void reading_composer_data_free(ReadingComposerData *data);
+
 /**
  * @brief Similar to reading_composer_name_get but enriches above definition with
  *        "static" metadata which is not rendered in GUI, such as role name, etc.
  */
-char* reading_composer_description_get(AtspiAccessible *obj);
+char* reading_composer_description_get(ReadingComposerData *data);
 
 /**
  * @brief This function provides only "dynamic" metadata describing what
  *        user interactions are possible for given UI element. This mapps
  *        to A11Y "description" attribute.
  */
-void reading_composer_extended_description_get(
-               AtspiAccessible *obj,
-               char **base_desc,
-               char **ext_desc);
+char* reading_composer_extended_description_get(ReadingComposerData *data);
 
 #endif
-
index 8cae30c45cb4099fbc3b54abc35a73ded594727d..6e14ea72b86746293616d785aaf4b0c662f44250 100644 (file)
@@ -344,7 +344,9 @@ static void _on_atspi_event_cb(AtspiEvent *event, void *user_data)
                                }
                                if (window_tracker_subroot_get(atd->window_tracker_data)) {
                                        char *text_to_speak = NULL;
-                                       text_to_speak = reading_composer_description_get(event->source);
+                                       ReadingComposerData *rc = reading_composer_data_get(event->source);
+                                       text_to_speak = reading_composer_description_get(rc);
+                                       reading_composer_data_free(rc);
                                        DEBUG("SPEAK : %s", text_to_speak ? text_to_speak : "text_to_speak nil");
                                        tts_speak_customized(text_to_speak, EINA_TRUE, EINA_TRUE, event->source, 0);
                                        free(text_to_speak);
index 1c944303f8fda08dca462ad5daeb616a0bc3d6ca..c1490a30626196557cf4725254b26c9f90ae5dec 100644 (file)
@@ -329,7 +329,10 @@ void generate_what_to_read_and_speak(Navigator_Data *nd, AtspiAccessible *obj, E
                return;
        }
 
-       reading_composer_extended_description_get(obj, &tmp1, &tmp2);
+       ReadingComposerData *rc = reading_composer_data_get(obj);
+       tmp1 = reading_composer_description_get(rc);
+       tmp2 = reading_composer_extended_description_get(rc);
+       reading_composer_data_free(rc);
 
        DEBUG("reading %s", tmp1);
        DEBUG("reading description %s", tmp2);
index 29dc04882db6a15d816268b31d1aa532ac6e90ff..56c85bd5efee4842dee8f6ebe1658d07f45fafbb 100644 (file)
@@ -393,6 +393,7 @@ static char *generate_description_from_relation_object(AtspiAccessibleReadingMat
        return trait;
 }
 
+static
 unsigned short int reading_composer_reading_attribute_get(AtspiAccessibleReadingMaterial *rm)
 {
        unsigned short int attribute = 0;
@@ -428,6 +429,7 @@ unsigned short int reading_composer_reading_attribute_get(AtspiAccessibleReading
        return attribute;
 }
 
+static
 void reading_composer_reading_material_free(AtspiAccessibleReadingMaterial *rm)
 {
        if (rm->parent)
@@ -492,46 +494,34 @@ char* reading_composer_name_get(AtspiAccessible *obj)
        return ret;
 }
 
-char* reading_composer_description_get(AtspiAccessible *obj)
+char* reading_composer_description_get(ReadingComposerData *data)
 {
-       char *result;
-       reading_composer_extended_description_get(obj, &result, NULL);
-       return result;
-}
-
-void reading_composer_extended_description_get(
-               AtspiAccessible *obj,
-               char **base_desc,
-               char **ext_desc)
-{
-       if(base_desc)
-               *base_desc = NULL;
-       if(ext_desc)
-               *ext_desc = NULL;
-
        DEBUG("START");
        char *name = NULL;
-       char *description = NULL;
        char *role_name = NULL;
-       Eina_Strbuf *buf = NULL, *buf2 = NULL;
-       char *description_from_relation = NULL;
+       Eina_Strbuf *buf = NULL;
        char *name_from_relation = NULL;
        char *name_from_text_iface = NULL;
-       char *description_from_role = NULL;
        char *state_from_role = NULL;
        AtspiAccessibleReadingMaterial *rm;
 
-       if (!obj) return;
+       if (!data)
+               return NULL;
 
-       rm = atspi_accessible_get_reading_material(obj, NULL);
-       if (!rm)  return;
+       rm = data;
+       if (!rm)
+               return NULL;
 
        display_info_about_object(rm);
 
        unsigned short reading_attribute = reading_composer_reading_attribute_get(rm);
 
        buf = eina_strbuf_new();
-       buf2 = ext_desc ? eina_strbuf_new() : buf2;
+       if (!buf) {
+               ERROR("CRITICAL: Memory allocation failed!");
+               return NULL;
+       }
+
        if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_NAME) {
                DEBUG("START : ACCESSIBLE_READING_INFO_TYPE_NAME");
                name = rm->name;
@@ -574,6 +564,56 @@ void reading_composer_extended_description_get(
                SCREEN_READER_SAFE_FREE(role_name, free);
                DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_ROLE");
        }
+       if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_STATE) {
+               DEBUG("START : ACCESSIBLE_READING_INFO_TYPE_STATE");
+               state_from_role = generate_state_trait(rm);
+               if (state_from_role && strlen(state_from_role) > 0) {
+                       if (eina_strbuf_length_get(buf))
+                               ESAL(buf, " , ");
+                       ESAL(buf, state_from_role);
+               }
+               if (!STATE_SET_CONTAINS(rm->states, ATSPI_STATE_ENABLED)) {
+                       if (eina_strbuf_length_get(buf))
+                               ESAL(buf, " , ");
+                       ESAL(buf, _("IDS_ACCS_BODY_DISABLED_TTS"));
+               }
+               SCREEN_READER_SAFE_FREE(state_from_role, free);
+               DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_STATE");
+       }
+
+       DEBUG("RESULT: %s", eina_strbuf_string_get(buf));
+       char *base_desc = eina_strbuf_string_steal(buf);
+       eina_strbuf_free(buf);
+       DEBUG("END");
+       return base_desc;
+}
+
+char* reading_composer_extended_description_get(ReadingComposerData *data)
+{
+       DEBUG("START");
+       char *description = NULL;
+       Eina_Strbuf *buf2 = NULL;
+       char *description_from_relation = NULL;
+       char *description_from_role = NULL;
+       AtspiAccessibleReadingMaterial *rm;
+
+       if (!data)
+               return NULL;
+
+       rm = data;
+       if (!rm)
+               return NULL;
+
+       display_info_about_object(rm);
+
+       unsigned short reading_attribute = reading_composer_reading_attribute_get(rm);
+
+       buf2 = eina_strbuf_new();
+       if (!buf2) {
+               ERROR("CRITICAL: Memory allocation failed!");
+               return NULL;
+       }
+
        /* read_description: if description reading is enabled */
        if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION) {
                /* read_description is determined by vconf value for the 'read usage hints aloud' */
@@ -611,34 +651,20 @@ void reading_composer_extended_description_get(
                SCREEN_READER_SAFE_FREE(description_from_role, free);
                DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION");
        }
-       if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_STATE) {
-               DEBUG("START : ACCESSIBLE_READING_INFO_TYPE_STATE");
-               state_from_role = generate_state_trait(rm);
-               if (state_from_role && strlen(state_from_role) > 0) {
-                       if (eina_strbuf_length_get(buf))
-                               ESAL(buf, " , ");
-                       ESAL(buf, state_from_role);
-               }
-               if (!STATE_SET_CONTAINS(rm->states, ATSPI_STATE_ENABLED)) {
-                       if (eina_strbuf_length_get(buf))
-                               ESAL(buf, " , ");
-                       ESAL(buf, _("IDS_ACCS_BODY_DISABLED_TTS"));
-               }
-               SCREEN_READER_SAFE_FREE(state_from_role, free);
-               DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_STATE");
-       }
 
-       DEBUG("RESULT: %s", eina_strbuf_string_get(buf));
        DEBUG("RESULT description: %s", eina_strbuf_string_get(buf2));
-       if(base_desc)
-               *base_desc = eina_strbuf_string_steal(buf);
-       if (ext_desc)
-               *ext_desc = eina_strbuf_string_steal(buf2);
-
-       eina_strbuf_free(buf);
-       if (buf != buf2)
-               eina_strbuf_free(buf2);
-       reading_composer_reading_material_free(rm);
+       char *ext_desc = eina_strbuf_string_steal(buf2);
+       eina_strbuf_free(buf2);
        DEBUG("END");
+       return ext_desc;
 }
 
+ReadingComposerData* reading_composer_data_get(AtspiAccessible *obj)
+{
+       return obj ? atspi_accessible_get_reading_material(obj, NULL) : NULL;
+}
+
+void reading_composer_data_free(ReadingComposerData *data) {
+       if (data)
+               reading_composer_reading_material_free(data);
+}
index f8b2ae3f3c4f1554367fe76727a1be6dd69c8f00..895f57800ecaab83d2586800fe26d0cc27a214da 100644 (file)
@@ -249,7 +249,10 @@ void spi_event_get_text_to_read(
        if (!g_strcmp0(event->type, spi->tracking_signal_name)) {
                /* tracking singal "focused" */
                if (event->detail1 == 1) {
-                       reading_composer_extended_description_get(event->source, text_to_read, descr_to_read);
+                       ReadingComposerData *rc = reading_composer_data_get(event->source);
+                       *text_to_read = reading_composer_description_get(rc);
+                       *descr_to_read = reading_composer_extended_description_get(rc);
+                       reading_composer_data_free(rc);
                }
 
        } else if (!g_strcmp0(event->type, CARET_MOVED_SIG)) {