diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 11:30:31 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 11:30:31 +0000 |
commit | bd57b4d5971c6062abed614c38772e129f011026 (patch) | |
tree | 9d1380967acae4b216af3887794c294dde240292 | |
parent | f53eba128d2e455b0c827b08eeeb91b45c295515 (diff) | |
download | chromium_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.java | 40 | ||||
-rw-r--r-- | chrome/browser/speech/tts_android.cc | 6 |
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(); |