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;
}
};