package com.quickblox.sample.groupchatwebrtc.view; import android.content.Context; import android.content.res.TypedArray; import android.preference.Preference; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.SeekBar; import com.quickblox.sample.groupchatwebrtc.R; public class SeekBarPreference extends Preference implements SeekBar.OnSeekBarChangeListener { private static final String ANDROID_NS ="http://schemas.android.com/apk/res/android"; private static final String SEEKBAR_NS ="http://schemas.android.com/apk/res-auto"; private Context context; private SeekBar seekBar; private int progress, maxSeekBarValue, minSeekBarValue, seekBarStepSize; public SeekBarPreference(Context context) { this(context, null, 0); } public SeekBarPreference(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setLayoutResource(R.layout.seekbar_preference); this.context = context; initFields(context, attrs); } private void initFields(Context context, AttributeSet attrs) { int maxValueResourceId = attrs.getAttributeResourceValue(ANDROID_NS, "max", R.integer.pref_default_int_value); maxSeekBarValue = context.getResources().getInteger(maxValueResourceId); int minValueResourceId = attrs.getAttributeResourceValue(SEEKBAR_NS, "min", R.integer.pref_default_int_value); minSeekBarValue = context.getResources().getInteger(minValueResourceId); int stepSizeValueResourceId = attrs.getAttributeResourceValue(SEEKBAR_NS, "stepSize", R.integer.pref_default_int_value); seekBarStepSize = context.getResources().getInteger(stepSizeValueResourceId); Log.v("Attribute", "max = " + maxSeekBarValue); Log.v("Attribute", "min = " + minSeekBarValue); Log.v("Attribute", "step = " + seekBarStepSize); } @Override protected void onBindView(View view) { super.onBindView(view); seekBar = (SeekBar) view.findViewById(R.id.seekbar); seekBar.setMax(maxSeekBarValue); seekBar.setProgress(progress); seekBar.setOnSeekBarChangeListener(this); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!fromUser) return; progress = (progress / seekBarStepSize) * seekBarStepSize; if (progress <= minSeekBarValue) { progress = minSeekBarValue + progress; } setValue(progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // not used } @Override public void onStopTrackingTouch(SeekBar seekBar) { // not used } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { setValue(restoreValue ? getPersistedInt(progress) : (Integer) defaultValue); } public void setValue(int value) { if (shouldPersist()) { persistInt(value); } if (value != progress) { progress = value; notifyChanged(); } setSummary(String.valueOf(progress)); } @Override protected Object onGetDefaultValue(TypedArray a, int index) { return a.getInt(index, 0); } }