Merge "Fix crash with engines that don't override getVoices()." into mnc-dev

This commit is contained in:
Niels Egberts
2015-06-29 09:34:41 +00:00
committed by Android (Google) Code Review
2 changed files with 16 additions and 3 deletions

View File

@@ -1486,19 +1486,28 @@ public class TextToSpeech {
// Get the default voice for the locale.
String voiceName = service.getDefaultVoiceNameFor(language, country, variant);
if (TextUtils.isEmpty(voiceName)) {
Log.w(TAG, "Couldn't find the default voice for " + language + "/" +
country + "/" + variant);
Log.w(TAG, "Couldn't find the default voice for " + language + "-" +
country + "-" + variant);
return LANG_NOT_SUPPORTED;
}
// Load it.
if (service.loadVoice(getCallerIdentity(), voiceName) == TextToSpeech.ERROR) {
Log.w(TAG, "The service claimed " + language + "-" + country + "-"
+ variant + " was available with voice name " + voiceName
+ " but loadVoice returned ERROR");
return LANG_NOT_SUPPORTED;
}
// Set the language/country/variant of the voice, so #getLanguage will return
// the currently set voice locale when called.
Voice voice = getVoice(service, voiceName);
if (voice == null) {
Log.w(TAG, "getDefaultVoiceNameFor returned " + voiceName + " for locale "
+ language + "-" + country + "-" + variant
+ " but getVoice returns null");
return LANG_NOT_SUPPORTED;
}
String voiceLanguage = "";
try {
voiceLanguage = voice.getLocale().getISO3Language();
@@ -1682,6 +1691,7 @@ public class TextToSpeech {
private Voice getVoice(ITextToSpeechService service, String voiceName) throws RemoteException {
List<Voice> voices = service.getVoices();
if (voices == null) {
Log.w(TAG, "getVoices returned null");
return null;
}
for (Voice voice : voices) {
@@ -1689,6 +1699,7 @@ public class TextToSpeech {
return voice;
}
}
Log.w(TAG, "Could not find voice " + voiceName + " in voice list");
return null;
}

View File

@@ -293,7 +293,9 @@ public abstract class TextToSpeechService extends Service {
}
Set<String> features = onGetFeaturesForLanguage(locale.getISO3Language(),
locale.getISO3Country(), locale.getVariant());
voices.add(new Voice(locale.toLanguageTag(), locale, Voice.QUALITY_NORMAL,
String voiceName = onGetDefaultVoiceNameFor(locale.getISO3Language(),
locale.getISO3Country(), locale.getVariant());
voices.add(new Voice(voiceName, locale, Voice.QUALITY_NORMAL,
Voice.LATENCY_NORMAL, false, features));
}
return voices;