diff --git a/res/values/translatable.xml b/res/values/translatable.xml
index 1a0e0b8f..09485ce2 100644
--- a/res/values/translatable.xml
+++ b/res/values/translatable.xml
@@ -111,6 +111,8 @@ THE SOFTWARE.
%s (Paused)
+ Note: volume does not increase past 100% on some devices
+
- 1 second
- %d seconds
diff --git a/src/org/kreed/vanilla/VolumePreference.java b/src/org/kreed/vanilla/VolumePreference.java
index b9819f14..99236bac 100644
--- a/src/org/kreed/vanilla/VolumePreference.java
+++ b/src/org/kreed/vanilla/VolumePreference.java
@@ -26,9 +26,11 @@ import android.app.AlertDialog.Builder;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.SeekBar;
+import android.widget.TextView;
/**
* A preference that provides a volume slider dialog.
@@ -38,6 +40,10 @@ import android.widget.SeekBar;
*/
public class VolumePreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener {
private static final float DEFAULT_VALUE = 1.0f;
+ /**
+ * The view to display the current volume percentage.
+ */
+ private TextView mPercent;
public VolumePreference(Context context, AttributeSet attrs)
{
@@ -56,15 +62,32 @@ public class VolumePreference extends DialogPreference implements SeekBar.OnSeek
// setting is applied instantly; no way to cancel
builder.setNegativeButton(null, null);
- ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ Context context = getContext();
- SeekBar seekBar = new SeekBar(getContext());
- seekBar.setPadding(20, 20, 20, 20);
- seekBar.setLayoutParams(params);
- seekBar.setMax(100);
+ LinearLayout layout = new LinearLayout(context);
+ layout.setOrientation(LinearLayout.VERTICAL);
+
+ TextView percent = new TextView(context);
+ percent.setText(getSummary());
+ percent.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);
+ percent.setPadding(10, 0, 10, 0);
+ layout.addView(percent);
+ mPercent = percent;
+
+ SeekBar seekBar = new SeekBar(context);
+ seekBar.setPadding(20, 10, 20, 10);
+ seekBar.setMax(150);
seekBar.setProgress((int)(Math.pow(getPersistedFloat(DEFAULT_VALUE), 0.33f) * 100));
seekBar.setOnSeekBarChangeListener(this);
- builder.setView(seekBar);
+ layout.addView(seekBar);
+
+ TextView message = new TextView(context);
+ message.setText(R.string.volume_warning);
+ message.setGravity(Gravity.CENTER_VERTICAL);
+ message.setPadding(10, 0, 10, 0);
+ layout.addView(message);
+
+ builder.setView(layout);
}
@Override
@@ -73,6 +96,7 @@ public class VolumePreference extends DialogPreference implements SeekBar.OnSeek
// Approximate an exponential curve with x^3. Produces a value from 0.0 - 1.0.
if (fromUser && shouldPersist()) {
persistFloat((float)Math.pow(seekBar.getProgress() / 100.0f, 3));
+ mPercent.setText(getSummary());
}
}