Fixed handling of language changes
authorTomasz Olszak <t.olszak@samsung.com>
Fri, 10 Jul 2015 09:58:40 +0000 (11:58 +0200)
committerTomasz Olszak <t.olszak@samsung.com>
Fri, 10 Jul 2015 12:24:12 +0000 (14:24 +0200)
Change-Id: I6cbf2f9f17e2852b84b8d015ce56c4b35ffdbcfa

include/logger.h
include/screen_reader.h
include/screen_reader_vconf.h
src/screen_reader.c
src/screen_reader_tts.c
src/screen_reader_vconf.c
tests/smart_navi_suite.c

index 4ba4830..4f69c89 100644 (file)
@@ -11,8 +11,14 @@ void logger_shutdown(void);
 #define INFO(...) EINA_LOG_DOM_INFO(_eina_log_dom, __VA_ARGS__);
 #define DEBUG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__);
 #define ERROR(...) EINA_LOG_DOM_ERR(_eina_log_dom, __VA_ARGS__);
-#define WARNING(...) EINA_LOG_DOM_WRN(_eina_log_dom, __VA_ARGS__);
+#define WARNING(...) EINA_LOG_DOM_WARN(_eina_log_dom, __VA_ARGS__);
 
 #define MEMORY_ERROR "Memory allocation error"
 
+#ifdef _
+#undef _
+#endif
+
+#define _(str) gettext(str)
+
 #endif /* end of include guard: LOGGER_H_ */
index d2535d4..76396ea 100644 (file)
@@ -5,7 +5,7 @@
 #include <Eldbus.h>
 #include <tts.h>
 
-#define LAN_NAME 6
+#define LANGUAGE_NAME_SIZE 6
 
 #define MAX_REACHED ", maximum value reached"
 #define MIN_REACHED ", minimum value reached"
@@ -33,11 +33,8 @@ typedef enum
 typedef struct _Service_Data
 {
    //Set by vconf
-   int information_level;
    bool run_service;
-   char language[LAN_NAME];
-   int voice_type;
-   int reading_speed;
+   char display_language[LANGUAGE_NAME_SIZE];
    char *tracking_signal_name;
 
    //Set by tts
index f276adc..0affa51 100644 (file)
@@ -5,5 +5,6 @@
 #include "logger.h"
 
 bool vconf_init(Service_Data *service_data);
+void screen_reader_vconf_update_tts_language(Service_Data *service_data);
 
 #endif /* SCREEN_READER_VCONF_H_ */
index 31d17c9..0f63eeb 100644 (file)
 Service_Data service_data =
 {
    //Set by vconf
-   .information_level = 1,
    .run_service = 1,
-   .language = "en_US",
-   .voice_type = TTS_VOICE_TYPE_FEMALE,
-   .reading_speed = 2,
    .tracking_signal_name = HIGHLIGHT_CHANGED_SIG,
 
 
index d263367..c9c3271 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <Ecore.h>
 #include "screen_reader_tts.h"
+#include "screen_reader_vconf.h"
 #include "logger.h"
 
 // ---------------------------- DEBUG HELPERS ------------------------------
@@ -228,7 +229,7 @@ void tts_speak(char *text_to_speak, Eina_Bool flush_switch)
    if ( !text_to_speak ) return;
    if ( !text_to_speak[0] ) return;
 
-   if(tts_add_text( sd->tts, text_to_speak, sd->language, TTS_VOICE_TYPE_AUTO, TTS_SPEED_AUTO, &speak_id))
+   if(tts_add_text( sd->tts, text_to_speak, NULL, TTS_VOICE_TYPE_AUTO, TTS_SPEED_AUTO, &speak_id))
       return;
 
    DEBUG("added id to:%d\n", speak_id);
@@ -277,6 +278,9 @@ void state_changed_cb(tts_h tts, tts_state_e previous, tts_state_e current, void
 
    if (TTS_STATE_CREATED == previous && TTS_STATE_READY == current)
      {
+
+       update_supported_voices(sd);
+
        char *txt;
 
        if (!txt_keep_buff) return;
index d6818ad..4e1d9c8 100644 (file)
 
 keylist_t *keys = NULL;
 
-bool set_langauge(Service_Data *sd, const char *new_language, int new_voice)
-{
-   DEBUG("START");
-
-   Eina_List *l;
-   Voice_Info *vi;
-
-   if (!new_language)
-      return false;
-
-   if(strncmp(sd->language, new_language, LAN_NAME - 1) == 0 && sd->voice_type == new_voice)
-      {
-         DEBUG("No need to change accessibility language: %s(%d) -> %s(%d)",
-               sd->language, sd->voice_type, new_language, new_voice);
-
-         return true;
-      }
-
-   EINA_LIST_FOREACH(sd->available_languages, l, vi)
-   {
-      DEBUG("foreach %s <- %s", vi->language, new_language);
-      if(strncmp(vi->language, new_language, LAN_NAME - 1) == 0 &&
-            vi->voice_type == new_voice)
-         {
-            DEBUG("str_cpy %s (%d) -> %s (%d)", sd->language, sd->voice_type, vi->language, vi->voice_type);
-            snprintf(sd->language, LAN_NAME, "%s", vi->language);
-            sd->voice_type = vi->voice_type;
-            DEBUG("after_str_cpy");
-
-            DEBUG("ACCESSIBILITY LANGUAGE CHANGED");
-            DEBUG("END");
-            return true;
-         }
-   }
-
-   DEBUG("ACCESSIBILITY LANGUAGE FAILED TO CHANGED");
-
-   vconf_set_str("db/setting/accessibility/language", sd->language);
-   vconf_set_int("db/setting/accessibility/voice", sd->voice_type);
-
-   DEBUG("END");
-   return false;
-}
-
 // ------------------------------ vconf callbacks----------------------
 
-void information_level_cb(keynode_t *node, void *user_data)
-{
-   DEBUG("START");
-   DEBUG("Information level set: %d", node->value.i);
-
-   Service_Data *service_data = user_data;
-   service_data->information_level = node->value.i;
-
-   DEBUG("END");
-}
-
 void app_termination_cb(keynode_t *node, void *user_data)
 {
    DEBUG("START");
@@ -89,47 +34,15 @@ void app_termination_cb(keynode_t *node, void *user_data)
    DEBUG("END");
 }
 
-void language_cb(keynode_t *node, void *user_data)
-{
-   DEBUG("START");
-   DEBUG("Trying to set language to: %s", node->value.s);
-
-   Service_Data *sd = user_data;
-
-   int voice_type;
-
-   /* FIXME: this is a callback of 'db/setting/accessibility/language' */
-   vconf_get_int("db/setting/accessibility/voice", (int*)(&voice_type));
-   set_langauge(sd, node->value.s, voice_type);
-
-   DEBUG("END");
-}
-
-void voice_cb(keynode_t *node, void *user_data)
+void display_language_cb(keynode_t *node, void *user_data)
 {
    DEBUG("START");
-   DEBUG("Voice set to: %d", node->value.i);
+   DEBUG("Trying to set LC_MESSAGES to: %s", node->value.s);
 
    Service_Data *sd = user_data;
-
-   /* FIXME: this is a callback of 'db/setting/accessibility/voice' */
-   const char *lang = vconf_get_str("db/setting/accessibility/language");
-   if(!lang)
-      {
-         DEBUG("FAILED TO GET LANGUAGE");
-      }
-   set_langauge(sd, lang, (int)node->value.i);
-
-   DEBUG("END");
-}
-
-void reading_speed_cb(keynode_t *node, void *user_data)
-{
-   DEBUG("START");
-   DEBUG("Reading speed set to: %d", node->value.i);
-
-   Service_Data *service_data = user_data;
-   service_data->reading_speed = node->value.i;
+   snprintf(sd->display_language, LANGUAGE_NAME_SIZE, "%s", node->value.s);
+   //to make gettext work
+   setenv("LC_MESSAGES", sd->display_language, 1);
 
    DEBUG("END");
 }
@@ -139,51 +52,36 @@ void reading_speed_cb(keynode_t *node, void *user_data)
 int get_key_values(Service_Data *sd)
 {
    DEBUG("START");
-
-   char *language = vconf_get_str("db/setting/accessibility/language");
-
-   if(!language)
-      {
-         /*FIXME: need to handle to_ret from here */
-         DEBUG("FAILED TO GET LANGUAGE");
-      }
-
-   int ret = -1;
    int to_ret = 0;
 
+   char *display_language = vconf_get_str("db/menu_widget/language");
+   if (display_language)
+     {
+        snprintf(sd->display_language, LANGUAGE_NAME_SIZE, "%s", display_language);
+        //to make gettext work
+        setenv("LC_MESSAGES", sd->display_language, 1);
+        free(display_language);
+     }
+   else
+     WARNING("Can't get db/menu_widget/language value");
 
-   int voice;
-   ret = vconf_get_int("db/setting/accessibility/voice", &voice);
-   if(ret != 0)
-      {
-         to_ret -= -1;
-         DEBUG("FAILED TO SET VOICE TYPE: %d", ret);
-      }
-
-   if(language)
-      set_langauge(sd, language, voice);
-
-   ret = vconf_get_int("db/setting/accessibility/speech_rate", &sd->reading_speed);
-   if(ret != 0)
-      {
-         to_ret -= -2;
-         DEBUG("FAILED TO SET READING SPEED: %d", ret);
-      }
-
-   ret = vconf_get_int("db/setting/accessibility/information_level", &sd->information_level);
-   if(ret != 0)
-      {
-         to_ret -= -4;
-         DEBUG("FAILED TO SET INFORMATION LEVEL: %d", ret);
-      }
-
-   DEBUG("SCREEN READER DATA SET TO: Language: %s; Voice: %d, Reading_Speed: %d, Information_Level: %d, Tracking signal: %s;",
-         sd->language, sd->voice_type, sd->reading_speed, sd->information_level, sd->tracking_signal_name);
+   DEBUG("SCREEN READER DATA SET TO: Display_Language: %s, Tracking signal: %s;",
+         sd->display_language, sd->tracking_signal_name);
 
    DEBUG("END");
    return to_ret;
 }
 
+int _set_vconf_callback_and_print_message_on_error_and_return_error_code(const char *in_key, vconf_callback_fn cb,
+                                                    void *user_data)
+{
+    int ret = vconf_notify_key_changed(in_key, cb, user_data);
+    if(ret != 0)
+          DEBUG("Could not add notify callback to %s key", in_key);
+
+    return ret;
+}
+
 bool vconf_init(Service_Data *service_data)
 {
    DEBUG( "--------------------- VCONF_init START ---------------------");
@@ -207,42 +105,7 @@ bool vconf_init(Service_Data *service_data)
          DEBUG("Could not set data from vconf: %d", ret);
       }
 
-   ret = vconf_notify_key_changed("db/setting/accessibility/information_level", information_level_cb, service_data);
-   if(ret != 0)
-      {
-         DEBUG("Could not add information level callback");
-         return false;
-      }
-
-   ret = vconf_notify_key_changed("db/menu_widget/language", language_cb, service_data);
-   if(ret != 0)
-      {
-         DEBUG("Could not add language callback");
-         return false;
-      }
-
-   ret = vconf_notify_key_changed("db/setting/accessibility/language", language_cb, service_data);
-   if(ret != 0)
-      {
-         DEBUG("Could not add language callback");
-         return false;
-      }
-
-   ret = vconf_notify_key_changed("db/setting/accessibility/voice", voice_cb, service_data);
-   if(ret != 0)
-      {
-         DEBUG("Could not add voice callback");
-         return false;
-      }
-
-   ret = vconf_notify_key_changed("db/setting/accessibility/speech_rate", reading_speed_cb, service_data);
-   if(ret != 0)
-      {
-         DEBUG("Could not add reading speed callback callback");
-         return false;
-      }
-
-   DEBUG("ALL CALBACKS ADDED");
+   _set_vconf_callback_and_print_message_on_error_and_return_error_code("db/menu_widget/language", display_language_cb, service_data);
 
    DEBUG( "---------------------- VCONF_init END ----------------------\n\n");
    return true;
index df3a45f..5930b17 100644 (file)
@@ -16,10 +16,7 @@ static FlatNaviContext *ctx;
 void setup(void)
 {
    Service_Data *data = get_pointer_to_service_data_struct();
-   data->information_level = 1;
    data->run_service = 1;
-   data->voice_type = TTS_VOICE_TYPE_FEMALE;
-   data->reading_speed = 2;
    data->tracking_signal_name = HIGHLIGHT_CHANGED_SIG;
 
    //Set by tts