package es.jonatantierno.scrumdailytimer; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.google.inject.Inject; /** * This class controls the seekbar that defines the slot duration. It limits the possible values to intervals of 30 * seconds, the min duration to 30 seconds and the max duration to 5 minutes (300 seconds) * * @author root */ public class SlotSeekBarController { /** * Minimum slot interval (and minimum slot value) in seconds. */ public static final int MINIMUM_INTERVAL = 30; /** * Default value of slot: 1 minute */ public static final int DEFAULT_VALUE = 60; private SeekBar mSeekBar; private final OnSeekBarChangeListener mListener; private ChronoInterface mChronoInterface; @Inject public SlotSeekBarController() { mListener = new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { notifyProgress(mSeekBar.getProgress()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { notifyProgress(progress); } }; } private void notifyProgress(int progress) { int closest = getClosestSlot(progress); mSeekBar.setProgress(closest); mChronoInterface.setTime(closest); } /** * For testing. * * @return listener. */ OnSeekBarChangeListener getListener() { return mListener; } private int getClosestSlot(int progress) { int progress_slot = (int) (Math.round((double) progress / (double) MINIMUM_INTERVAL)) * MINIMUM_INTERVAL; if (progress_slot < MINIMUM_INTERVAL) { progress_slot = MINIMUM_INTERVAL; } return progress_slot; } /** * Configure controller * * @param seekBar seekbar view that controls the slot * @param chronoInterface interface to the chrono visual element. */ public void configure(SeekBar seekBar, ChronoInterface chronoInterface) { mChronoInterface = chronoInterface; mSeekBar = seekBar; mSeekBar.setOnSeekBarChangeListener(mListener); } }