diff options
-rw-r--r-- | res/xml/tts_settings.xml | 9 | ||||
-rw-r--r-- | src/com/android/settings/tts/TextToSpeechSettings.java | 56 |
2 files changed, 56 insertions, 9 deletions
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml index 3e5e097075..dbdf4699d2 100644 --- a/res/xml/tts_settings.xml +++ b/res/xml/tts_settings.xml @@ -24,13 +24,16 @@ <PreferenceCategory android:key="tts_general_section" android:title="@string/tts_general_section_title"> - <ListPreference + <com.android.settings.SeekBarPreference android:key="tts_default_rate" android:title="@string/tts_default_rate_title" android:summary="@string/tts_default_rate_summary" android:persistent="false" - android:entries="@array/tts_rate_entries" - android:entryValues="@array/tts_rate_values" /> + android:defaultValue="50" + android:max="400" /> + <SwitchPreference + android:key="tts_default_higher_speech_rate_enabled" + android:title="Higher speech rate" /> </PreferenceCategory> <Preference android:key="tts_play_example" diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java index 2d30ecf6f4..be10dd35f5 100644 --- a/src/com/android/settings/tts/TextToSpeechSettings.java +++ b/src/com/android/settings/tts/TextToSpeechSettings.java @@ -26,7 +26,7 @@ import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.EngineInfo; import android.speech.tts.TtsEngines; import android.speech.tts.UtteranceProgressListener; -import android.support.v7.preference.ListPreference; +import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.text.TextUtils; @@ -35,6 +35,7 @@ import android.widget.Checkable; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.R; +import com.android.settings.SeekBarPreference; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState; @@ -49,6 +50,7 @@ import java.util.Set; import static android.provider.Settings.Secure.TTS_DEFAULT_RATE; import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH; +import static android.provider.Settings.Secure.TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED; public class TextToSpeechSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener, @@ -63,6 +65,10 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements /** Preference key for the TTS rate selection dialog. */ private static final String KEY_DEFAULT_RATE = "tts_default_rate"; + /** Preference key for the TTS advanced speech rate switch. */ + private static final String KEY_HIGHER_RATE_SWITCH = + "tts_default_higher_speech_rate_enabled"; + /** Preference key for the TTS status field. */ private static final String KEY_STATUS = "tts_status"; @@ -78,14 +84,26 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements private static final int GET_SAMPLE_TEXT = 1983; private static final int VOICE_DATA_INTEGRITY_CHECK = 1977; + /** + * Maximum speech rate values. + */ + private static final int MAX_SPEECH_RATE = 400; + private static final int MAX_HIGHER_SPEECH_RATE = 600; + private PreferenceCategory mEnginePreferenceCategory; - private ListPreference mDefaultRatePref; + private SeekBarPreference mDefaultRatePref; + private SwitchPreference mHigherRateSwitchPref; private Preference mPlayExample; private Preference mEngineStatus; private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; /** + * Whether higher speech rate is enabled. + */ + private boolean mHigherRateSwitch = false; + + /** * The currently selected engine. */ private String mCurrentEngine; @@ -161,7 +179,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements mEnginePreferenceCategory = (PreferenceCategory) findPreference( KEY_ENGINE_PREFERENCE_SECTION); - mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE); + mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE); + mHigherRateSwitchPref = (SwitchPreference) findPreference(KEY_HIGHER_RATE_SWITCH); mEngineStatus = findPreference(KEY_STATUS); updateEngineStatus(R.string.tts_status_checking); @@ -223,13 +242,25 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements // Set up the default rate. try { mDefaultRate = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE); + mHigherRateSwitch = android.provider.Settings.Secure.getInt(resolver, + TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED) == 1; } catch (SettingNotFoundException e) { // Default rate setting not found, initialize it mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; + mHigherRateSwitch = false; } - mDefaultRatePref.setValue(String.valueOf(mDefaultRate)); + mDefaultRatePref.setProgress(mDefaultRate); mDefaultRatePref.setOnPreferenceChangeListener(this); + mHigherRateSwitchPref.setChecked(mHigherRateSwitch); + mHigherRateSwitchPref.setOnPreferenceChangeListener(this); + + if (mHigherRateSwitch) { + mDefaultRatePref.setMax(MAX_HIGHER_SPEECH_RATE); + } else { + mDefaultRatePref.setMax(MAX_SPEECH_RATE); + } + mCurrentEngine = mTts.getCurrentEngine(); SettingsActivity activity = null; @@ -447,7 +478,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements public boolean onPreferenceChange(Preference preference, Object objValue) { if (KEY_DEFAULT_RATE.equals(preference.getKey())) { // Default rate - mDefaultRate = Integer.parseInt((String) objValue); + mDefaultRate = ((Integer) objValue).intValue(); try { android.provider.Settings.Secure.putInt(getContentResolver(), TTS_DEFAULT_RATE, mDefaultRate); @@ -458,8 +489,21 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements } catch (NumberFormatException e) { Log.e(TAG, "could not persist default TTS rate setting", e); } + } else if (KEY_HIGHER_RATE_SWITCH.equals(preference.getKey())) { + // Adjust range of speech rate depending on switch setting. + mHigherRateSwitch = ((Boolean) objValue).booleanValue(); + try { + android.provider.Settings.Secure.putInt(getContentResolver(), + TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED, mHigherRateSwitch ? 1 : 0); + if (mHigherRateSwitch) { + mDefaultRatePref.setMax(MAX_HIGHER_SPEECH_RATE); + } else { + mDefaultRatePref.setMax(MAX_SPEECH_RATE); + } + } catch (NumberFormatException e) { + Log.e(TAG, "could not persist default higher speech rate setting", e); + } } - return true; } |