[setting-accessability] Reading screen-reader off directly via tts API intead of... 76/106176/2
authorPrasoon Singh <prasoon.16@samsung.com>
Tue, 20 Dec 2016 17:13:46 +0000 (22:43 +0530)
committerPrasoon Singh <prasoon.16@samsung.com>
Tue, 20 Dec 2016 17:27:12 +0000 (22:57 +0530)
Change-Id: Iee1910acc07bbb911574208ee468c5fb58280f8f

setting-accessibility/CMakeLists.txt
setting-accessibility/include/setting-accessibility.h
setting-accessibility/src/setting-accessibility-screen-reader.c
setting-accessibility/src/setting-accessibility.c

index 384bde39b91e159eaa59a036a0c07d7c0437ada5..1c4ab0b76528c72af7672b4521bf80271df189ef 100644 (file)
@@ -24,6 +24,7 @@ pkg_check_modules(pkgs_acc REQUIRED
        json-glib-1.0
        efl-extension
        libtzplatform-config
+       tts
        tts-setting
 )
 FOREACH(flag ${pkgs_acc_CFLAGS})
index 92cecfa6d4b6605054373d46c89de7cefb2260be..f3fe5928a94e89bf9c7795ae6de6cba553218a4f 100644 (file)
@@ -22,6 +22,7 @@
 #define __SETTING_ACCESSIBILITY_H__
 
 #include <Elementary.h>
+#include <tts.h>
 #include <setting-common-draw-widget.h>
 #include <setting-common-view.h>
 
@@ -90,6 +91,7 @@ struct _SettingAccessibility {
        Setting_GenGroupItem_Data *multiline_screen_reader_comment;
        Setting_GenGroupItem_Data *screen_reader_settings;
        Setting_GenGroupItem_Data *screen_reader_item;
+       tts_h tts;
 
        bool empty_flag;
 };
index 1bc1ddd0a387d1998b06c99f0cbcc5bcdad03257..66b87ec89fb7b3417d7f0cfc1f544c2cc500ebb5 100644 (file)
@@ -50,17 +50,20 @@ static Eina_Bool __setting_accessibility_screen_reader_page_hide(void *data,
        return EINA_TRUE;
 }
 
-void _utterance_completed_cb(void *data, const char *say_signal)
-{
-       vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, 0);
-}
-
 static void setting_accessibility_main_chk_screenreader_vconf_update(int state, void* data)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data parameter is NULL");
-       if (state) vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, 1);
-       else elm_atspi_bridge_utils_say(setting_gettext("IDS_ACCS_SCREEN_READER_OFF"), EINA_FALSE, _utterance_completed_cb, NULL);
+       SettingAccessibility *ad = (SettingAccessibility *)data;
+       int ret, utterance_id;
+       vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state);
+       if (!state) {
+               ret = tts_add_text(ad->tts, setting_gettext("IDS_ACCS_SCREEN_READER_OFF"), NULL, TTS_VOICE_TYPE_AUTO,  TTS_SPEED_AUTO, &utterance_id);
+               SETTING_TRACE_DEBUG("tts_add_text %d", ret);
+               ret = tts_play(ad->tts);
+               SETTING_TRACE_DEBUG("tts_play %d", ret);
+       }
+
        SETTING_TRACE_END;
 }
 
index c617566a9979bf660f84b84735155ec788d0ac56..fc81a13962b30fe48894b342f5c9f25cec732591 100644 (file)
 
 #define SETTING_ACCESSIBILITY_PACKAGE_NAME "org.tizen.setting-accessibility"
 
+static const char *get_tts_error(int r)
+{
+       switch (r) {
+               case TTS_ERROR_NONE: {
+                       return "no error";
+               }
+               case TTS_ERROR_INVALID_PARAMETER: {
+                       return "inv param";
+               }
+               case TTS_ERROR_OUT_OF_MEMORY: {
+                       return "out of memory";
+               }
+               case TTS_ERROR_OPERATION_FAILED: {
+                       return "oper failed";
+               }
+               case TTS_ERROR_INVALID_STATE: {
+                       return "inv state";
+               }
+               default: {
+                       return "uknown error";
+               }
+       }
+}
+
+void
+state_changed_cb(tts_h tts, tts_state_e previous, tts_state_e current, void* user_data)
+{
+       SETTING_TRACE_DEBUG(" previous = %d current = %d", previous, current);
+}
+
+int
+create_tts_handle(SettingAccessibility *ad)
+{
+       int ret;
+       ret = tts_create(&(ad->tts));
+       if (ret != 0) {
+               SETTING_TRACE_DEBUG("tts_create %d", get_tts_error(ret));
+               return -1;
+       }
+       ret = tts_set_mode(ad->tts, TTS_MODE_DEFAULT);
+       if (ret != 0) {
+               SETTING_TRACE_DEBUG("tts_set_mode %d", get_tts_error(ret));
+               return -1;
+       }
+       ret = tts_prepare(ad->tts);
+       if (ret != 0) {
+               SETTING_TRACE_DEBUG("tts_prepare %d", get_tts_error(ret));
+               return -1;
+       }
+       ret = tts_set_state_changed_cb(ad->tts, state_changed_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_DEBUG("tts_set_state_changed_cb %d", get_tts_error(ret));
+               return -1;
+       }
+       return 0;
+}
+
+void
+destroy_tts_handle(SettingAccessibility *ad)
+{
+       int ret;
+       ret = tts_destroy(ad->tts); /* tts is the TTS handle */
+       if (ret != 0)
+               SETTING_TRACE_DEBUG("Fail to tts destroy");
+}
+
 static bool on_app_create(void *priv)
 {
        SETTING_TRACE_BEGIN;
        setting_retvm_if((NULL == priv), NULL, "NULL == priv");
        SettingAccessibility *ad = priv;
+       int ret;
 
        setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
 
@@ -50,6 +117,8 @@ static bool on_app_create(void *priv)
        setting_view_node_set_cur_view(&setting_view_accessibility_main);
 
        /* creating a view. */
+       ret = create_tts_handle(ad);
+       if (ret == -1) destroy_tts_handle(ad);
        setting_view_create(&setting_view_accessibility_main, (void *)ad);
 
        evas_object_show(ad->md.window);
@@ -73,6 +142,7 @@ static void on_app_terminate(void *priv)
 {
        SETTING_TRACE_BEGIN;
        SettingAccessibility *ad = priv;
+       destroy_tts_handle(ad);
        setting_view_destroy(&setting_view_accessibility_main, ad);
        SETTING_TRACE_END;
 }