summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/strings.xml8
-rw-r--r--res/xml/tts_settings.xml6
-rw-r--r--src/com/android/settings/TextToSpeechSettings.java149
3 files changed, 143 insertions, 20 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2fedceb..9e28761 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -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>
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index 991c1f1..5a7aaa2 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -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"
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index 79a841b..ca58afd 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -22,44 +22,89 @@ 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) {
super.onCreate(savedInstanceState);
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,30 +116,33 @@ 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
mDefaultLangPref =
(ListPreference) findPreference(KEY_TTS_DEFAULT_LANG);
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;
+ }
+
}