diff options
author | Michael Dippold <michael.dippold@us.thalesgroup.com> | 2016-08-03 08:57:21 -0700 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2016-08-10 14:25:23 +0000 |
commit | efa56f540c8fbe8642b55d1b61d5ea70783c5e54 (patch) | |
tree | b7f940a28c459cdc504a374b4ad9122c622c0bbb | |
parent | a30b83f2779d018b1b5f975ee98c3db1f84896fe (diff) |
Process android notifications on Qt thread
Use invokeMethod to process the notifications generated
from the android side on the Qt thread.
Change-Id: Ie7290a380f21aa069b3fbd8fd19339137ed5400c
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
-rw-r--r-- | src/plugins/tts/android/src/qtexttospeech_android.cpp | 24 | ||||
-rw-r--r-- | src/plugins/tts/android/src/qtexttospeech_android.h | 8 |
2 files changed, 26 insertions, 6 deletions
diff --git a/src/plugins/tts/android/src/qtexttospeech_android.cpp b/src/plugins/tts/android/src/qtexttospeech_android.cpp index 39fb3ce..fba8766 100644 --- a/src/plugins/tts/android/src/qtexttospeech_android.cpp +++ b/src/plugins/tts/android/src/qtexttospeech_android.cpp @@ -54,7 +54,7 @@ static void notifyError(JNIEnv *env, jobject thiz, jlong id) if (!tts) return; - tts->setState(QTextToSpeech::BackendError); + QMetaObject::invokeMethod(tts, "processNotifyError", Qt::AutoConnection); } static void notifyReady(JNIEnv *env, jobject thiz, jlong id) @@ -63,10 +63,10 @@ static void notifyReady(JNIEnv *env, jobject thiz, jlong id) Q_UNUSED(thiz); QTextToSpeechEngineAndroid *const tts = (*textToSpeechMap)[id]; - if (!tts || tts->state() == QTextToSpeech::Paused) + if (!tts) return; - tts->setState(QTextToSpeech::Ready); + QMetaObject::invokeMethod(tts, "processNotifyReady", Qt::AutoConnection); } static void notifySpeaking(JNIEnv *env, jobject thiz, jlong id) @@ -78,7 +78,7 @@ static void notifySpeaking(JNIEnv *env, jobject thiz, jlong id) if (!tts) return; - tts->setState(QTextToSpeech::Speaking); + QMetaObject::invokeMethod(tts, "processNotifySpeaking", Qt::AutoConnection); } Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/) @@ -168,6 +168,22 @@ void QTextToSpeechEngineAndroid::setState(QTextToSpeech::State state) emit stateChanged(m_state); } +void QTextToSpeechEngineAndroid::processNotifyReady() +{ + if (m_state != QTextToSpeech::Paused) + setState(QTextToSpeech::Ready); +} + +void QTextToSpeechEngineAndroid::processNotifyError() +{ + setState(QTextToSpeech::BackendError); +} + +void QTextToSpeechEngineAndroid::processNotifySpeaking() +{ + setState(QTextToSpeech::Speaking); +} + void QTextToSpeechEngineAndroid::stop() { if (m_state == QTextToSpeech::Ready) diff --git a/src/plugins/tts/android/src/qtexttospeech_android.h b/src/plugins/tts/android/src/qtexttospeech_android.h index 81a90bf..60cb32d 100644 --- a/src/plugins/tts/android/src/qtexttospeech_android.h +++ b/src/plugins/tts/android/src/qtexttospeech_android.h @@ -74,13 +74,17 @@ public: bool setVoice(const QVoice &voice) override; QTextToSpeech::State state() const override; - void setState(QTextToSpeech::State state); +public Q_SLOTS: + void processNotifyReady(); + void processNotifyError(); + void processNotifySpeaking(); private: + void setState(QTextToSpeech::State state); + QJNIObjectPrivate m_speech; QTextToSpeech::State m_state; QString m_text; - }; QT_END_NAMESPACE |