1168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanpackage com.android.car.messenger.tts; 2168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 3168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanimport android.content.Context; 4168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanimport android.os.Bundle; 5168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanimport android.speech.tts.TextToSpeech; 6168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanimport android.speech.tts.UtteranceProgressListener; 7168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 8168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan/** 9168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan * Implementation of {@link TTSEngine} that delegates to Android's {@link TextToSpeech} API. 10168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan * <p> 11168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan * NOTE: {@link #initialize(Context, TextToSpeech.OnInitListener)} must be called to use this 12168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan * engine. After {@link #shutdown()}, {@link #initialize(Context, TextToSpeech.OnInitListener)} may 13168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan * be called again to use it again. 14168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan */ 15168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathanclass AndroidTTSEngine implements TTSEngine { 16168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan private TextToSpeech mTextToSpeech; 17168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 18168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 19168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public void initialize(Context context, TextToSpeech.OnInitListener initListener) { 20168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan if (mTextToSpeech == null) { 21168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan mTextToSpeech = new TextToSpeech(context, initListener); 22168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 23168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 24168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 25168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 26168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public boolean isInitialized() { 27168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan return mTextToSpeech != null; 28168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 29168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 30168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 31168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public void setOnUtteranceProgressListener(UtteranceProgressListener progressListener) { 32168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan mTextToSpeech.setOnUtteranceProgressListener(progressListener); 33168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 34168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 35168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 36168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public int speak(CharSequence text, int queueMode, Bundle params, String utteranceId) { 37168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan return mTextToSpeech.speak(text, queueMode, params, utteranceId); 38168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 39168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 40168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 41168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public void stop() { 42168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan mTextToSpeech.stop(); 43168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 44168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan 45168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan @Override 464a5024d82db356bc7c6e0848c80f4f0d7e213a0eSrinivas Visvanathan public boolean isSpeaking() { 474a5024d82db356bc7c6e0848c80f4f0d7e213a0eSrinivas Visvanathan return mTextToSpeech != null ? mTextToSpeech.isSpeaking() : false; 484a5024d82db356bc7c6e0848c80f4f0d7e213a0eSrinivas Visvanathan } 494a5024d82db356bc7c6e0848c80f4f0d7e213a0eSrinivas Visvanathan 504a5024d82db356bc7c6e0848c80f4f0d7e213a0eSrinivas Visvanathan @Override 51168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan public void shutdown() { 52168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan mTextToSpeech.shutdown(); 53168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan mTextToSpeech = null; 54168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan } 55168fc36b549a3bdda30fa40b0da0379a23b062c9Srinivas Visvanathan} 56