Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b44f5c6b authored by Ajay Dudani's avatar Ajay Dudani
Browse files

Settings: TTS: Use a more accurate SliderPreference for speech rate and pitch

Bug: 349667984
Flag: EXEMPT bugfix
Change-Id: Ie1c214221e2e0e683139cf5f21a44745f4701f05
parent 44e13bf1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -34,14 +34,14 @@

        <!-- The max value for seek bars here should be kept in sync
             with the max value specified in TextToSpeechSettings class. -->
        <com.android.settings.widget.SeekBarPreference
        <com.android.settingslib.widget.SliderPreference
            android:key="tts_default_rate"
            android:title="@string/tts_default_rate_title"
            android:summary="@string/tts_default_rate_summary"
            android:defaultValue="50"
            android:max="600"/>

        <com.android.settings.widget.SeekBarPreference
        <com.android.settingslib.widget.SliderPreference
            android:key="tts_default_pitch"
            android:title="@string/tts_default_pitch_title"
            android:summary="@string/tts_default_pitch_summary"
+32 −34
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
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.widget.ActionButtonsPreference;

@@ -114,8 +114,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment

    private static final int MIN_SPEECH_PITCH = 25;

    private SeekBarPreference mDefaultPitchPref;
    private SeekBarPreference mDefaultRatePref;
    private SliderPreference mDefaultPitchPref;
    private SliderPreference mDefaultRatePref;
    private ActionButtonsPreference mActionButtons;

    private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
@@ -174,8 +174,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
        mLocalePreference = (ListPreference) findPreference(KEY_ENGINE_LOCALE);
        mLocalePreference.setOnPreferenceChangeListener(this);

        mDefaultPitchPref = (SeekBarPreference) findPreference(KEY_DEFAULT_PITCH);
        mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
        mDefaultPitchPref = (SliderPreference) findPreference(KEY_DEFAULT_PITCH);
        mDefaultRatePref = (SliderPreference) findPreference(KEY_DEFAULT_RATE);

        mActionButtons = ((ActionButtonsPreference) findPreference(KEY_ACTION_BUTTONS))
                .setButton1Text(R.string.tts_play)
@@ -317,18 +317,16 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
                android.provider.Settings.Secure.getInt(
                        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.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
        mDefaultRatePref.setContinuousUpdates(true);
        mDefaultRatePref.setHapticFeedbackMode(SeekBarPreference.HAPTIC_FEEDBACK_MODE_ON_ENDS);
        mDefaultRatePref.setMax(getSliderProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
        mDefaultRatePref.setUpdatesContinuously(true);

        mDefaultPitchPref.setProgress(
                getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, mDefaultPitch));
        mDefaultPitchPref.setValue(
                getSliderProgressFromValue(KEY_DEFAULT_PITCH, mDefaultPitch));
        mDefaultPitchPref.setOnPreferenceChangeListener(this);
        mDefaultPitchPref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, MAX_SPEECH_PITCH));
        mDefaultPitchPref.setContinuousUpdates(true);
        mDefaultPitchPref.setHapticFeedbackMode(SeekBarPreference.HAPTIC_FEEDBACK_MODE_ON_ENDS);
        mDefaultPitchPref.setMax(getSliderProgressFromValue(KEY_DEFAULT_PITCH, MAX_SPEECH_PITCH));
        mDefaultPitchPref.setUpdatesContinuously(true);

        if (mTts != null) {
            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
     * android is fixed at 0. Therefore, we increment the seekbar progress with MIN_SPEECH_VALUE so
     * that the minimum seekbar progress value is MIN_SPEECH_PITCH/RATE. SPEECH_VALUE =
     * MIN_SPEECH_VALUE + SEEKBAR_PROGRESS
     * 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 slider progress with MIN_SPEECH_VALUE so
     * that the minimum slider progress value is MIN_SPEECH_PITCH/RATE. SPEECH_VALUE =
     * 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)) {
            return MIN_SPEECH_RATE + progress;
        } 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
     * seekbar progress should be set to (speechValue - MIN_SPEECH value).
     * Since we are appending the MIN_SPEECH value to the speech slider progress, the speech
     * 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)) {
            return value - MIN_SPEECH_RATE;
        } else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
@@ -686,20 +684,20 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment

    private void resetTts() {
        // Reset button.
        int speechRateSeekbarProgress =
                getSeekBarProgressFromValue(
        int speechRateSliderProgress =
                getSliderProgressFromValue(
                        KEY_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
        mDefaultRatePref.setProgress(speechRateSeekbarProgress);
        updateSpeechRate(speechRateSeekbarProgress);
        int pitchSeekbarProgress =
                getSeekBarProgressFromValue(
        mDefaultRatePref.setValue(speechRateSliderProgress);
        updateSpeechRate(speechRateSliderProgress);
        int pitchSliderProgress =
                getSliderProgressFromValue(
                        KEY_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
        mDefaultPitchPref.setProgress(pitchSeekbarProgress);
        updateSpeechPitchValue(pitchSeekbarProgress);
        mDefaultPitchPref.setValue(pitchSliderProgress);
        updateSpeechPitchValue(pitchSliderProgress);
    }

    private void updateSpeechRate(int speechRateSeekBarProgress) {
        mDefaultRate = getValueFromSeekBarProgress(KEY_DEFAULT_RATE, speechRateSeekBarProgress);
    private void updateSpeechRate(int speechRateSliderProgress) {
        mDefaultRate = getValueFromSliderProgress(KEY_DEFAULT_RATE, speechRateSliderProgress);
        try {
            updateTTSSetting(TTS_DEFAULT_RATE, mDefaultRate);
            if (mTts != null) {
@@ -712,8 +710,8 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment
        return;
    }

    private void updateSpeechPitchValue(int speechPitchSeekBarProgress) {
        mDefaultPitch = getValueFromSeekBarProgress(KEY_DEFAULT_PITCH, speechPitchSeekBarProgress);
    private void updateSpeechPitchValue(int speechPitchSliderProgress) {
        mDefaultPitch = getValueFromSliderProgress(KEY_DEFAULT_PITCH, speechPitchSliderProgress);
        try {
            updateTTSSetting(TTS_DEFAULT_PITCH, mDefaultPitch);
            if (mTts != null) {