[Screen-Reader]: 48/77348/3
authorShilpa Singh <shilpa.singh@samsung.com>
Wed, 29 Jun 2016 11:25:36 +0000 (16:55 +0530)
committershilpa singh <shilpa.singh@samsung.com>
Thu, 30 Jun 2016 04:05:21 +0000 (21:05 -0700)
1. Keyboard input to be read as and when user taps on any key.
2. Entry Reading fixed
3. Keyboard_feedback vconf key checked and accordingly read character input
4. screen reader vconf improved.

Change-Id: I52beba7575d5b4fd643de4e5bc03c743aacbcb6c

include/screen_reader_vconf.h
res/po/en_US.po
src/app_tracker.c
src/navigator.c
src/screen_reader.c
src/screen_reader_vconf.c

index 0affa51b380ecbbb9152e9f28897cff9fb59554e..260beb456e7b7686bc28c2e94c8b3ae048457889 100644 (file)
@@ -4,7 +4,8 @@
 #include "screen_reader.h"
 #include "logger.h"
 
-bool vconf_init(Service_Data *service_data);
+bool vconf_init(Service_Data * service_data);
+void vconf_exit();
 void screen_reader_vconf_update_tts_language(Service_Data *service_data);
 
 #endif /* SCREEN_READER_VCONF_H_ */
index 2c04355fc55a5d957098a032b39031b84cce13d6..5ee8fc039e5427be9b3128c1436c9d229b53245e 100644 (file)
@@ -86,7 +86,16 @@ msgid "IDS_TRAIT_POPUP_CLOSE"
 msgstr "double tap to close it"
 
 msgid "IDS_TRAIT_TEXT_EDIT_FOCUSED"
-msgstr "Editing, flick up and down to adjust position."
+msgstr "Editing"
+
+msgid "IDS_DELETED"
+msgstr "Deleted"
+
+msgid "IDS_CAPITAL"
+msgstr "Capital"
+
+msgid "IDS_ALL_CHARACTERS_DELETED"
+msgstr "All characters deleted"
 
 msgid "IDS_TRAIT_TEXT_EDIT_FOCUSED_TV"
 msgstr "editing"
index 26b7c65f2c7e52232aef19e80f45fb5f78ae12eb..841facadac1be838502bb9a9a68236984137bc94 100644 (file)
@@ -17,6 +17,7 @@
 #include "app_tracker.h"
 #include "screen_reader_tts.h"
 #include "logger.h"
+#include <ctype.h>
 #ifndef X11_ENABLED
 #include "keyboard_tracker.h"
 #endif
@@ -40,6 +41,7 @@ static int _init_count;
 static GList *_roots;
 static AtspiEventListener *_listener;
 static AppTrackerEventCB _new_obj_highlighted_callback;
+extern bool keyboard_feedback;
 
 static int _is_descendant(AtspiAccessible * ancestor, AtspiAccessible * descendant)
 {
@@ -180,6 +182,36 @@ static void _on_atspi_event_cb(const AtspiEvent * event)
                }
        }
 #endif
+       if (keyboard_feedback) {
+               if (!strcmp(event->type, "object:text-changed:insert") && (atspi_accessible_get_role(event->source, NULL) == ATSPI_ROLE_ENTRY)) {
+                       char buf[256] = "\0";
+                       const gchar *text = NULL;
+                       text = g_value_get_string(&event->any_data);
+                       if ((event->detail2 == 1) && isupper((int)*text)) {
+                          strncat(buf, _("IDS_CAPITAL"), sizeof(buf) - strlen(buf) - 1);
+                          strncat(buf, " ", sizeof(buf) - strlen(buf) - 1);
+                       }
+                       strncat(buf, text, sizeof(buf) - strlen(buf) - 1);
+                       tts_speak(buf, EINA_TRUE);
+               }
+               if (!strcmp(event->type, "object:text-changed:delete") && (atspi_accessible_get_role(event->source, NULL) == ATSPI_ROLE_ENTRY)) {
+                       char buf[256] = "\0";
+                       const gchar *text = NULL;
+                       text = g_value_get_string(&event->any_data);
+                       if ((event->detail2 == 1) && isupper((int)*text)) {
+                               strncat(buf, _("IDS_CAPITAL"), sizeof(buf) - strlen(buf) - 1);
+                               strncat(buf, " ", sizeof(buf) - strlen(buf) - 1);
+                       }
+                       strncat(buf, text, sizeof(buf) - strlen(buf) - 1);
+                       strncat(buf, " ", sizeof(buf) - strlen(buf) - 1);
+                       strncat(buf, _("IDS_DELETED"), sizeof(buf) - strlen(buf) - 1);
+                       if (event->detail1 == 0) {
+                               strncat(buf, " ", sizeof(buf) - strlen(buf) - 1);//entry should be empty, need to find/get more detail here
+                               strncat(buf, _("IDS_ALL_CHARACTERS_DELETED"), sizeof(buf) - strlen(buf) - 1);
+                       }
+                       tts_speak(buf, EINA_TRUE);
+               }
+       }
        if (!strcmp(event->type, "object:property-change:accessible-name") && _object_has_highlighted_state(event->source)) {
                gchar *name = atspi_accessible_get_name(event->source, NULL);
                DEBUG("New name for object, read:%s", name);
@@ -280,6 +312,8 @@ static int _app_tracker_init_internal(void)
        atspi_event_listener_register(_listener, "object:visible-data-changed", NULL);
        atspi_event_listener_register(_listener, "object:active-descendant-changed", NULL);
        atspi_event_listener_register(_listener, "object:property-change", NULL);
+       atspi_event_listener_register(_listener, "object:text-changed:insert", NULL);
+       atspi_event_listener_register(_listener, "object:text-changed:delete", NULL);
 
        return 0;
 }
index 73951f14ac1b7702fa1afd318b9eca560646d8be..35cb852e95f7b2b5c4275af766cc3c42c5c62392 100644 (file)
@@ -87,8 +87,8 @@ static FlatNaviContext *context;
 static bool prepared = false;
 static int counter = 0;
 int _last_hover_event_time = -1;
-bool read_description = true;
-bool haptic;
+extern bool read_description;
+extern bool haptic;
 
 static struct {
        AtspiAccessible *focused_object;
@@ -438,7 +438,8 @@ char *generate_trait(AtspiAccessible * obj)
        AtspiStateSet *state_set = atspi_accessible_get_state_set(obj);
        char ret[TTS_MAX_TEXT_SIZE] = "\0";
        switch (role) {
-       case ATSPI_ROLE_ENTRY: {
+       case ATSPI_ROLE_ENTRY:
+       case ATSPI_ROLE_PASSWORD_TEXT: {
                gchar *role_name = atspi_accessible_get_localized_role_name(obj, NULL);
                if (role_name) {
                        strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
index acde7067c8d4114cc9b2b750f13ea372ccd94218..ddd79168977f173bbab04ee671beb2c92bb2a221 100644 (file)
@@ -69,6 +69,7 @@ int screen_reader_terminate_service(void *data)
        DEBUG("Service Terminate Callback \n");
 
        Service_Data *service_data = data;
+       vconf_exit();
 
        tts_stop(service_data->tts);
        tts_unprepare(service_data->tts);
index 8729255cafae863a710857d4cbb7f2ae3b351e4a..045de7359bb9bc8450e5811bd04cc5784575376b 100644 (file)
 
 keylist_t *keys = NULL;
 
-bool read_description;
-bool haptic;
+bool read_description = true;
+bool haptic = true;
+bool keyboard_feedback = true;
 
 // ------------------------------ vconf callbacks----------------------
 
-void app_termination_cb(keynode_t * node, void *user_data)
-{
-       DEBUG("START");
-       DEBUG("Application terminate %d", !vconf_keynode_get_int(node));
-
-       Service_Data *service_data = user_data;
-       service_data->run_service = vconf_keynode_get_int(node);
-
-       if (service_data->run_service == 0) {
-               elm_exit();
-       }
-
-       DEBUG("END");
-}
-
 void display_language_cb(keynode_t * node, void *user_data)
 {
        DEBUG("START");
@@ -96,24 +82,26 @@ int _set_vconf_callback_and_print_message_on_error_and_return_error_code(const c
        return ret;
 }
 
+int _unset_vconf_callback(const char *in_key, vconf_callback_fn cb)
+{
+       int ret = vconf_ignore_key_changed(in_key, cb);
+       if (ret != 0)
+               DEBUG("Could not delete notify callback to %s", in_key);
+       DEBUG("END");
+       return ret;
+}
+
 void haptic_changed_cb(keynode_t * node, void *user_data)
 {
        DEBUG("START");
        DEBUG("Trying to set Reader haptic to: %d", vconf_keynode_get_bool(node));
-
-       Service_Data *sd = user_data;
        int enabled;
-
-       if (!sd) return;
-
        int ret = vconf_get_bool("db/setting/accessibility/screen_reader/haptic", &enabled);
        if (ret != 0) {
                ERROR("ret == %d", ret);
                return;
        }
-
        haptic = enabled;
-
        DEBUG("END");
 }
 
@@ -121,65 +109,85 @@ void reader_description_cb(keynode_t * node, void *user_data)
 {
        DEBUG("START");
        DEBUG("Trying to set Reader description to: %d", vconf_keynode_get_bool(node));
-
-       Service_Data *sd = user_data;
-       int descrition;
-
-       if (!sd) return;
-
-       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/description", &descrition);
+       int description;
+       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/description", &description);
        if (ret != 0) {
                ERROR("ret == %d", ret);
                return;
        }
-
-       read_description = descrition;
-
+       read_description = description;
        DEBUG("END");
 }
 
-void _set_vconf_key_changed_callback_reader_haptic(Service_Data * service_data)
+void keyboard_feedback_cb(keynode_t * node, void *user_data)
 {
        DEBUG("START");
+       DEBUG("Trying to set keyboard feedback to: %d", vconf_keynode_get_bool(node));
+       int kb_feedback = 1;
+       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/keyboard_feedback", &kb_feedback);
+       if (ret != 0) {
+               ERROR("ret == %d", ret);
+               return;
+       }
+       keyboard_feedback = kb_feedback;
+       DEBUG("END");
+}
 
+void _set_vconf_key_changed_callback_reader_haptic()
+{
+       DEBUG("START");
        int enabled;
-
        int ret = vconf_get_bool("db/setting/accessibility/screen_reader/haptic", &enabled);
        if (ret != 0) {
                ERROR("ret == %d", ret);
                return;
        }
-
        haptic = enabled;
        DEBUG("Hapticr status %d ",haptic);
-       ret = vconf_notify_key_changed("db/setting/accessibility/screen_reader/haptic", haptic_changed_cb, service_data);
+       ret = vconf_notify_key_changed("db/setting/accessibility/screen_reader/haptic", haptic_changed_cb, NULL);
        if (ret != 0)
                DEBUG("Could not add notify callback to db/setting/accessibility/screen_reader/haptic key");
 
        DEBUG("END");
 }
 
-void _set_vconf_key_changed_callback_reader_description(Service_Data * service_data)
+void _set_vconf_key_changed_callback_reader_description()
 {
        DEBUG("START");
 
-       int descrition;
-
-       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/description", &descrition);
+       int description;
+       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/description", &description);
        if (ret != 0) {
                ERROR("ret == %d", ret);
                return;
        }
-
-       read_description = descrition;
-       DEBUG("Description Reader status %d ",descrition);
-       ret = vconf_notify_key_changed("db/setting/accessibility/screen_reader/description", reader_description_cb, service_data);
+       read_description = description;
+       DEBUG("Description Reader status %d ",description);
+       ret = vconf_notify_key_changed("db/setting/accessibility/screen_reader/description", reader_description_cb, NULL);
        if (ret != 0)
                DEBUG("Could not add notify callback to db/setting/accessibility/screen_reader/description key");
 
        DEBUG("END");
 }
 
+void _set_vconf_key_changed_callback_reader_keyboard_feedback()
+{
+       DEBUG("START");
+
+       int kb_feedback = 0;
+       int ret = vconf_get_bool("db/setting/accessibility/screen_reader/keyboard_feedback", &kb_feedback);
+       if (ret != 0) {
+               ERROR("ret == %d", ret);
+               return;
+       }
+       keyboard_feedback = kb_feedback;
+       DEBUG("keyboard feedback status %d ",keyboard_feedback);
+       ret = vconf_notify_key_changed("db/setting/accessibility/screen_reader/keyboard_feedback", keyboard_feedback_cb, NULL);
+       if (ret != 0)
+               DEBUG("Could not add notify callback to db/setting/accessibility/screen_reader/keyboard_feedback key");
+
+DEBUG("END");
+}
 
 bool vconf_init(Service_Data * service_data)
 {
@@ -201,9 +209,18 @@ bool vconf_init(Service_Data * service_data)
        }
 
        _set_vconf_callback_and_print_message_on_error_and_return_error_code("db/menu_widget/language", display_language_cb, service_data);
-       _set_vconf_key_changed_callback_reader_description(service_data);
-       _set_vconf_key_changed_callback_reader_haptic(service_data);
+       _set_vconf_key_changed_callback_reader_description();
+       _set_vconf_key_changed_callback_reader_haptic();
+       _set_vconf_key_changed_callback_reader_keyboard_feedback();
 
        DEBUG("---------------------- VCONF_init END ----------------------\n\n");
        return true;
 }
+
+void vconf_exit()
+{
+       _unset_vconf_callback("db/menu_widget/language", display_language_cb);
+       _unset_vconf_callback("db/setting/accessibility/screen_reader/keyboard_feedback", keyboard_feedback_cb);
+       _unset_vconf_callback("db/setting/accessibility/screen_reader/haptic", haptic_changed_cb);
+       _unset_vconf_callback("db/setting/accessibility/screen_reader/description", reader_description_cb);
+}