summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-16 11:30:31 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-16 11:30:31 +0000
commitbd57b4d5971c6062abed614c38772e129f011026 (patch)
tree9d1380967acae4b216af3887794c294dde240292
parentf53eba128d2e455b0c827b08eeeb91b45c295515 (diff)
downloadchromium_src-bd57b4d5971c6062abed614c38772e129f011026.zip
chromium_src-bd57b4d5971c6062abed614c38772e129f011026.tar.gz
chromium_src-bd57b4d5971c6062abed614c38772e129f011026.tar.bz2
Keep pending utterance while Android TextToSpeech is initializing.
BUG=363296 Review URL: https://codereview.chromium.org/225113004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264171 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java40
-rw-r--r--chrome/browser/speech/tts_android.cc6
2 files changed, 37 insertions, 9 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
index e6242b7..916533b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
@@ -34,11 +34,37 @@ class TtsPlatformImpl {
private final String mLanguage;
}
+ private static class PendingUtterance {
+ private PendingUtterance(TtsPlatformImpl impl, int utteranceId, String text,
+ String lang, float rate, float pitch, float volume) {
+ mImpl = impl;
+ mUtteranceId = utteranceId;
+ mText = text;
+ mLang = lang;
+ mRate = rate;
+ mPitch = pitch;
+ mVolume = volume;
+ }
+
+ private void speak() {
+ mImpl.speak(mUtteranceId, mText, mLang, mRate, mPitch, mVolume);
+ }
+
+ TtsPlatformImpl mImpl;
+ int mUtteranceId;
+ String mText;
+ String mLang;
+ float mRate;
+ float mPitch;
+ float mVolume;
+ }
+
private long mNativeTtsPlatformImplAndroid;
private final TextToSpeech mTextToSpeech;
private boolean mInitialized;
private ArrayList<TtsVoice> mVoices;
private String mCurrentLanguage;
+ private PendingUtterance mPendingUtterance;
private TtsPlatformImpl(long nativeTtsPlatformImplAndroid, Context context) {
mInitialized = false;
@@ -172,7 +198,13 @@ class TtsPlatformImpl {
@CalledByNative
private boolean speak(int utteranceId, String text, String lang,
float rate, float pitch, float volume) {
- assert mInitialized == true;
+ if (!mInitialized) {
+ mPendingUtterance = new PendingUtterance(this, utteranceId, text, lang, rate,
+ pitch, volume);
+ return true;
+ }
+ if (mPendingUtterance != null) mPendingUtterance = null;
+
if (!lang.equals(mCurrentLanguage)) {
mTextToSpeech.setLanguage(new Locale(lang));
mCurrentLanguage = lang;
@@ -194,8 +226,8 @@ class TtsPlatformImpl {
*/
@CalledByNative
private void stop() {
- assert mInitialized == true;
- mTextToSpeech.stop();
+ if (mInitialized) mTextToSpeech.stop();
+ if (mPendingUtterance != null) mPendingUtterance = null;
}
/**
@@ -230,6 +262,8 @@ class TtsPlatformImpl {
mInitialized = true;
nativeVoicesChanged(mNativeTtsPlatformImplAndroid);
+
+ if (mPendingUtterance != null) mPendingUtterance.speak();
}
private native void nativeVoicesChanged(long nativeTtsPlatformImplAndroid);
diff --git a/chrome/browser/speech/tts_android.cc b/chrome/browser/speech/tts_android.cc
index 7acf06237..e196e8d 100644
--- a/chrome/browser/speech/tts_android.cc
+++ b/chrome/browser/speech/tts_android.cc
@@ -44,9 +44,6 @@ bool TtsPlatformImplAndroid::Speak(
const VoiceData& voice,
const UtteranceContinuousParameters& params) {
JNIEnv* env = AttachCurrentThread();
- if (!Java_TtsPlatformImpl_isInitialized(env, java_ref_.obj()))
- return false;
-
jboolean success = Java_TtsPlatformImpl_speak(
env, java_ref_.obj(),
utterance_id,
@@ -63,9 +60,6 @@ bool TtsPlatformImplAndroid::Speak(
bool TtsPlatformImplAndroid::StopSpeaking() {
JNIEnv* env = AttachCurrentThread();
- if (!Java_TtsPlatformImpl_isInitialized(env, java_ref_.obj()))
- return false;
-
Java_TtsPlatformImpl_stop(env, java_ref_.obj());
utterance_id_ = 0;
utterance_.clear();