Merge change 7537 into donut
* changes: Fixing a race condition that causes synthesis to not be aborted even if stop is called.
This commit is contained in:
@@ -130,6 +130,8 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
private HashMap<String, SoundResource> mUtterances;
|
private HashMap<String, SoundResource> mUtterances;
|
||||||
private MediaPlayer mPlayer;
|
private MediaPlayer mPlayer;
|
||||||
private SpeechItem mCurrentSpeechItem;
|
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 TtsService mSelf;
|
||||||
|
|
||||||
private ContentResolver mResolver;
|
private ContentResolver mResolver;
|
||||||
@@ -158,6 +160,7 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
mSpeechQueue = new ArrayList<SpeechItem>();
|
mSpeechQueue = new ArrayList<SpeechItem>();
|
||||||
mPlayer = null;
|
mPlayer = null;
|
||||||
mCurrentSpeechItem = null;
|
mCurrentSpeechItem = null;
|
||||||
|
mKillList = new HashMap<SpeechItem, Boolean>();
|
||||||
|
|
||||||
setDefaultSettings();
|
setDefaultSettings();
|
||||||
}
|
}
|
||||||
@@ -396,6 +399,7 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
if ((mCurrentSpeechItem != null) &&
|
if ((mCurrentSpeechItem != null) &&
|
||||||
mCurrentSpeechItem.mCallingApp.equals(callingApp)) {
|
mCurrentSpeechItem.mCallingApp.equals(callingApp)) {
|
||||||
result = nativeSynth.stop();
|
result = nativeSynth.stop();
|
||||||
|
mKillList.put(mCurrentSpeechItem, true);
|
||||||
if (mPlayer != null) {
|
if (mPlayer != null) {
|
||||||
try {
|
try {
|
||||||
mPlayer.stop();
|
mPlayer.stop();
|
||||||
@@ -445,6 +449,7 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
((mCurrentSpeechItem.mType != SpeechItem.TEXT_TO_FILE) ||
|
((mCurrentSpeechItem.mType != SpeechItem.TEXT_TO_FILE) ||
|
||||||
mCurrentSpeechItem.mCallingApp.equals(callingApp))) {
|
mCurrentSpeechItem.mCallingApp.equals(callingApp))) {
|
||||||
result = nativeSynth.stop();
|
result = nativeSynth.stop();
|
||||||
|
mKillList.put(mCurrentSpeechItem, true);
|
||||||
if (mPlayer != null) {
|
if (mPlayer != null) {
|
||||||
try {
|
try {
|
||||||
mPlayer.stop();
|
mPlayer.stop();
|
||||||
@@ -578,7 +583,10 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
setLanguage("", language, country, variant);
|
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) {
|
} catch (InterruptedException e) {
|
||||||
Log.e("TTS speakInternalOnly", "tryLock interrupted");
|
Log.e("TTS speakInternalOnly", "tryLock interrupted");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -641,7 +649,10 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
setLanguage("", language, country, variant);
|
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) {
|
} catch (InterruptedException e) {
|
||||||
Log.e("TTS synthToFileInternalOnly", "tryLock interrupted");
|
Log.e("TTS synthToFileInternalOnly", "tryLock interrupted");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
Reference in New Issue
Block a user