package tw.loli.lunaTerm.widgets; import tw.kenshinn.keyboardTerm.R; import android.content.Context; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.View; import android.widget.ProgressBar; import android.widget.SeekBar; public class SeekBarPreference extends DialogPreference { private SeekBar mSeekBar; private int mValue; public SeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); setWidgetLayoutResource(R.layout.pref_seekbar); setDialogLayoutResource(R.layout.pref_seekbar_dialog); setDialogTitle(getTitle()); } public SeekBarPreference(Context context) { this(context, null); } protected void onBindView(View view) { super.onBindView(view); ProgressBar valuedisp = (ProgressBar) view.findViewById(R.id.pref_valuedisp); if(valuedisp != null){ valuedisp.setMax(100); valuedisp.setProgress(mValue); } } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); mSeekBar = (SeekBar) view.findViewById(R.id.seekbar); mSeekBar.setProgress(mValue); } @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){ mValue = value; persistInt(value); notifyChanged(); } public int getValue(){ return mValue; } @Override protected Object onGetDefaultValue(TypedArray a, int index) { return a.getInt(index, 50); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { setValue( restoreValue ? getPersistedInt(mValue) : (Integer)defaultValue); } @Override protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); if (isPersistent()) return superState; final SavedState myState = new SavedState(superState); myState.value = mValue; return myState; } @Override protected void onRestoreInstanceState(Parcelable state) { if (state == null || !state.getClass().equals(SavedState.class)) { super.onRestoreInstanceState(state); return; } SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); setValue(myState.value); } private static class SavedState extends BaseSavedState { int value; public SavedState(Parcel source) { super(source); value = source.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(value); } public SavedState(Parcelable superState) { super(superState); } @SuppressWarnings("unused") public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); } public SavedState[] newArray(int size) { return new SavedState[size];} }; } }