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