|
|
@@ -38,6 +38,7 @@ import android.speech.tts.SynthesisRequest; |
|
|
|
import android.speech.tts.TextToSpeech; |
|
|
|
import android.speech.tts.TextToSpeechService; |
|
|
|
import android.util.Log; |
|
|
|
import android.util.Pair; |
|
|
|
|
|
|
|
import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback; |
|
|
|
|
|
|
@@ -116,8 +117,7 @@ public class TtsService extends TextToSpeechService { |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected int onIsLanguageAvailable(String language, String country, String variant) { |
|
|
|
private Pair<Voice, Integer> findVoice(String language, String country, String variant) { |
|
|
|
if (!CheckVoiceData.hasBaseResources(this) || CheckVoiceData.canUpgradeResources(this)) { |
|
|
|
if (mOnLanguagesDownloaded == null) { |
|
|
|
mOnLanguagesDownloaded = new BroadcastReceiver() { |
|
|
@@ -135,7 +135,7 @@ public class TtsService extends TextToSpeechService { |
|
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
|
|
|
startActivity(intent); |
|
|
|
|
|
|
|
return TextToSpeech.LANG_MISSING_DATA; |
|
|
|
return new Pair<>(null, TextToSpeech.LANG_MISSING_DATA); |
|
|
|
} |
|
|
|
|
|
|
|
final Locale query = new Locale(language, country, variant); |
|
|
@@ -147,8 +147,7 @@ public class TtsService extends TextToSpeechService { |
|
|
|
for (Voice voice : mAvailableVoices.values()) { |
|
|
|
switch (voice.match(query)) { |
|
|
|
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE: |
|
|
|
mMatchingVoice = voice; |
|
|
|
return TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE; |
|
|
|
return new Pair<>(voice, TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE); |
|
|
|
case TextToSpeech.LANG_COUNTRY_AVAILABLE: |
|
|
|
countryVoice = voice; |
|
|
|
case TextToSpeech.LANG_AVAILABLE: |
|
|
@@ -159,17 +158,21 @@ public class TtsService extends TextToSpeechService { |
|
|
|
} |
|
|
|
|
|
|
|
if (languageVoice == null) { |
|
|
|
mMatchingVoice = null; |
|
|
|
return TextToSpeech.LANG_NOT_SUPPORTED; |
|
|
|
return new Pair<>(null, TextToSpeech.LANG_NOT_SUPPORTED); |
|
|
|
} else if (countryVoice == null) { |
|
|
|
mMatchingVoice = languageVoice; |
|
|
|
return TextToSpeech.LANG_AVAILABLE; |
|
|
|
return new Pair<>(languageVoice, TextToSpeech.LANG_AVAILABLE); |
|
|
|
} else { |
|
|
|
mMatchingVoice = countryVoice; |
|
|
|
return TextToSpeech.LANG_COUNTRY_AVAILABLE; |
|
|
|
return new Pair<>(countryVoice, TextToSpeech.LANG_COUNTRY_AVAILABLE); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected int onIsLanguageAvailable(String language, String country, String variant) { |
|
|
|
final Pair<Voice, Integer> match = findVoice(language, country, variant); |
|
|
|
mMatchingVoice = match.first; |
|
|
|
return match.second; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected int onLoadLanguage(String language, String country, String variant) { |
|
|
|
final int result = onIsLanguageAvailable(language, country, variant); |