package cl.monsoon.s1next.viewmodel; import android.databinding.BaseObservable; import android.databinding.Bindable; import android.databinding.ObservableInt; import android.text.Editable; import android.text.InputFilter; import android.text.TextUtils; import android.text.TextWatcher; import android.widget.SeekBar; import cl.monsoon.s1next.BR; import cl.monsoon.s1next.widget.RangeInputFilter; public final class PageJumpViewModel extends BaseObservable { private final ObservableInt seekBarMax = new ObservableInt(); private int seekBarProgress; public PageJumpViewModel(int seekBarMax, int seekBarProgress) { this.seekBarMax.set(seekBarMax); this.seekBarProgress = seekBarProgress; } public int getSeekBarMax() { return seekBarMax.get(); } @Bindable public int getSeekBarProgress() { return seekBarProgress; } @Bindable public CharSequence getSeekBarProgressText() { // current page is zero-based return String.valueOf(seekBarProgress + 1); } private void setSeekBarProgress(int seekBarProgress) { this.seekBarProgress = seekBarProgress; } public SeekBar.OnSeekBarChangeListener getOnSeekBarChangeListener() { return new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress != PageJumpViewModel.this.seekBarProgress) { setSeekBarProgress(progress); notifyPropertyChanged(BR.seekBarProgressText); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }; } public InputFilter[] getFilters() { // SeekBar max is zero-based return new InputFilter[]{new RangeInputFilter(1, seekBarMax.get() + 1)}; } public TextWatcher getTextWatcher() { return new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { String value = s.toString(); if (!TextUtils.isEmpty(s)) { int progress = Integer.parseInt(value) - 1; if (progress != PageJumpViewModel.this.seekBarProgress) { setSeekBarProgress(progress); notifyPropertyChanged(BR.seekBarProgress); } } } }; } }