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:
Ajay Dudani
2025-01-09 14:20:45 -08:00
parent 44e13bf11e
commit b44f5c6b34
2 changed files with 34 additions and 36 deletions

View File

@@ -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"

View File

@@ -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) {