Merge "Change the step of checking utf8 validation and text size" into tizen
authorSooyeon Kim <sooyeon.kim@samsung.com>
Mon, 16 Mar 2020 10:44:44 +0000 (10:44 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Mon, 16 Mar 2020 10:44:44 +0000 (10:44 +0000)
client/tts.c

index 8676a5c..2e080fa 100644 (file)
@@ -60,7 +60,7 @@ static pthread_mutex_t g_pkgmgr_mutex = PTHREAD_MUTEX_INITIALIZER;
 static Eina_Bool __tts_notify_state_changed(void *data);
 static Eina_Bool __tts_notify_error(void *data);
 int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg);
-
+int __tts_recheck_screen_reader();
 
 const char* tts_tag()
 {
@@ -435,20 +435,19 @@ int tts_destroy(tts_h tts)
 
        int ret = -1;
        int count = 0;
-       int screen_reader = -1;
 
        /* check state */
        switch (client->current_state) {
        case TTS_STATE_PAUSED:
        case TTS_STATE_PLAYING:
        case TTS_STATE_READY:
-               ret = vconf_get_bool(TTS_ACCESSIBILITY_KEY, &screen_reader);
+               ret = __tts_recheck_screen_reader();
                if (0 != ret) {
-                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to get screen reader");
-               } else {
-                       SLOG(LOG_INFO, tts_tag(), "[INFO] Success to get screen reader(%d), g_screen_reader(%s), client->mode(%d)", screen_reader, (true == g_screen_reader) ? "True" : "False", client->mode);
-                       g_screen_reader = (bool)screen_reader;
+                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to get screen reader(%d)", ret);
                }
+
+               SLOG(LOG_INFO, tts_tag(), "[INFO] g_screen_reader(%s), client->mode(%d)", (true == g_screen_reader) ? "True" : "False", client->mode);
+
                if (!(false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode)) {
                        do {
                                ret = tts_dbus_request_finalize(client->uid);
@@ -571,13 +570,11 @@ int tts_set_mode(tts_h tts, tts_mode_e mode)
 
        if (TTS_MODE_SCREEN_READER == mode) {
                int ret;
-               int screen_reader;
-               ret = vconf_get_bool(TTS_ACCESSIBILITY_KEY, &screen_reader);
+               ret = __tts_recheck_screen_reader();
                if (0 != ret) {
-                       SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get screen reader");
+                       SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get screen reader(%d)", ret);
                        return TTS_ERROR_OPERATION_FAILED;
                }
-               g_screen_reader = (bool)screen_reader;
                tts_config_set_screen_reader_callback(client->uid, __tts_screen_reader_changed_cb);
        } else {
                tts_config_unset_screen_reader_callback(client->uid);
@@ -1063,16 +1060,14 @@ int tts_unprepare(tts_h tts)
 
        int ret = -1;
        int count = 0;
-       int screen_reader = -1;
 
-       ret = vconf_get_bool(TTS_ACCESSIBILITY_KEY, &screen_reader);
+       ret = __tts_recheck_screen_reader();
        if (0 != ret) {
-               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to get screen reader");
-       } else {
-               SLOG(LOG_INFO, tts_tag(), "[INFO] Success to get screen reader(%d), g_screen_reader(%s), client->mode(%d)", screen_reader, (true == g_screen_reader) ? "True" : "False", client->mode);
-               g_screen_reader = (bool)screen_reader;
+               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to get screen reader(%d)", ret);
        }
 
+       SLOG(LOG_INFO, tts_tag(), "[INFO] g_screen_reader(%s), client->mode(%d)", (true == g_screen_reader) ? "True" : "False", client->mode);
+
        bool is_prepared = false;
        if (!(false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode)) {
                do {
@@ -1351,6 +1346,25 @@ int tts_get_error_message(tts_h tts, char** err_msg)
        return TTS_ERROR_NONE;
 }
 
+int __tts_recheck_screen_reader()
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "[DEBUG] Check screen reader again");
+
+       int ret = -1;
+       int screen_reader = 0;
+
+       ret = vconf_get_bool(TTS_ACCESSIBILITY_KEY, &screen_reader);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+               return TTS_ERROR_INVALID_STATE;
+       } else {
+               SLOG(LOG_INFO, TAG_TTSC, "[INFO] Current screen reader status(%d)", screen_reader);
+               g_screen_reader = (bool)screen_reader;
+       }
+
+       return TTS_ERROR_NONE;
+}
+
 int tts_add_text(tts_h tts, const char* text, const char* language, int voice_type, int speed, int* utt_id)
 {
        SLOG(LOG_ERROR, TAG_TTSC, "[INFO] Add text: text(%s), language(%s), type(%d)", (NULL == text) ? "NULL" : text, (NULL == language) ? "NULL" : language, voice_type);
@@ -1371,6 +1385,8 @@ int tts_add_text(tts_h tts, const char* text, const char* language, int voice_ty
 
        SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Add text");
 
+       int ret = -1;
+
        if (NULL == tts || NULL == utt_id) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is null");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -1397,8 +1413,17 @@ int tts_add_text(tts_h tts, const char* text, const char* language, int voice_ty
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader option one more time */
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
        if (true == client->credential_needed && NULL == client->credential) {
@@ -1487,7 +1512,7 @@ int tts_add_text(tts_h tts, const char* text, const char* language, int voice_ty
        }
 
        /* do request */
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -1620,8 +1645,18 @@ int tts_play_async(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader vconf one more time */
+               int ret = -1;
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
        if (true == client->credential_needed && NULL == client->credential) {
@@ -1644,6 +1679,8 @@ int tts_play(tts_h tts)
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Play tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null.");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -1665,8 +1702,17 @@ int tts_play(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader option one more time */
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
        if (true == client->credential_needed && NULL == client->credential) {
@@ -1674,7 +1720,7 @@ int tts_play(tts_h tts)
                return TTS_ERROR_PERMISSION_DENIED;
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -1809,8 +1855,17 @@ int tts_stop_aync(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader option one more time */
+               int ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
        ecore_main_loop_thread_safe_call_async(__tts_stop_async, (void*)tts);
@@ -1828,6 +1883,8 @@ int tts_stop(tts_h tts)
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Stop tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -1848,11 +1905,20 @@ int tts_stop(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader option one more time */
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -1988,8 +2054,17 @@ int tts_pause_async(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               /* check screen reader option one more time */
+               int ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
        ecore_main_loop_thread_safe_call_async(__tts_pause_async, (void*)tts);
@@ -2007,6 +2082,8 @@ int tts_pause(tts_h tts)
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Pause tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -2028,11 +2105,19 @@ int tts_pause(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -2857,6 +2942,8 @@ int tts_add_pcm(tts_h tts, int event, const void* data, unsigned int data_size,
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Add pcm tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null.");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -2877,11 +2964,19 @@ int tts_add_pcm(tts_h tts, int event, const void* data, unsigned int data_size,
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -2921,6 +3016,8 @@ int tts_play_pcm(tts_h tts)
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Play pcm tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null.");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -2941,11 +3038,19 @@ int tts_play_pcm(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {
@@ -2995,6 +3100,8 @@ int tts_stop_pcm(tts_h tts)
 
        SLOG(LOG_INFO, TAG_TTSC, "@@@ Stop pcm tts");
 
+       int ret = -1;
+
        if (NULL == tts) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input handle is null.");
                SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
@@ -3015,11 +3122,19 @@ int tts_stop_pcm(tts_h tts)
        }
 
        if (false == g_screen_reader && TTS_MODE_SCREEN_READER == client->mode) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Screen reader option is NOT available. Ignore this request");
-               return TTS_ERROR_INVALID_STATE;
+               ret = __tts_recheck_screen_reader();
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get screen reader vconf(%d)", ret);
+                       return TTS_ERROR_INVALID_STATE;
+               } else {
+                       if (false == g_screen_reader) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is NOT available.");
+                               return TTS_ERROR_INVALID_STATE;
+                       }
+               }
        }
 
-       int ret = -1;
+       ret = -1;
        int count = 0;
        bool is_prepared = false;
        while (0 != ret) {