package com.android.launcher;
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;
public class DialogSeekBarPreference extends DialogPreference implements
SeekBar.OnSeekBarChangeListener {
private static final String androidns = "http://schemas.android.com/apk/res/android";
private SeekBar mSeekBar;
private TextView mValueText;
private String mSuffix;
private int mMax, mMin, mValue = 0;
public DialogSeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setPersistent(true);
mSuffix = attrs.getAttributeValue(androidns, "text");
mMin = attrs.getAttributeIntValue(androidns, "min", 0);
mMax = attrs.getAttributeIntValue(androidns, "max", 100);
setDialogLayoutResource(R.layout.my_seekbar_preference);
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
TextView dialogMessage = (TextView) v.findViewById(R.id.dialogMessage);
dialogMessage.setText(getDialogMessage());
mValueText = (TextView) v.findViewById(R.id.actualValue);
mSeekBar = (SeekBar) v.findViewById(R.id.myBar);
mSeekBar.setOnSeekBarChangeListener(this);
mSeekBar.setMax(mMax);
mSeekBar.setProgress(mValue);
String t = String.valueOf(mValue + mMin);
mValueText.setText(mSuffix == null ? t : t.concat(mSuffix));
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
mValue = getPersistedInt(defaultValue == null ? 0 : (Integer) defaultValue);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
int value = mSeekBar.getProgress();
if (callChangeListener(value)) {
setValue(value);
}
}
}
public void setValue(int value) {
if (value > mMax) {
value = mMax;
} else if (value < 0) {
value = 0;
}
mValue = value;
persistInt(value);
}
public void setMax(int max) {
mMax = max;
if (mValue > mMax) {
setValue(mMax);
}
}
public void setMin(int min) {
if (min < mMax) {
mMin = min;
}
}
public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) {
String t = String.valueOf(value + mMin);
mValueText.setText(mSuffix == null ? t : t.concat(mSuffix));
}
public void onStartTrackingTouch(SeekBar seek) {
}
public void onStopTrackingTouch(SeekBar seek) {
}
}