summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Dippold <michael.dippold@us.thalesgroup.com>2016-08-03 08:57:21 -0700
committerMaurice Kalinowski <maurice.kalinowski@qt.io>2016-08-10 14:25:23 +0000
commitefa56f540c8fbe8642b55d1b61d5ea70783c5e54 (patch)
treeb7f940a28c459cdc504a374b4ad9122c622c0bbb
parenta30b83f2779d018b1b5f975ee98c3db1f84896fe (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.cpp24
-rw-r--r--src/plugins/tts/android/src/qtexttospeech_android.h8
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