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:
@@ -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,13 +84,25 @@ 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.
|
||||
*/
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user