Add a seekbar to change text-to-speech rate and a switch to enable

higher speech rates.

Change-Id: I75cfc2af4e293dc45c93a44e5c2af73d1dae9b7c
This commit is contained in:
shwetachahar
2016-01-27 16:38:06 +00:00
parent 5f75f5ef71
commit 8bd2feb9ec
2 changed files with 56 additions and 9 deletions

View File

@@ -24,13 +24,16 @@
<PreferenceCategory android:key="tts_general_section" <PreferenceCategory android:key="tts_general_section"
android:title="@string/tts_general_section_title"> android:title="@string/tts_general_section_title">
<ListPreference <com.android.settings.SeekBarPreference
android:key="tts_default_rate" android:key="tts_default_rate"
android:title="@string/tts_default_rate_title" android:title="@string/tts_default_rate_title"
android:summary="@string/tts_default_rate_summary" android:summary="@string/tts_default_rate_summary"
android:persistent="false" android:persistent="false"
android:entries="@array/tts_rate_entries" android:defaultValue="50"
android:entryValues="@array/tts_rate_values" /> android:max="400" />
<SwitchPreference
android:key="tts_default_higher_speech_rate_enabled"
android:title="Higher speech rate" />
</PreferenceCategory> </PreferenceCategory>
<Preference android:key="tts_play_example" <Preference android:key="tts_play_example"

View File

@@ -26,7 +26,7 @@ import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.EngineInfo; import android.speech.tts.TextToSpeech.EngineInfo;
import android.speech.tts.TtsEngines; import android.speech.tts.TtsEngines;
import android.speech.tts.UtteranceProgressListener; 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.Preference;
import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceCategory;
import android.text.TextUtils; import android.text.TextUtils;
@@ -35,6 +35,7 @@ import android.widget.Checkable;
import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SeekBarPreference;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState; 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_RATE;
import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH; 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 public class TextToSpeechSettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
@@ -63,6 +65,10 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
/** Preference key for the TTS rate selection dialog. */ /** Preference key for the TTS rate selection dialog. */
private static final String KEY_DEFAULT_RATE = "tts_default_rate"; 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. */ /** Preference key for the TTS status field. */
private static final String KEY_STATUS = "tts_status"; private static final String KEY_STATUS = "tts_status";
@@ -78,13 +84,25 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
private static final int GET_SAMPLE_TEXT = 1983; private static final int GET_SAMPLE_TEXT = 1983;
private static final int VOICE_DATA_INTEGRITY_CHECK = 1977; 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 PreferenceCategory mEnginePreferenceCategory;
private ListPreference mDefaultRatePref; private SeekBarPreference mDefaultRatePref;
private SwitchPreference mHigherRateSwitchPref;
private Preference mPlayExample; private Preference mPlayExample;
private Preference mEngineStatus; private Preference mEngineStatus;
private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
/**
* Whether higher speech rate is enabled.
*/
private boolean mHigherRateSwitch = false;
/** /**
* The currently selected engine. * The currently selected engine.
*/ */
@@ -161,7 +179,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
mEnginePreferenceCategory = (PreferenceCategory) findPreference( mEnginePreferenceCategory = (PreferenceCategory) findPreference(
KEY_ENGINE_PREFERENCE_SECTION); 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); mEngineStatus = findPreference(KEY_STATUS);
updateEngineStatus(R.string.tts_status_checking); updateEngineStatus(R.string.tts_status_checking);
@@ -223,13 +242,25 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
// Set up the default rate. // Set up the default rate.
try { try {
mDefaultRate = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE); 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) { } catch (SettingNotFoundException e) {
// Default rate setting not found, initialize it // Default rate setting not found, initialize it
mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
mHigherRateSwitch = false;
} }
mDefaultRatePref.setValue(String.valueOf(mDefaultRate)); mDefaultRatePref.setProgress(mDefaultRate);
mDefaultRatePref.setOnPreferenceChangeListener(this); 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(); mCurrentEngine = mTts.getCurrentEngine();
SettingsActivity activity = null; SettingsActivity activity = null;
@@ -447,7 +478,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
public boolean onPreferenceChange(Preference preference, Object objValue) { public boolean onPreferenceChange(Preference preference, Object objValue) {
if (KEY_DEFAULT_RATE.equals(preference.getKey())) { if (KEY_DEFAULT_RATE.equals(preference.getKey())) {
// Default rate // Default rate
mDefaultRate = Integer.parseInt((String) objValue); mDefaultRate = ((Integer) objValue).intValue();
try { try {
android.provider.Settings.Secure.putInt(getContentResolver(), android.provider.Settings.Secure.putInt(getContentResolver(),
TTS_DEFAULT_RATE, mDefaultRate); TTS_DEFAULT_RATE, mDefaultRate);
@@ -458,8 +489,21 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Log.e(TAG, "could not persist default TTS rate setting", 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; return true;
} }