blob: bbad4c13ff5289809b2d38ed448898c0290d4ec8 [file] [log] [blame]
package android.support.v4.speech.tts;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
import java.util.Locale;
import java.util.Set;
/** Helper class for TTS functionality introduced in ICS MR1 */
class TextToSpeechICSMR1 {
/**
* Call {@link TextToSpeech#getFeatures} if available.
*
* @return {@link TextToSpeech#getFeatures} or null on older devices.
*/
static Set<String> getFeatures(TextToSpeech tts, Locale locale) {
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
return tts.getFeatures(locale);
}
return null;
}
public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
public static final String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
static interface UtteranceProgressListenerICSMR1 {
void onDone(String utteranceId);
void onError(String utteranceId);
void onStart(String utteranceId);
}
/**
* Call {@link TextToSpeech#setOnUtteranceProgressListener} if ICS-MR1 or newer.
*
* On pre ICS-MR1 devices,{@link TextToSpeech#setOnUtteranceCompletedListener} is
* used to emulate its behavior - at the end of synthesis we call
* {@link UtteranceProgressListenerICSMR1#onStart(String)} and
* {@link UtteranceProgressListenerICSMR1#onDone(String)} one after the other.
* Errors can't be detected.
*/
static void setUtteranceProgressListener(TextToSpeech tts,
final UtteranceProgressListenerICSMR1 listener) {
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
listener.onStart(utteranceId);
}
@Override
public void onError(String utteranceId) {
listener.onError(utteranceId);
}
@Override
public void onDone(String utteranceId) {
listener.onDone(utteranceId);
}
});
} else {
tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {
@Override
public void onUtteranceCompleted(String utteranceId) {
// Emulate onStart. Clients are expecting it will happen.
listener.onStart(utteranceId);
listener.onDone(utteranceId);
}
});
}
}
}