Making the timer controls easier to use for rapid changing.

pull/14/head
Tim Su 16 years ago
parent e7447982b1
commit 4a269279a4

@ -10,7 +10,6 @@ import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet; import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.ui.TimeDurationControlSet; import com.todoroo.astrid.ui.TimeDurationControlSet;
import com.todoroo.astrid.ui.TimeDurationControlSet.TimeDurationType;
/** /**
* Control Set for managing repeats * Control Set for managing repeats
@ -31,11 +30,11 @@ public class TimerControlSet implements TaskEditControlSet {
LayoutInflater.from(activity).inflate(R.layout.timer_control, parent, true); LayoutInflater.from(activity).inflate(R.layout.timer_control, parent, true);
estimated = new TimeDurationTaskEditControlSet(Task.ESTIMATED_SECONDS, estimated = new TimeDurationTaskEditControlSet(Task.ESTIMATED_SECONDS,
R.id.estimatedDuration, 0, R.string.DLG_hour_minutes, R.id.estimatedDuration, 0, R.string.DLG_hour_minutes
TimeDurationType.HOURS_MINUTES); );
elapsed = new TimeDurationTaskEditControlSet(Task.ELAPSED_SECONDS, R.id.elapsedDuration, elapsed = new TimeDurationTaskEditControlSet(Task.ELAPSED_SECONDS, R.id.elapsedDuration,
0, R.string.DLG_hour_minutes, 0, R.string.DLG_hour_minutes
TimeDurationType.HOURS_MINUTES); );
} }
@Override @Override
@ -62,10 +61,10 @@ public class TimerControlSet implements TaskEditControlSet {
private final IntegerProperty property; private final IntegerProperty property;
public TimeDurationTaskEditControlSet(IntegerProperty property, int timeButtonId, public TimeDurationTaskEditControlSet(IntegerProperty property, int timeButtonId,
int prefixResource, int titleResource, TimeDurationType type) { int prefixResource, int titleResource) {
this.property = property; this.property = property;
this.controlSet = new TimeDurationControlSet(activity, this.controlSet = new TimeDurationControlSet(activity,
timeButtonId, prefixResource, titleResource, type); timeButtonId, prefixResource, titleResource);
} }
@Override @Override

@ -29,9 +29,9 @@ import android.content.DialogInterface.OnClickListener;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.FrameLayout.LayoutParams;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.FrameLayout.LayoutParams;
import com.timsu.astrid.R; import com.timsu.astrid.R;
@ -102,6 +102,10 @@ public class NNumberPickerDialog extends AlertDialog implements OnClickListener
} }
} }
public NumberPicker getPicker(int index) {
return pickers.get(index);
}
public void setInitialValues(int[] values) { public void setInitialValues(int[] values) {
for(int i = 0; i < pickers.size(); i++) for(int i = 0; i < pickers.size(); i++)
pickers.get(i).setCurrent(values[i]); pickers.get(i).setCurrent(values[i]);

@ -44,7 +44,8 @@ public class NumberPicker extends LinearLayout implements OnClickListener,
OnFocusChangeListener, OnLongClickListener { OnFocusChangeListener, OnLongClickListener {
public interface OnChangedListener { public interface OnChangedListener {
void onChanged(NumberPicker picker, int oldVal, int newVal); /** return new value */
int onChanged(NumberPicker picker, int oldVal, int newVal);
} }
public interface Formatter { public interface Formatter {
@ -253,6 +254,7 @@ public class NumberPicker extends LinearLayout implements OnClickListener,
} }
private void changeCurrent(int current, Animation in, Animation out) { private void changeCurrent(int current, Animation in, Animation out) {
current = notifyChange();
// Wrap around the values if we go past the start or end // Wrap around the values if we go past the start or end
if (current > mEnd) { if (current > mEnd) {
@ -262,14 +264,15 @@ public class NumberPicker extends LinearLayout implements OnClickListener,
} }
mPrevious = mCurrent; mPrevious = mCurrent;
mCurrent = current; mCurrent = current;
notifyChange();
updateView(); updateView();
} }
private void notifyChange() { private int notifyChange() {
if (mListener != null) { if (mListener != null) {
mListener.onChanged(this, mPrevious, mCurrent); return mListener.onChanged(this, mPrevious, mCurrent);
} } else
return mCurrent;
} }
private void updateView() { private void updateView() {

@ -37,47 +37,49 @@ public class TimeDurationControlSet implements OnNNumberPickedListener,
@Autowired @Autowired
DateUtilities dateUtilities; DateUtilities dateUtilities;
public enum TimeDurationType {
DAYS_HOURS,
HOURS_MINUTES;
}
private final Activity activity; private final Activity activity;
private final Button timeButton; private final Button timeButton;
private final NNumberPickerDialog dialog; private final NNumberPickerDialog dialog;
private final int prefixResource; private final int prefixResource;
private final TimeDurationType type;
private int timeDuration; private int timeDuration;
public TimeDurationControlSet(Activity activity, int timeButtonId, public TimeDurationControlSet(Activity activity, int timeButtonId,
int prefixResource, int titleResource, TimeDurationType type) { int prefixResource, int titleResource) {
DependencyInjectionService.getInstance().inject(this); DependencyInjectionService.getInstance().inject(this);
this.activity = activity; this.activity = activity;
this.prefixResource = prefixResource; this.prefixResource = prefixResource;
this.type = type;
timeButton = (Button)activity.findViewById(timeButtonId); timeButton = (Button)activity.findViewById(timeButtonId);
timeButton.setOnClickListener(this); timeButton.setOnClickListener(this);
switch(type) { dialog = new NNumberPickerDialog(activity, this,
case DAYS_HOURS: activity.getResources().getString(titleResource),
dialog = new NNumberPickerDialog(activity, this, new int[] {0, 0}, new int[] {1, 5}, new int[] {0, 0},
activity.getResources().getString(titleResource), new int[] {99, 59}, new String[] {":", null});
new int[] {0, 0}, new int[] {1, 1}, new int[] {0, 0}, final NumberPicker hourPicker = dialog.getPicker(0);
new int[] {31, 23}, new String[] { final NumberPicker minutePicker = dialog.getPicker(1);
"d\na\ny\ns", minutePicker.setFormatter(new NumberPicker.Formatter() {
"h\nr\ns" @Override
}); public String toString(int value) {
break; return String.format("%02d", value);
case HOURS_MINUTES: }
default: });
dialog = new NNumberPickerDialog(activity, this, minutePicker.setOnChangeListener(new NumberPicker.OnChangedListener() {
activity.getResources().getString(titleResource), @Override
new int[] {0, 0}, new int[] {1, 5}, new int[] {0, 0}, public int onChanged(NumberPicker picker, int oldVal, int newVal) {
new int[] {99, 59}, new String[] {":", null}); if(newVal < 0) {
break; if(hourPicker.getCurrent() == 0)
} return 0;
hourPicker.setCurrent(hourPicker.getCurrent() - 1);
return 60 - newVal;
} else if(newVal > 59) {
hourPicker.setCurrent(hourPicker.getCurrent() + 1);
return newVal % 60;
}
return newVal;
}
});
} }
public int getTimeDurationInSeconds() { public int getTimeDurationInSeconds() {
@ -97,33 +99,20 @@ public class TimeDurationControlSet implements OnNNumberPickedListener,
} }
String prefix = ""; String prefix = "";
if(prefixResource != 0) if (prefixResource != 0)
prefix = r.getString(prefixResource); prefix = r.getString(prefixResource);
timeButton.setText(prefix + " " + dateUtilities.getDurationString( timeButton.setText(prefix
timeDurationInSeconds * 1000L, 2)); + " "
switch(type) { + dateUtilities.getDurationString(
case DAYS_HOURS: timeDurationInSeconds * 1000L, 2));
int days = timeDuration / 24 / 3600; int hours = timeDuration / 3600;
int hours = timeDuration / 3600 - 24 * days; int minutes = timeDuration / 60 - 60 * hours;
dialog.setInitialValues(new int[] {days, hours}); dialog.setInitialValues(new int[] { hours, minutes });
break;
case HOURS_MINUTES:
hours = timeDuration / 3600;
int minutes = timeDuration/60 - 60 * hours;
dialog.setInitialValues(new int[] {hours, minutes});
}
} }
/** Called when NumberPicker activity is completed */ /** Called when NumberPicker activity is completed */
public void onNumbersPicked(int[] values) { public void onNumbersPicked(int[] values) {
switch(type) { setTimeDuration(values[0] * 3600 + values[1] * 60);
case DAYS_HOURS:
setTimeDuration(values[0] * 24 * 3600 + values[1] * 3600);
break;
case HOURS_MINUTES:
setTimeDuration(values[0] * 3600 + values[1] * 60);
break;
}
} }
/** Called when time button is clicked */ /** Called when time button is clicked */

Loading…
Cancel
Save