diff options
-rwxr-xr-x | packages/TtsService/src/android/tts/TtsService.java | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/packages/TtsService/src/android/tts/TtsService.java b/packages/TtsService/src/android/tts/TtsService.java index 1b99d32..70960b5 100755 --- a/packages/TtsService/src/android/tts/TtsService.java +++ b/packages/TtsService/src/android/tts/TtsService.java @@ -142,6 +142,8 @@ public class TtsService extends Service implements OnCompletionListener { private final ReentrantLock synthesizerLock = new ReentrantLock(); private static SynthProxy sNativeSynth = null; + private static Boolean sIsKillingSynth = true; + @Override public void onCreate() { super.onCreate(); @@ -152,6 +154,7 @@ public class TtsService extends Service implements OnCompletionListener { String soLibPath = "/system/lib/libttspico.so"; if (sNativeSynth == null) { sNativeSynth = new SynthProxy(soLibPath); + sIsKillingSynth = false; } mSelf = this; @@ -172,6 +175,9 @@ public class TtsService extends Service implements OnCompletionListener { @Override public void onDestroy() { super.onDestroy(); + + sIsKillingSynth = true; + Log.i("TtsService", "TtsService.onDestroy()"); // Don't hog the media player cleanUpPlayer(); @@ -180,6 +186,7 @@ public class TtsService extends Service implements OnCompletionListener { // Unregister all callbacks. mCallbacks.kill(); + //Log.i("TtsService", "TtsService.onDestroy() ended"); } @@ -243,6 +250,9 @@ public class TtsService extends Service implements OnCompletionListener { private int setSpeechRate(String callingApp, int rate) { + if (sIsKillingSynth) { + return TextToSpeech.ERROR; + } if (isDefaultEnforced()) { return sNativeSynth.setSpeechRate(getDefaultRate()); } else { @@ -252,23 +262,37 @@ public class TtsService extends Service implements OnCompletionListener { private int setPitch(String callingApp, int pitch) { + if (sIsKillingSynth) { + return TextToSpeech.ERROR; + } return sNativeSynth.setPitch(pitch); } private int isLanguageAvailable(String lang, String country, String variant) { + if (sIsKillingSynth) { + return TextToSpeech.LANG_NOT_SUPPORTED; + } //Log.v("TtsService", "TtsService.isLanguageAvailable(" + lang + ", " + country + ", " +variant+")"); return sNativeSynth.isLanguageAvailable(lang, country, variant); } private String[] getLanguage() { + if (sIsKillingSynth) { + Log.v("TtsService", "killing synth:: aborting getLanguage()"); + return null; + } return sNativeSynth.getLanguage(); } private int setLanguage(String callingApp, String lang, String country, String variant) { Log.v("TtsService", "TtsService.setLanguage(" + lang + ", " + country + ", " + variant + ")"); + if (sIsKillingSynth) { + Log.v("TtsService", "killing synth:: aborting setLanguage()"); + return TextToSpeech.ERROR; + } if (isDefaultEnforced()) { return sNativeSynth.setLanguage(getDefaultLanguage(), getDefaultCountry(), getDefaultLocVariant()); @@ -402,7 +426,12 @@ public class TtsService extends Service implements OnCompletionListener { } if ((mCurrentSpeechItem != null) && mCurrentSpeechItem.mCallingApp.equals(callingApp)) { - result = sNativeSynth.stop(); + if (sIsKillingSynth) { + Log.v("TtsService", "killing synth:: aborting stop()"); + result = TextToSpeech.ERROR; + } else { + result = sNativeSynth.stop(); + } mKillList.put(mCurrentSpeechItem, true); if (mPlayer != null) { try { @@ -451,7 +480,12 @@ public class TtsService extends Service implements OnCompletionListener { if ((mCurrentSpeechItem != null) && ((mCurrentSpeechItem.mType != SpeechItem.TEXT_TO_FILE) || mCurrentSpeechItem.mCallingApp.equals(callingApp))) { - result = sNativeSynth.stop(); + if (sIsKillingSynth) { + Log.v("TtsService", "killing synth:: aborting stop()"); + result = TextToSpeech.ERROR; + } else { + result = sNativeSynth.stop(); + } mKillList.put(mCurrentSpeechItem, true); if (mPlayer != null) { try { @@ -591,7 +625,9 @@ public class TtsService extends Service implements OnCompletionListener { if (speechRate.length() > 0){ setSpeechRate("", Integer.parseInt(speechRate)); } - sNativeSynth.speak(speechItem.mText, streamType); + if (!sIsKillingSynth) { + sNativeSynth.speak(speechItem.mText, streamType); + } } } catch (InterruptedException e) { Log.e("TtsService", "TTS speakInternalOnly(): tryLock interrupted"); @@ -660,7 +696,9 @@ public class TtsService extends Service implements OnCompletionListener { if (speechRate.length() > 0){ setSpeechRate("", Integer.parseInt(speechRate)); } - sNativeSynth.synthesizeToFile(speechItem.mText, speechItem.mFilename); + if (!sIsKillingSynth) { + sNativeSynth.synthesizeToFile(speechItem.mText, speechItem.mFilename); + } } } catch (InterruptedException e) { Log.e("TtsService", "TTS synthToFileInternalOnly(): tryLock interrupted"); |