package kz.virtex.htc.tweaker.preference; import java.util.ArrayList; import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; import com.htc.preference.HtcSeekBarPreference; import com.htc.widget.HtcSeekBar; public class SeekBarPreference extends HtcSeekBarPreference implements SeekBar.OnSeekBarChangeListener { private HtcSeekBar mHtcSeekBar; private String mKey; private int mMax; private OnSeekBarTrackListener mListener; public interface OnSeekBarTrackListener { public void onSeekBarTrack(SeekBar paramSeekBar, int value); } public void setOnSeekBarTrackListener(OnSeekBarTrackListener listener) { mListener = listener; } public SeekBarPreference(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); mKey = paramAttributeSet.getAttributeValue( "http://schemas.android.com/apk/res/android", "key"); TypedArray localTypedArray = paramContext.obtainStyledAttributes( paramAttributeSet, android.R.styleable.ProgressBar, 0, 0); mMax = localTypedArray.getInt(2, 5); localTypedArray.recycle(); } @Override protected void onBindView(View view) { super.onBindView(view); SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); getAllChildren(view); mHtcSeekBar.setOnSeekBarChangeListener(this); mHtcSeekBar.setMax(mMax); mHtcSeekBar.setProgress(prefs.getInt(mKey, 0)); mHtcSeekBar.setEnabled(isEnabled()); } private ArrayList<View> getAllChildren(View v) { if (!(v instanceof ViewGroup)) { ArrayList<View> viewArrayList = new ArrayList<View>(); viewArrayList.add(v); return viewArrayList; } ArrayList<View> result = new ArrayList<View>(); ViewGroup vg = (ViewGroup) v; for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); if (child instanceof HtcSeekBar) { mHtcSeekBar = (HtcSeekBar) child; } ArrayList<View> viewArrayList = new ArrayList<View>(); viewArrayList.add(v); viewArrayList.addAll(getAllChildren(child)); result.addAll(viewArrayList); } return result; } public void onProgressChanged(SeekBar paramSeekBar, int paramInt, boolean arg2) { if (mListener != null) { mListener.onSeekBarTrack(paramSeekBar, paramInt); } } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar paramSeekBar) { getPreferenceManager().getSharedPreferences().edit().putInt(mKey, paramSeekBar.getProgress()).commit(); } }