Add screen reader check when client try to prepare 98/260698/2
authorSuyeon Hwang <stom.hwang@samsung.com>
Thu, 1 Jul 2021 07:28:22 +0000 (16:28 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Fri, 2 Jul 2021 05:16:58 +0000 (14:16 +0900)
If service engine terminates without unprepare by some purpose such as disable screen reader on TV,
some clients try to reprepare by service reset message.
In this case, prepare by service reset is not intended behavior.
Thus, this patch adds checking screen reader option code to avoid prepare by screen reader disable.

Change-Id: If93ded568eae17bdf019c8f4d109d45ce542800e
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
client/tts_core.c

index be0e247ab7165966430d7078dffaf2a50fcb2fe0..7a4df9a140bb389ede1efd7dacd290e0701d80d1 100644 (file)
@@ -413,6 +413,11 @@ static int __send_hello_msg(tts_client_s* client)
                return TTS_ERROR_INVALID_STATE;
        }
 
+       if (false == tts_core_check_screen_reader(client)) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is not available");
+               return TTS_ERROR_INVALID_STATE;
+       }
+
        int uid = tts_client_get_uid(client);
        SLOG(LOG_INFO, TAG_TTSC, "[INFO] tts_h(%p), tts_client(%p), uid(%d)", tts_client_get_handle(client), client, uid);
 
@@ -1016,6 +1021,11 @@ int tts_core_prepare(tts_client_s* client)
                return TTS_ERROR_INVALID_PARAMETER;
        }
 
+       if (false == tts_core_check_screen_reader(client)) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is not available");
+               return TTS_ERROR_INVALID_STATE;
+       }
+
        SLOG(LOG_INFO, TAG_TTSC, "[INFO] Start core_prepare. tts_h(%p), tts_client(%p)", tts_client_get_handle(client), client);
        if (NULL == client->hello_timer) {
                SLOG(LOG_ERROR, TAG_TTSC, "Register timer for __prepare_first_cb");
@@ -1040,7 +1050,16 @@ int tts_core_prepare_sync(tts_client_s* client)
 
        SLOG(LOG_INFO, TAG_TTSC, "[INFO] Start core_prepare_sync. tts_h(%p), tts_client(%p), uid(%d)", tts_client_get_handle(client), client, tts_client_get_uid(client));
        int cnt = 0;
-       while (EINA_TRUE == __prepare_sync_cb(client) && TTS_CONNECTION_RETRY_COUNT > cnt) {
+       while (TTS_CONNECTION_RETRY_COUNT > cnt) {
+               if (false == tts_core_check_screen_reader(client)) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Screen reader option is not available");
+                       return TTS_ERROR_INVALID_STATE;
+               }
+
+               if (EINA_FALSE == __prepare_sync_cb(client)) {
+                       break;
+               }
+
                cnt++;
        }