client->tts = temp;
client->pid = getpid();
client->uid = temp->handle;
+ client->current_service_state = TTS_SERVICE_STATE_NONE;
pthread_mutex_lock(&g_client_list_mutex);
g_client_list = g_list_append(g_client_list, client);
return client->current_state;
}
+void tts_client_set_current_service_state(tts_client_s* client, tts_service_state_e service_state)
+{
+ if (false == tts_client_is_valid_client(client)) {
+ return;
+ }
+
+ client->current_service_state = service_state;
+}
+
+tts_service_state_e tts_client_get_current_service_state(tts_client_s* client)
+{
+ if (false == tts_client_is_valid_client(client)) {
+ return TTS_SERVICE_STATE_NONE;
+ }
+
+ return client->current_service_state;
+}
+
void tts_client_set_start_listening(unsigned int uid, bool is_listening_started)
{
tts_client_s* client = tts_client_get_by_uid(uid);
return EINA_FALSE;
}
-static int __prepare_sync_cb(tts_client_s* client)
+static int __prepare_sync_cb(tts_client_s* client, tts_service_state_e* service_state)
{
// TODO: make function duplicated block
bool is_launched = __is_engine_launched();
// TODO: make function duplicated block
/* do request initialize */
bool credential_needed = false;
- tts_service_state_e service_state = TTS_SERVICE_STATE_READY;
+ tts_service_state_e tmp_service_state = TTS_SERVICE_STATE_NONE;
tts_mode_e mode = tts_client_get_mode(client);
int registered_callback_mask = tts_client_get_registered_event_mask(client);
- int ret = tts_ipc_request_initialize(uid, mode, registered_callback_mask, &service_state, &credential_needed);
+ int ret = tts_ipc_request_initialize(uid, mode, registered_callback_mask, &tmp_service_state, &credential_needed);
if (TTS_ERROR_ENGINE_NOT_FOUND == ret || TTS_ERROR_PERMISSION_DENIED == ret) {
SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to initialize. ret(%d/%s)", ret, get_error_message(ret));
tts_core_notify_error_async(client, ret, -1, NULL);
}
// TODO: make function duplicated block
+ *service_state = tmp_service_state;
SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
return TTS_ERROR_NONE;
}
if (NULL != callback) {
SLOG(LOG_DEBUG, TAG_TTSC, "Notify service state changed");
+ tts_client_set_current_service_state(client, current_state);
+
tts_client_use_callback(client);
callback(tts_client_get_handle(client), before_state, current_state, data);
tts_client_not_use_callback(client);
}
//LCOV_EXCL_STOP
-int tts_core_receive_hello(unsigned int uid, int ret, int credential_needed)
+int tts_core_receive_hello(unsigned int uid, int ret, tts_service_state_e service_state, int credential_needed)
{
tts_client_s* client = tts_client_get_by_uid(uid);
RETVM_IF(NULL == client, TTS_ERROR_OPERATION_FAILED, "Fail to get TTS client or ignore this uid(%u)", uid);
tts_core_notify_state_changed(client, TTS_STATE_READY);
+ tts_service_state_e before_state = tts_client_get_current_service_state(client);
+ tts_core_notify_service_state_changed(client, before_state, service_state);
+
SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
return TTS_ERROR_NONE;
}
RETVM_IF(false == tts_client_is_valid_client(client), TTS_ERROR_INVALID_PARAMETER, "[ERROR] Client is invalid.");
unsigned int uid = tts_client_get_uid(client);
+ tts_service_state_e service_state = TTS_SERVICE_STATE_NONE;
SLOG(LOG_INFO, TAG_TTSC, "[INFO] Start core_prepare_sync. tts_h(%p), tts_client(%p), uid(%u)", tts_client_get_handle(client), client, uid);
int cnt = 0;
while (TTS_CONNECTION_RETRY_COUNT > cnt) {
return TTS_ERROR_SCREEN_READER_OFF;
}
- int ret = __prepare_sync_cb(client);
+ int ret = __prepare_sync_cb(client, &service_state);
if (TTS_ERROR_NONE == ret) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] Prepare succeeds. uid(%u)", uid);
break;
tts_core_notify_state_changed(client, TTS_STATE_READY);
+ tts_service_state_e before_state = tts_client_get_current_service_state(client);
+ tts_core_notify_service_state_changed(client, before_state, service_state);
+
SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
return TTS_ERROR_NONE;
}