Unification of accessible name composition 20/299820/3
authorLukasz Oleksak <l.oleksak@samsung.com>
Tue, 10 Oct 2023 13:39:33 +0000 (15:39 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Thu, 12 Oct 2023 08:26:44 +0000 (10:26 +0200)
Change-Id: I679ef1f8b8f406e6ecccf84bfda167be8d8c1010

src/reading_composer.c

index 592d9915f00bc1bddc6efe0dfe4bd0f2ec590d99..38844caf8583cea2ac19a63ad2ed1c4d57fc1e65 100644 (file)
@@ -535,42 +535,64 @@ unsigned short int reading_composer_reading_attribute_get(AtspiAccessibleReading
        return attribute;
 }
 
-char* reading_composer_name_get(AtspiAccessible *obj)
+TIZEN_PROD_STATIC void add_name_from_rm(Eina_Strbuf *buf, AtspiAccessibleReadingMaterial *rm)
 {
-       DEBUG("START");
-       AtspiAccessibleReadingMaterial *rm;
        char *name = NULL;
        char *name_from_relation = NULL;
-       char *text = NULL;
-
-       if (!obj)
-               return NULL;
-       rm = atspi_accessible_get_reading_material(obj, NULL);
-       if (!rm)
-               return NULL;
+       char *name_from_text_iface = NULL;
        unsigned short reading_attribute = reading_composer_reading_attribute_get(rm);
 
-       Eina_Strbuf *buf = eina_strbuf_new();
        if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_NAME) {
                DEBUG("START : ACCESSIBLE_READING_INFO_TYPE_NAME");
                name = rm->name;
                name_from_relation = rm->labeled_by_name;
-               text = rm->text_interface_name;
+               name_from_text_iface = rm->text_interface_name;
 
-               if (text && strlen(text))
-                       ESAL(buf, text);
-               if (name && strlen(name) > 0) {
-                       if (eina_strbuf_length_get(buf))
-                               ESAL(buf, ",");
-                       ESAL(buf, name);
-               }
                if (name_from_relation && strlen(name_from_relation) > 0) {
                        if (eina_strbuf_length_get(buf))
-                               ESAL(buf, ",");
+                               ESAL(buf, " , ");
                        ESAL(buf, name_from_relation);
+               } else if (name && strlen(name) > 0) {
+                       if (eina_strbuf_length_get(buf))
+                               ESAL(buf, " , ");
+                       ESAL(buf, name);
+               } else if (name_from_text_iface) {
+                       /* For text object on WEB page which does not have accessible name nor labelled_by relation */
+                       /* And for password entry which does not have accessible name nor labelled_by relation */
+                       unsigned int text_len = strlen(name_from_text_iface);
+                       if (text_len > 0) {
+                               DEBUG("Object has text interface value only");
+                               if (eina_strbuf_length_get(buf))
+                                       ESAL(buf, " , ");
+                               if (rm->role == ATSPI_ROLE_PASSWORD_TEXT) {
+                                       ESAF(buf,
+                                               ngettext("PLURAL_ZERO_ACCS_TBOPT_PD_CHARACTERS",
+                                                       "PLURAL_ZERO_ACCS_TBOPT_PD_CHARACTERS", text_len),
+                                               text_len);
+                               } else {
+                                       ESAL(buf, name_from_text_iface);
+                               }
+                       }
                }
                DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_NAME");
        }
+}
+
+char* reading_composer_name_get(AtspiAccessible *obj)
+{
+       DEBUG("START");
+       AtspiAccessibleReadingMaterial *rm;
+
+       if (!obj)
+               return NULL;
+
+       rm = atspi_accessible_get_reading_material(obj, NULL);
+       if (!rm)
+               return NULL;
+
+       Eina_Strbuf *buf = eina_strbuf_new();
+
+       add_name_from_rm(buf, rm);
 
        atspi_accessible_free_reading_material(rm);
        DEBUG("RESULT: %s", eina_strbuf_string_get(buf));
@@ -582,10 +604,7 @@ char* reading_composer_name_get(AtspiAccessible *obj)
 char* reading_composer_description_get(ReadingComposerData *data)
 {
        DEBUG("START");
-       char *name = NULL;
        char *role_name = NULL;
-       char *name_from_relation = NULL;
-       char *name_from_text_iface = NULL;
        char *state_from_role = NULL;
        AtspiAccessibleReadingMaterial *rm;
        bool add_disabled_trait = false; /* set to true when states are requested to be read, but the object hasn't got ATSPI "enabled" state */
@@ -633,40 +652,8 @@ char* reading_composer_description_get(ReadingComposerData *data)
                DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_STATE");
        }
 
-       if (reading_attribute & ACCESSIBLE_READING_INFO_TYPE_NAME) {
-               DEBUG("START : ACCESSIBLE_READING_INFO_TYPE_NAME");
-               name = rm->name;
-               name_from_relation = rm->labeled_by_name;
-               name_from_text_iface = rm->text_interface_name;
+       add_name_from_rm(buf, rm);
 
-               if (name && strlen(name) > 0) {
-                       if (eina_strbuf_length_get(buf))
-                               ESAL(buf, ", ");
-                       ESAL(buf, name);
-               }
-               if (name_from_relation && strlen(name_from_relation) > 0) {
-                       if (eina_strbuf_length_get(buf))
-                               ESAL(buf, " , ");
-                       ESAL(buf, name_from_relation);
-               }
-               /* For text object on WEB page which does not have accessible name */
-               /* And for password entry which does not have accessible name */
-               if (eina_strbuf_length_get(buf) == 0 && name_from_text_iface) {
-                       unsigned int text_len = strlen(name_from_text_iface);
-                       if (text_len > 0) {
-                               DEBUG("Object has text interface value only");
-                               if (rm->role == ATSPI_ROLE_PASSWORD_TEXT) {
-                                       ESAF(buf,
-                                               ngettext("PLURAL_ZERO_ACCS_TBOPT_PD_CHARACTERS",
-                                                       "PLURAL_ZERO_ACCS_TBOPT_PD_CHARACTERS", text_len),
-                                               text_len);
-                               } else {
-                                       ESAL(buf, name_from_text_iface);
-                               }
-                       }
-               }
-               DEBUG("END : ACCESSIBLE_READING_INFO_TYPE_NAME");
-       }
        int row;
        int column;
        gchar *table_unique_id = NULL;