package org.music.player; import org.music.player.R; import android.content.Context; import android.content.res.TypedArray; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; /** * SeekBar preference to set the shake force threshold. */ public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener { /** * The current value. */ private int mValue; /** * TextView to display current threshold. */ private TextView mValueText; public SeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override public CharSequence getSummary() { return getSummary(mValue); } @Override protected Object onGetDefaultValue(TypedArray a, int index) { return a.getInt(index, 100); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { mValue = restoreValue ? getPersistedInt(mValue) : (Integer)defaultValue; } /** * Create the summary for the given value. * * @param value The force threshold. * @return A string representation of the threshold. */ private String getSummary(int value) { if ("shake_threshold".equals(getKey())) { return String.valueOf(value / 10.0f); } else { return String.format("%d%% (%+.1fdB)", value, 20 * Math.log10(Math.pow(value / 100.0, 3))); } } @Override protected View onCreateDialogView() { View view = super.onCreateDialogView(); mValueText = (TextView)view.findViewById(R.id.value); mValueText.setText(getSummary(mValue)); SeekBar seekBar = (SeekBar)view.findViewById(R.id.seek_bar); seekBar.setMax(150); seekBar.setProgress(mValue); seekBar.setOnSeekBarChangeListener(this); return view; } @Override protected void onDialogClosed(boolean positiveResult) { notifyChanged(); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { mValue = progress; mValueText.setText(getSummary(progress)); persistInt(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }