diff --git a/android/res/layout/seekbar_preference.xml b/android/res/layout/seekbar_preference.xml new file mode 100644 index 00000000..09c9da6e --- /dev/null +++ b/android/res/layout/seekbar_preference.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index 8e98c1c6..41fafdac 100755 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -132,5 +132,6 @@ Speak Load SSML Template Enter text to speak: + Volume \ No newline at end of file diff --git a/android/src/com/reecedunn/espeak/SeekBarPreference.java b/android/src/com/reecedunn/espeak/SeekBarPreference.java new file mode 100644 index 00000000..1221f2c2 --- /dev/null +++ b/android/src/com/reecedunn/espeak/SeekBarPreference.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2013 Reece H. Dunn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.reecedunn.espeak; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.preference.DialogPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.SeekBar; + +public class SeekBarPreference extends DialogPreference +{ + private SeekBar mSeekBar; + + private int mProgress = 0; + private int mMin = 0; + private int mMax = 100; + + public void setProgress(int progress) { + mProgress = progress + mMin; + String text = Integer.toString(mProgress); + callChangeListener(text); + } + + public int getProgress() { + return mProgress; + } + + public void setMin(int min) { + mProgress -= mMin; + mMin = min; + mProgress += mMin; + String text = Integer.toString(mProgress); + callChangeListener(text); + } + + public int getMin() { + return mMin; + } + + public void setMax(int max) { + mMax = max; + } + + public int getMax() { + return mMax; + } + + public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) + { + super(context, attrs, defStyle); + setDialogLayoutResource(R.layout.seekbar_preference); + setPositiveButtonText(android.R.string.ok); + setNegativeButtonText(android.R.string.cancel); + } + + public SeekBarPreference(Context context, AttributeSet attrs) + { + this(context, attrs, 0); + } + + public SeekBarPreference(Context context) + { + this(context, null); + } + + @Override + protected View onCreateDialogView() { + View root = super.onCreateDialogView(); + mSeekBar = (SeekBar)root.findViewById(R.id.seekBar); + return root; + } + + @Override + protected void onBindDialogView(View view) { + mSeekBar.setMax(mMax - mMin); + mSeekBar.setProgress(mProgress + mMin); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + mProgress = mSeekBar.getProgress() + mMin; + String text = Integer.toString(mProgress); + callChangeListener(text); + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putString(getKey(), text); + editor.commit(); + break; + } + super.onClick(dialog, which); + } +} diff --git a/android/src/com/reecedunn/espeak/TtsService.java b/android/src/com/reecedunn/espeak/TtsService.java index d4a090fc..c91749f1 100644 --- a/android/src/com/reecedunn/espeak/TtsService.java +++ b/android/src/com/reecedunn/espeak/TtsService.java @@ -224,6 +224,7 @@ public class TtsService extends TextToSpeechService { mEngine.setVoice(mMatchingVoice, null, gender, SpeechSynthesis.AGE_ANY); mEngine.Rate.setValue(rate, request.getSpeechRate()); mEngine.Pitch.setValue(pitch, request.getPitch()); + mEngine.Volume.setValue(getPreferenceValue("espeak_volume", mEngine.Volume.getDefaultValue())); mEngine.synthesize(text, text.startsWith("= 0 && index < entries.length) { - preference.setSummary(entries[index].toString().replaceAll("%", "%%")); - } else { - preference.setSummary(""); + if (index >= 0 && index < entries.length) { + summary = entries[index].toString(); + } + } else if (preference instanceof SeekBarPreference) { + summary = (String)newValue; } + preference.setSummary(summary.replaceAll("%", "%%")); } - return true; } };