Settings: TTS: Use a more accurate SliderPreference for speech rate and pitch
Bug: 349667984 Flag: EXEMPT bugfix Change-Id: Ie1c214221e2e0e683139cf5f21a44745f4701f05
This commit is contained in:
@@ -34,14 +34,14 @@
|
|||||||
|
|
||||||
<!-- The max value for seek bars here should be kept in sync
|
<!-- The max value for seek bars here should be kept in sync
|
||||||
with the max value specified in TextToSpeechSettings class. -->
|
with the max value specified in TextToSpeechSettings class. -->
|
||||||
<com.android.settings.widget.SeekBarPreference
|
<com.android.settingslib.widget.SliderPreference
|
||||||
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:defaultValue="50"
|
android:defaultValue="50"
|
||||||
android:max="600"/>
|
android:max="600"/>
|
||||||
|
|
||||||
<com.android.settings.widget.SeekBarPreference
|
<com.android.settingslib.widget.SliderPreference
|
||||||
android:key="tts_default_pitch"
|
android:key="tts_default_pitch"
|
||||||
android:title="@string/tts_default_pitch_title"
|
android:title="@string/tts_default_pitch_title"
|
||||||
android:summary="@string/tts_default_pitch_summary"
|
android:summary="@string/tts_default_pitch_summary"
|
||||||
|
@@ -49,7 +49,7 @@ import com.android.settings.Utils;
|
|||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.widget.GearPreference;
|
import com.android.settings.widget.GearPreference;
|
||||||
import com.android.settings.widget.SeekBarPreference;
|
import com.android.settingslib.widget.SliderPreference;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
import com.android.settingslib.widget.ActionButtonsPreference;
|
import com.android.settingslib.widget.ActionButtonsPreference;
|
||||||
|
|
||||||
@@ -114,8 +114,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
private static final int MIN_SPEECH_PITCH = 25;
|
private static final int MIN_SPEECH_PITCH = 25;
|
||||||
|
|
||||||
private SeekBarPreference mDefaultPitchPref;
|
private SliderPreference mDefaultPitchPref;
|
||||||
private SeekBarPreference mDefaultRatePref;
|
private SliderPreference mDefaultRatePref;
|
||||||
private ActionButtonsPreference mActionButtons;
|
private ActionButtonsPreference mActionButtons;
|
||||||
|
|
||||||
private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
|
private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
|
||||||
@@ -174,8 +174,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
mLocalePreference = (ListPreference) findPreference(KEY_ENGINE_LOCALE);
|
mLocalePreference = (ListPreference) findPreference(KEY_ENGINE_LOCALE);
|
||||||
mLocalePreference.setOnPreferenceChangeListener(this);
|
mLocalePreference.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
mDefaultPitchPref = (SeekBarPreference) findPreference(KEY_DEFAULT_PITCH);
|
mDefaultPitchPref = (SliderPreference) findPreference(KEY_DEFAULT_PITCH);
|
||||||
mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
|
mDefaultRatePref = (SliderPreference) findPreference(KEY_DEFAULT_RATE);
|
||||||
|
|
||||||
mActionButtons = ((ActionButtonsPreference) findPreference(KEY_ACTION_BUTTONS))
|
mActionButtons = ((ActionButtonsPreference) findPreference(KEY_ACTION_BUTTONS))
|
||||||
.setButton1Text(R.string.tts_play)
|
.setButton1Text(R.string.tts_play)
|
||||||
@@ -317,18 +317,16 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
android.provider.Settings.Secure.getInt(
|
android.provider.Settings.Secure.getInt(
|
||||||
resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
|
resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
|
||||||
|
|
||||||
mDefaultRatePref.setProgress(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, mDefaultRate));
|
mDefaultRatePref.setValue(getSliderProgressFromValue(KEY_DEFAULT_RATE, mDefaultRate));
|
||||||
mDefaultRatePref.setOnPreferenceChangeListener(this);
|
mDefaultRatePref.setOnPreferenceChangeListener(this);
|
||||||
mDefaultRatePref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
|
mDefaultRatePref.setMax(getSliderProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
|
||||||
mDefaultRatePref.setContinuousUpdates(true);
|
mDefaultRatePref.setUpdatesContinuously(true);
|
||||||
mDefaultRatePref.setHapticFeedbackMode(SeekBarPreference.HAPTIC_FEEDBACK_MODE_ON_ENDS);
|
|
||||||
|
|
||||||
mDefaultPitchPref.setProgress(
|
mDefaultPitchPref.setValue(
|
||||||
getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, mDefaultPitch));
|
getSliderProgressFromValue(KEY_DEFAULT_PITCH, mDefaultPitch));
|
||||||
mDefaultPitchPref.setOnPreferenceChangeListener(this);
|
mDefaultPitchPref.setOnPreferenceChangeListener(this);
|
||||||
mDefaultPitchPref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, MAX_SPEECH_PITCH));
|
mDefaultPitchPref.setMax(getSliderProgressFromValue(KEY_DEFAULT_PITCH, MAX_SPEECH_PITCH));
|
||||||
mDefaultPitchPref.setContinuousUpdates(true);
|
mDefaultPitchPref.setUpdatesContinuously(true);
|
||||||
mDefaultPitchPref.setHapticFeedbackMode(SeekBarPreference.HAPTIC_FEEDBACK_MODE_ON_ENDS);
|
|
||||||
|
|
||||||
if (mTts != null) {
|
if (mTts != null) {
|
||||||
mCurrentEngine = mTts.getCurrentEngine();
|
mCurrentEngine = mTts.getCurrentEngine();
|
||||||
@@ -356,12 +354,12 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The minimum speech pitch/rate value should be > 0 but the minimum value of a seekbar in
|
* The minimum speech pitch/rate value should be > 0 but the minimum value of a slider in
|
||||||
* android is fixed at 0. Therefore, we increment the seekbar progress with MIN_SPEECH_VALUE so
|
* android is fixed at 0. Therefore, we increment the slider progress with MIN_SPEECH_VALUE so
|
||||||
* that the minimum seekbar progress value is MIN_SPEECH_PITCH/RATE. SPEECH_VALUE =
|
* that the minimum slider progress value is MIN_SPEECH_PITCH/RATE. SPEECH_VALUE =
|
||||||
* MIN_SPEECH_VALUE + SEEKBAR_PROGRESS
|
* MIN_SPEECH_VALUE + SLIDER_PROGRESS
|
||||||
*/
|
*/
|
||||||
private int getValueFromSeekBarProgress(String preferenceKey, int progress) {
|
private int getValueFromSliderProgress(String preferenceKey, int progress) {
|
||||||
if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
|
if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
|
||||||
return MIN_SPEECH_RATE + progress;
|
return MIN_SPEECH_RATE + progress;
|
||||||
} else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
|
} else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
|
||||||
@@ -371,10 +369,10 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Since we are appending the MIN_SPEECH value to the speech seekbar progress, the speech
|
* Since we are appending the MIN_SPEECH value to the speech slider progress, the speech
|
||||||
* seekbar progress should be set to (speechValue - MIN_SPEECH value).
|
* slider progress should be set to (speechValue - MIN_SPEECH value).
|
||||||
*/
|
*/
|
||||||
private int getSeekBarProgressFromValue(String preferenceKey, int value) {
|
private int getSliderProgressFromValue(String preferenceKey, int value) {
|
||||||
if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
|
if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
|
||||||
return value - MIN_SPEECH_RATE;
|
return value - MIN_SPEECH_RATE;
|
||||||
} else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
|
} else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
|
||||||
@@ -686,20 +684,20 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
private void resetTts() {
|
private void resetTts() {
|
||||||
// Reset button.
|
// Reset button.
|
||||||
int speechRateSeekbarProgress =
|
int speechRateSliderProgress =
|
||||||
getSeekBarProgressFromValue(
|
getSliderProgressFromValue(
|
||||||
KEY_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
|
KEY_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
|
||||||
mDefaultRatePref.setProgress(speechRateSeekbarProgress);
|
mDefaultRatePref.setValue(speechRateSliderProgress);
|
||||||
updateSpeechRate(speechRateSeekbarProgress);
|
updateSpeechRate(speechRateSliderProgress);
|
||||||
int pitchSeekbarProgress =
|
int pitchSliderProgress =
|
||||||
getSeekBarProgressFromValue(
|
getSliderProgressFromValue(
|
||||||
KEY_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
|
KEY_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
|
||||||
mDefaultPitchPref.setProgress(pitchSeekbarProgress);
|
mDefaultPitchPref.setValue(pitchSliderProgress);
|
||||||
updateSpeechPitchValue(pitchSeekbarProgress);
|
updateSpeechPitchValue(pitchSliderProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSpeechRate(int speechRateSeekBarProgress) {
|
private void updateSpeechRate(int speechRateSliderProgress) {
|
||||||
mDefaultRate = getValueFromSeekBarProgress(KEY_DEFAULT_RATE, speechRateSeekBarProgress);
|
mDefaultRate = getValueFromSliderProgress(KEY_DEFAULT_RATE, speechRateSliderProgress);
|
||||||
try {
|
try {
|
||||||
updateTTSSetting(TTS_DEFAULT_RATE, mDefaultRate);
|
updateTTSSetting(TTS_DEFAULT_RATE, mDefaultRate);
|
||||||
if (mTts != null) {
|
if (mTts != null) {
|
||||||
@@ -712,8 +710,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSpeechPitchValue(int speechPitchSeekBarProgress) {
|
private void updateSpeechPitchValue(int speechPitchSliderProgress) {
|
||||||
mDefaultPitch = getValueFromSeekBarProgress(KEY_DEFAULT_PITCH, speechPitchSeekBarProgress);
|
mDefaultPitch = getValueFromSliderProgress(KEY_DEFAULT_PITCH, speechPitchSliderProgress);
|
||||||
try {
|
try {
|
||||||
updateTTSSetting(TTS_DEFAULT_PITCH, mDefaultPitch);
|
updateTTSSetting(TTS_DEFAULT_PITCH, mDefaultPitch);
|
||||||
if (mTts != null) {
|
if (mTts != null) {
|
||||||
|
Reference in New Issue
Block a user