Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65d99c3c authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 7537 into donut

* changes:
  Fixing a race condition that causes synthesis to not be aborted even if stop is called.
parents 2493097c c231fd0f
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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);
                        }
                    }
                    // 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);
                        }
                    }
                    // 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();