Update the Text-To-Speech settings screen to allow listening to a TTS

example after checking that the data required by the TTS engine is
properly installed.
Removed use of local constants for the the default TTS values, use
the values defined in TextToSpeech.Engine instead.
This commit is contained in:
Jean-Michel Trivi
2009-06-18 18:44:52 -07:00
parent dd14ee3d16
commit 74e565d85d
3 changed files with 142 additions and 19 deletions

View File

@@ -1737,6 +1737,14 @@ found in the list of installed applications.</string>
<string name="tts_default_lang_title">Language</string>
<!-- On main TTS Settings screen, summary for default language for synthesized voice -->
<string name="tts_default_lang_summary">Sets the language-specific voice for the spoken text</string>
<!-- On main TTS Settings screen, triggers an example of speech synthesis -->
<string name="tts_play_example_title">Listen to an example</string>
<!-- On main TTS Settings screen, summary for triggering an example of speech synthesis -->
<string name="tts_play_example_summary">Play a short demonstration of speech synthesis</string>
<!-- Text spoken by the TTS engine for demonstration purposes -->
<string name="tts_demo">This is an example of speech synthesis.</string>
<!-- Text spoken by the TTS engine when TTS settings (other than language) have been changed -->
<string name="tts_settings_changed_demo">Your settings have changed. This is an example of how they sound.</string>
<!-- Power Control Widget -->
<string name="gadget_title">Power Control</string>

View File

@@ -17,6 +17,12 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/tts_settings_title">
<Preference
android:key="tts_play_example"
android:persistent="false"
android:title="@string/tts_play_example_title"
android:summary="@string/tts_play_example_summary" />
<CheckBoxPreference
android:key="toggle_use_default_tts_settings"
android:title="@string/use_default_tts_settings_title"

View File

@@ -22,36 +22,52 @@ import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
import static android.provider.Settings.Secure.TTS_DEFAULT_LANG;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import java.util.List;
public class TextToSpeechSettings extends PreferenceActivity implements
Preference.OnPreferenceChangeListener {
Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
TextToSpeech.OnInitListener {
private static final String TAG = "TextToSpeechSettings";
/** If there is no setting in the provider, use this. */
private static final int FALLBACK_TTS_DEFAULT_RATE = 100; // 1x
private static final int FALLBACK_TTS_DEFAULT_PITCH = 100;// 1x
private static final int FALLBACK_TTS_USE_DEFAULTS = 1;
private static final String FALLBACK_TTS_DEFAULT_LANG = "en-rUS";
private static final String KEY_TTS_USE_DEFAULT =
"toggle_use_default_tts_settings";
private static final String KEY_TTS_PLAY_EXAMPLE = "tts_play_example";
private static final String KEY_TTS_USE_DEFAULT = "toggle_use_default_tts_settings";
private static final String KEY_TTS_DEFAULT_RATE = "tts_default_rate";
private static final String KEY_TTS_DEFAULT_PITCH = "tts_default_pitch";
private static final String KEY_TTS_DEFAULT_LANG = "tts_default_lang";
// TODO move this to android.speech.tts.TextToSpeech.Engine
private static final String FALLBACK_TTS_DEFAULT_SYNTH = "com.svox.pico";
private Preference mPlayExample = null;
private CheckBoxPreference mUseDefaultPref = null;
private ListPreference mDefaultRatePref = null;
private ListPreference mDefaultPitchPref = null;
private ListPreference mDefaultLangPref = null;
private String mDefaultEng = "";
private boolean mEnableDemo = false;
private TextToSpeech mTts = null;
/**
* Request code (arbitrary value) for voice data check through
* startActivityForResult.
*/
private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -59,7 +75,36 @@ public class TextToSpeechSettings extends PreferenceActivity implements
addPreferencesFromResource(R.xml.tts_settings);
initDemo();
initDefaultSettings();
checkVoiceData();
}
@Override
protected void onResume() {
super.onResume();
// whenever we return to this screen, we don't know the state of the
// system, so we have to recheck that we can play the demo, or it must be disabled.
mEnableDemo = false;
initDemo();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mTts != null) {
mTts.shutdown();
}
}
private void initDemo() {
mPlayExample = findPreference(KEY_TTS_PLAY_EXAMPLE);
mPlayExample.setEnabled(mEnableDemo);
mPlayExample.setOnPreferenceClickListener(this);
}
@@ -71,21 +116,24 @@ public class TextToSpeechSettings extends PreferenceActivity implements
(CheckBoxPreference) findPreference(KEY_TTS_USE_DEFAULT);
mUseDefaultPref.setChecked(Settings.Secure.getInt(resolver,
TTS_USE_DEFAULTS,
FALLBACK_TTS_USE_DEFAULTS) == 1 ? true : false);
TextToSpeech.Engine.FALLBACK_TTS_USE_DEFAULTS) == 1 ? true : false);
mUseDefaultPref.setOnPreferenceChangeListener(this);
// Default engine
mDefaultEng = FALLBACK_TTS_DEFAULT_SYNTH;
// Default rate
mDefaultRatePref =
(ListPreference) findPreference(KEY_TTS_DEFAULT_RATE);
mDefaultRatePref.setValue(String.valueOf(Settings.Secure.getInt(
resolver, TTS_DEFAULT_RATE, FALLBACK_TTS_DEFAULT_RATE)));
resolver, TTS_DEFAULT_RATE, TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_RATE)));
mDefaultRatePref.setOnPreferenceChangeListener(this);
// Default pitch
mDefaultPitchPref =
(ListPreference) findPreference(KEY_TTS_DEFAULT_PITCH);
mDefaultPitchPref.setValue(String.valueOf(Settings.Secure.getInt(
resolver, TTS_DEFAULT_PITCH, FALLBACK_TTS_DEFAULT_PITCH)));
resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_PITCH)));
mDefaultPitchPref.setOnPreferenceChangeListener(this);
// Default language
@@ -94,7 +142,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements
String defaultLang = String.valueOf(Settings.Secure.getString(resolver,
TTS_DEFAULT_LANG));
if (defaultLang.compareTo("null") == 0) {
mDefaultLangPref.setValue(FALLBACK_TTS_DEFAULT_LANG);
mDefaultLangPref.setValue(TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_LANG);
Log.i(TAG, "TTS initDefaultSettings() default lang null ");
} else {
mDefaultLangPref.setValue(defaultLang);
@@ -104,6 +152,55 @@ public class TextToSpeechSettings extends PreferenceActivity implements
}
private void checkVoiceData() {
PackageManager pm = getPackageManager();
Intent intent = new Intent();
intent.setAction("android.intent.action.CHECK_TTS_DATA");
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
// query only the package that matches that of the default engine
for (int i = 0; i < resolveInfos.size(); i++) {
ActivityInfo currentActivityInfo = resolveInfos.get(i).activityInfo;
if (mDefaultEng.equals(currentActivityInfo.packageName)) {
intent.setClassName(mDefaultEng, currentActivityInfo.name);
this.startActivityForResult(intent, VOICE_DATA_INTEGRITY_CHECK);
}
}
}
/**
* Called when the TTS engine is initialized.
*/
public void onInit(int status) {
if (status == TextToSpeech.TTS_SUCCESS) {
Log.v(TAG, "TTS engine for settings screen initialized.");
mEnableDemo = true;
} else {
Log.v(TAG, "TTS engine for settings screen failed to initialize successfully.");
mEnableDemo = false;
}
mPlayExample.setEnabled(mEnableDemo);
}
/**
* Called when voice data integrity check returns
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
Log.v(TAG, "Voice data check passed");
if (mTts == null) {
mTts = new TextToSpeech(this, this);
}
} else {
Log.v(TAG, "Voice data check failed");
}
}
}
public boolean onPreferenceChange(Preference preference, Object objValue) {
if (KEY_TTS_USE_DEFAULT.equals(preference.getKey())) {
// "Use Defaults"
@@ -131,7 +228,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist default TTS pitch setting", e);
}
}else if (KEY_TTS_DEFAULT_LANG.equals(preference.getKey())) {
} else if (KEY_TTS_DEFAULT_LANG.equals(preference.getKey())) {
// Default language
String value = (String) objValue;
Settings.Secure.putString(getContentResolver(),
@@ -142,4 +239,16 @@ public class TextToSpeechSettings extends PreferenceActivity implements
return true;
}
public boolean onPreferenceClick(Preference preference) {
if (preference == mPlayExample) {
if (mTts != null) {
mTts.speak(getResources().getString(R.string.tts_demo),
TextToSpeech.TTS_QUEUE_FLUSH, null);
}
return true;
}
return false;
}
}