TtsService: fix and test onGetVoice.

The default Android 5.0 implementation enumerates the available
locales. This enumerates the voices returned by eSpeak.
This commit is contained in:
Reece H. Dunn
2014-10-29 18:21:31 +00:00
parent 702f8be24f
commit f9912e0c41
2 changed files with 79 additions and 1 deletions
@@ -16,8 +16,12 @@
package com.reecedunn.espeak.test;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import android.annotation.SuppressLint;
import android.os.Build;
import android.speech.tts.TextToSpeech;
import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
@@ -26,6 +30,73 @@ import static org.hamcrest.Matchers.*;
public class TextToSpeechTest extends TextToSpeechTestCase
{
private Set<Object> mVoices = null;
private Set<String> mAdded = new HashSet<String>();
private Set<String> mRemoved = new HashSet<String>();
@SuppressLint("NewApi")
public Set<Object> getVoices()
{
if (mVoices == null)
{
Set<android.speech.tts.Voice> voiceData = getEngine().getVoices();
assertThat(voiceData, is(notNullValue()));
mVoices = new HashSet<Object>();
for (android.speech.tts.Voice voice : voiceData)
{
mVoices.add(voice);
}
Set<String> voices = new HashSet<String>();
for (Object data : mVoices)
{
voices.add(((android.speech.tts.Voice)data).getName());
}
Set<String> expected = new HashSet<String>();
for (VoiceData.Voice data : VoiceData.voices)
{
expected.add(data.name);
}
for (String voice : voices)
{
if (!expected.contains(voice))
{
mAdded.add(voice);
}
}
for (String voice : expected)
{
if (!voices.contains(voice))
{
mRemoved.add(voice);
}
}
}
return mVoices;
}
public void testAddedVoices()
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
return;
getVoices(); // Ensure that the voice data has been populated.
assertThat(mAdded.toString(), is("[]"));
}
public void testRemovedVoices()
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
return;
getVoices(); // Ensure that the voice data has been populated.
assertThat(mRemoved.toString(), is("[]"));
}
public void testUnsupportedLanguage()
{
assertThat(getEngine(), is(notNullValue()));
@@ -41,6 +41,7 @@ import android.util.Log;
import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -205,7 +206,13 @@ public class TtsService extends TextToSpeechService {
@Override
public List<android.speech.tts.Voice> onGetVoices() {
return super.onGetVoices();
List<android.speech.tts.Voice> voices = new ArrayList<android.speech.tts.Voice>();
for (Voice voice : mAvailableVoices) {
int quality = android.speech.tts.Voice.QUALITY_NORMAL;
int latency = android.speech.tts.Voice.LATENCY_VERY_LOW;
voices.add(new android.speech.tts.Voice(voice.name, voice.locale, quality, latency, false, null));
}
return voices;
}
@Override