diff options
author | Charles Chen <clchen@google.com> | 2009-07-16 11:28:09 -0700 |
---|---|---|
committer | Charles Chen <clchen@google.com> | 2009-07-16 11:29:34 -0700 |
commit | c231fd0fe7814a025aeb05796542048a51d0236b (patch) | |
tree | aae090187c863752734d3683add3a2d96b433626 /packages/TtsService/src/android/tts/TtsService.java | |
parent | 82b283a9bf8e3508e1b5c6d4b6b8cae04597b83c (diff) | |
download | frameworks_base-c231fd0fe7814a025aeb05796542048a51d0236b.zip frameworks_base-c231fd0fe7814a025aeb05796542048a51d0236b.tar.gz frameworks_base-c231fd0fe7814a025aeb05796542048a51d0236b.tar.bz2 |
Fixing a race condition that causes synthesis to not be aborted
even if stop is called.
Diffstat (limited to 'packages/TtsService/src/android/tts/TtsService.java')
-rwxr-xr-x | packages/TtsService/src/android/tts/TtsService.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/packages/TtsService/src/android/tts/TtsService.java b/packages/TtsService/src/android/tts/TtsService.java index 7c4996e..b3b580c 100755 --- a/packages/TtsService/src/android/tts/TtsService.java +++ b/packages/TtsService/src/android/tts/TtsService.java @@ -130,6 +130,8 @@ public class TtsService extends Service implements OnCompletionListener { private HashMap<String, SoundResource> mUtterances; private MediaPlayer mPlayer; private SpeechItem mCurrentSpeechItem; + private HashMap<SpeechItem, Boolean> mKillList; // Used to ensure that in-flight synth calls + // are killed when stop is used. private TtsService mSelf; private ContentResolver mResolver; @@ -158,6 +160,7 @@ public class TtsService extends Service implements OnCompletionListener { mSpeechQueue = new ArrayList<SpeechItem>(); mPlayer = null; mCurrentSpeechItem = null; + mKillList = new HashMap<SpeechItem, Boolean>(); setDefaultSettings(); } @@ -396,6 +399,7 @@ public class TtsService extends Service implements OnCompletionListener { if ((mCurrentSpeechItem != null) && mCurrentSpeechItem.mCallingApp.equals(callingApp)) { result = nativeSynth.stop(); + mKillList.put(mCurrentSpeechItem, true); if (mPlayer != null) { try { mPlayer.stop(); @@ -445,6 +449,7 @@ public class TtsService extends Service implements OnCompletionListener { ((mCurrentSpeechItem.mType != SpeechItem.TEXT_TO_FILE) || mCurrentSpeechItem.mCallingApp.equals(callingApp))) { result = nativeSynth.stop(); + mKillList.put(mCurrentSpeechItem, true); if (mPlayer != null) { try { mPlayer.stop(); @@ -578,7 +583,10 @@ public class TtsService extends Service implements OnCompletionListener { setLanguage("", language, country, variant); } } - nativeSynth.speak(speechItem.mText, streamType); + // Only do the synthesis if it has not been killed by a subsequent utterance. + if (mKillList.get(speechItem) == null){ + nativeSynth.speak(speechItem.mText, streamType); + } } catch (InterruptedException e) { Log.e("TTS speakInternalOnly", "tryLock interrupted"); e.printStackTrace(); @@ -641,7 +649,10 @@ public class TtsService extends Service implements OnCompletionListener { setLanguage("", language, country, variant); } } - nativeSynth.synthesizeToFile(speechItem.mText, speechItem.mFilename); + // Only do the synthesis if it has not been killed by a subsequent utterance. + if (mKillList.get(speechItem) == null){ + nativeSynth.synthesizeToFile(speechItem.mText, speechItem.mFilename); + } } catch (InterruptedException e) { Log.e("TTS synthToFileInternalOnly", "tryLock interrupted"); e.printStackTrace(); |