Refactor EditHabitsFragment

pull/30/head
Alinson S. Xavier 10 years ago
parent 4c53bd3763
commit c36cdb1e42

@ -110,7 +110,7 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
habit.save();
// Check if reminder has been turned off after alarm was scheduled
if (habit.reminder_hour == null) return;
if (habit.reminderHour == null) return;
Intent contentIntent = new Intent(context, MainActivity.class);
contentIntent.setData(data);

@ -46,8 +46,8 @@ public class ReminderHelper
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, habit.reminder_hour);
calendar.set(Calendar.MINUTE, habit.reminder_min);
calendar.set(Calendar.HOUR_OF_DAY, habit.reminderHour);
calendar.set(Calendar.MINUTE, habit.reminderMin);
calendar.set(Calendar.SECOND, 0);
reminderTime = calendar.getTimeInMillis();

@ -19,7 +19,6 @@ package org.isoron.uhabits.dialogs;
import android.app.DialogFragment;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
@ -46,33 +45,18 @@ import org.isoron.uhabits.models.Habit;
public class EditHabitFragment extends DialogFragment implements OnClickListener
{
private int mode;
private Integer mode;
static final int EDIT_MODE = 0;
static final int CREATE_MODE = 1;
private OnSavedListener onSavedListener;
private Habit originalHabit, modified_habit;
private Habit originalHabit, modifiedHabit;
private TextView tvName, tvDescription, tvFreqNum, tvFreqDen, tvInputReminder;
private SharedPreferences prefs;
private boolean is24HourMode;
static class SolidColorMatrix extends ColorMatrix
{
public SolidColorMatrix(int color)
{
float matrix[] = {0.0f, 0.0f, 0.0f, 0.0f, Color.red(color), 0.0f, 0.0f, 0.0f, 0.0f,
Color.green(color), 0.0f, 0.0f, 0.0f, 0.0f, Color.blue(color), 0.0f, 0.0f, 0.0f,
1.0f, 0};
set(matrix);
}
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Factory *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static EditHabitFragment editSingleHabitFragment(long id)
{
EditHabitFragment frag = new EditHabitFragment();
@ -92,11 +76,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
return frag;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Creation *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@Override
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
@ -105,7 +85,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
tvDescription = (TextView) view.findViewById(R.id.input_description);
tvFreqNum = (TextView) view.findViewById(R.id.input_freq_num);
tvFreqDen = (TextView) view.findViewById(R.id.input_freq_den);
tvInputReminder = (TextView) view.findViewById(R.id.input_reminder_time);
tvInputReminder = (TextView) view.findViewById(R.id.inputReminderTime);
Button buttonSave = (Button) view.findViewById(R.id.buttonSave);
Button buttonDiscard = (Button) view.findViewById(R.id.buttonDiscard);
@ -114,70 +94,52 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
buttonDiscard.setOnClickListener(this);
tvInputReminder.setOnClickListener(this);
ImageButton buttonPickColor = (ImageButton) view.findViewById(R.id.button_pick_color);
ImageButton buttonPickColor = (ImageButton) view.findViewById(R.id.buttonPickColor);
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Bundle args = getArguments();
mode = (Integer) args.get("editMode");
is24HourMode = DateFormat.is24HourFormat(getContext());
is24HourMode = DateFormat.is24HourFormat(getActivity());
if (mode == CREATE_MODE)
{
getDialog().setTitle("Create habit");
modified_habit = new Habit();
modifiedHabit = new Habit();
int defaultNum = prefs.getInt("pref_default_habit_freq_num", modified_habit.freq_num);
int defaultDen = prefs.getInt("pref_default_habit_freq_den", modified_habit.freq_den);
int defaultColor = prefs.getInt("pref_default_habit_color", modified_habit.color);
int defaultNum = prefs.getInt("pref_default_habit_freq_num", modifiedHabit.freqNum);
int defaultDen = prefs.getInt("pref_default_habit_freq_den", modifiedHabit.freqDen);
int defaultColor = prefs.getInt("pref_default_habit_color", modifiedHabit.color);
modified_habit.color = defaultColor;
modified_habit.freq_num = defaultNum;
modified_habit.freq_den = defaultDen;
modifiedHabit.color = defaultColor;
modifiedHabit.freqNum = defaultNum;
modifiedHabit.freqDen = defaultDen;
}
else if (mode == EDIT_MODE)
{
originalHabit = Habit.get((Long) args.get("habitId"));
modified_habit = new Habit(originalHabit);
modifiedHabit = new Habit(originalHabit);
getDialog().setTitle("Edit habit");
tvName.append(modified_habit.name);
tvDescription.append(modified_habit.description);
tvName.append(modifiedHabit.name);
tvDescription.append(modifiedHabit.description);
}
tvFreqNum.append(modified_habit.freq_num.toString());
tvFreqDen.append(modified_habit.freq_den.toString());
tvFreqNum.append(modifiedHabit.freqNum.toString());
tvFreqDen.append(modifiedHabit.freqDen.toString());
changeColor(modified_habit.color);
changeColor(modifiedHabit.color);
updateReminder();
buttonPickColor.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
ColorPickerDialog picker =
ColorPickerDialog.newInstance(R.string.color_picker_default_title,
ColorHelper.palette, modified_habit.color, 4,
ColorPickerDialog.SIZE_SMALL);
picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
{
public void onColorSelected(int color)
{
changeColor(color);
}
});
picker.show(getFragmentManager(), "picker");
}
});
buttonPickColor.setOnClickListener(this);
return view;
}
private void changeColor(Integer color)
{
modified_habit.color = color;
modifiedHabit.color = color;
tvName.setTextColor(color);
SharedPreferences.Editor editor = prefs.edit();
@ -187,17 +149,16 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
private void updateReminder()
{
if (modified_habit.reminder_hour != null)
if (modifiedHabit.reminderHour != null)
{
tvInputReminder.setTextColor(Color.BLACK);
tvInputReminder.setText(
DateHelper.formatTime(getActivity(), modified_habit.reminder_hour,
modified_habit.reminder_min));
tvInputReminder.setText(DateHelper.formatTime(getActivity(),
modifiedHabit.reminderHour, modifiedHabit.reminderMin));
}
else
{
tvInputReminder.setTextColor(Color.GRAY);
tvInputReminder.setText("Off");
tvInputReminder.setText(R.string.reminder_off);
}
}
@ -206,105 +167,131 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
this.onSavedListener = onSavedListener;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Callback *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@Override
@Override
public void onClick(View v)
{
int id = v.getId();
/* Due date spinner */
if (id == R.id.input_reminder_time)
switch(v.getId())
{
int default_hour = 8;
int default_min = 0;
case R.id.inputReminderTime:
onDateSpinnerClick();
break;
if (modified_habit.reminder_hour != null)
{
default_hour = modified_habit.reminder_hour;
default_min = modified_habit.reminder_min;
}
case R.id.buttonSave:
onSaveButtonClick();
break;
TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener()
{
case R.id.buttonDiscard:
dismiss();
break;
@Override
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
{
modified_habit.reminder_hour = hour;
modified_habit.reminder_min = minute;
updateReminder();
}
@Override
public void onTimeCleared(RadialPickerLayout view)
{
modified_habit.reminder_hour = null;
modified_habit.reminder_min = null;
updateReminder();
}
}, default_hour, default_min, is24HourMode);
timePicker.show(getFragmentManager(), "timePicker");
case R.id.buttonPickColor:
onColorButtonClick();
break;
}
}
private void onColorButtonClick()
{
ColorPickerDialog picker = ColorPickerDialog.newInstance(
R.string.color_picker_default_title, ColorHelper.palette, modifiedHabit.color, 4,
ColorPickerDialog.SIZE_SMALL);
/* Save button */
if (id == R.id.buttonSave)
picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
{
Command command = null;
public void onColorSelected(int color)
{
changeColor(color);
}
});
picker.show(getFragmentManager(), "picker");
}
modified_habit.name = tvName.getText().toString().trim();
modified_habit.description = tvDescription.getText().toString().trim();
modified_habit.freq_num = Integer.parseInt(tvFreqNum.getText().toString());
modified_habit.freq_den = Integer.parseInt(tvFreqDen.getText().toString());
private void onSaveButtonClick()
{
Command command = null;
Boolean valid = true;
modifiedHabit.name = tvName.getText().toString().trim();
modifiedHabit.description = tvDescription.getText().toString().trim();
modifiedHabit.freqNum = Integer.parseInt(tvFreqNum.getText().toString());
modifiedHabit.freqDen = Integer.parseInt(tvFreqDen.getText().toString());
if (modified_habit.name.length() == 0)
{
tvName.setError("Name cannot be blank.");
valid = false;
}
if (!validate()) return;
if (modified_habit.freq_den <= 0)
{
tvFreqNum.setError("Number must be positive.");
valid = false;
}
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("pref_default_habit_freq_num", modifiedHabit.freqNum);
editor.putInt("pref_default_habit_freq_den", modifiedHabit.freqDen);
editor.apply();
if (modified_habit.freq_num > modified_habit.freq_den)
{
tvFreqNum.setError("You can have at most one repetition per day");
valid = false;
}
Habit savedHabit = null;
if (!valid) return;
if (mode == EDIT_MODE)
{
command = originalHabit.new EditCommand(modifiedHabit);
savedHabit = originalHabit;
}
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("pref_default_habit_freq_num", modified_habit.freq_num);
editor.putInt("pref_default_habit_freq_den", modified_habit.freq_den);
editor.apply();
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modifiedHabit);
Habit savedHabit = null;
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit);
if (mode == EDIT_MODE)
{
command = originalHabit.new EditCommand(modified_habit);
savedHabit = originalHabit;
}
dismiss();
}
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modified_habit);
private boolean validate()
{
Boolean valid = true;
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit);
if (modifiedHabit.name.length() == 0)
{
tvName.setError(getString(R.string.validation_name_should_not_be_blank));
valid = false;
}
dismiss();
if (modifiedHabit.freqNum <= 0)
{
tvFreqNum.setError(getString(R.string.validation_number_should_be_positive));
valid = false;
}
/* Discard button */
if (id == R.id.buttonDiscard)
if (modifiedHabit.freqNum > modifiedHabit.freqDen)
{
dismiss();
tvFreqNum.setError(getString(R.string.validation_at_most_one_rep_per_day));
valid = false;
}
return valid;
}
private void onDateSpinnerClick()
{
int defaultHour = 8;
int defaultMin = 0;
if (modifiedHabit.reminderHour != null)
{
defaultHour = modifiedHabit.reminderHour;
defaultMin = modifiedHabit.reminderMin;
}
TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener()
{
@Override
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
{
modifiedHabit.reminderHour = hour;
modifiedHabit.reminderMin = minute;
updateReminder();
}
@Override
public void onTimeCleared(RadialPickerLayout view)
{
modifiedHabit.reminderHour = null;
modifiedHabit.reminderMin = null;
updateReminder();
}
}, defaultHour, defaultMin, is24HourMode);
timePicker.show(getFragmentManager(), "timePicker");
}
}

@ -57,10 +57,10 @@ public class Habit extends Model
public String description;
@Column(name = "freq_num")
public Integer freq_num;
public Integer freqNum;
@Column(name = "freq_den")
public Integer freq_den;
public Integer freqDen;
@Column(name = "color")
public Integer color;
@ -69,10 +69,10 @@ public class Habit extends Model
public Integer position;
@Column(name = "reminder_hour")
public Integer reminder_hour;
public Integer reminderHour;
@Column(name = "reminder_min")
public Integer reminder_min;
public Integer reminderMin;
@Column(name = "highlight")
public Integer highlight;
@ -91,8 +91,8 @@ public class Habit extends Model
this.position = Habit.getCount();
this.highlight = 0;
this.archived = 0;
this.freq_den = 7;
this.freq_num = 3;
this.freqDen = 7;
this.freqNum = 3;
}
public static Habit get(Long id)
@ -232,12 +232,12 @@ public class Habit extends Model
{
this.name = model.name;
this.description = model.description;
this.freq_num = model.freq_num;
this.freq_den = model.freq_den;
this.freqNum = model.freqNum;
this.freqDen = model.freqDen;
this.color = model.color;
this.position = model.position;
this.reminder_hour = model.reminder_hour;
this.reminder_min = model.reminder_min;
this.reminderHour = model.reminderHour;
this.reminderMin = model.reminderMin;
this.highlight = model.highlight;
this.archived = model.archived;
}
@ -343,7 +343,7 @@ public class Habit extends Model
if (beginning > today) return;
long beginningExtended = beginning - (long) (freq_den) * day;
long beginningExtended = beginning - (long) (freqDen) * day;
List<Repetition> reps = selectRepsFromTo(beginningExtended, today).execute();
int nDays = (int) ((today - beginning) / day) + 1;
@ -363,10 +363,10 @@ public class Habit extends Model
{
int counter = 0;
for (int j = 0; j < freq_den; j++)
for (int j = 0; j < freqDen; j++)
if (checks[i + j] == 2) counter++;
if (counter >= freq_num) checks[i] = Math.max(checks[i], 1);
if (counter >= freqNum) checks[i] = Math.max(checks[i], 1);
}
ActiveAndroid.beginTransaction();
@ -491,7 +491,7 @@ public class Habit extends Model
long today = DateHelper.getStartOfDay(DateHelper.getLocalTime());
long day = DateHelper.millisecondsInOneDay;
double freq = ((double) freq_num) / freq_den;
double freq = ((double) freqNum) / freqDen;
double multiplier = Math.pow(0.5, 1.0 / (14.0 / freq - 1));
Score newestScore = getNewestScore();
@ -696,8 +696,8 @@ public class Habit extends Model
this.modified = new Habit(modified);
this.original = new Habit(Habit.this);
hasIntervalChanged = (this.original.freq_den != this.modified.freq_den ||
this.original.freq_num != this.modified.freq_num);
hasIntervalChanged = (this.original.freqDen != this.modified.freqDen ||
this.original.freqNum != this.modified.freqNum);
}
public void execute()

@ -22,7 +22,7 @@
</EditText>
<ImageButton
android:id="@+id/button_pick_color"
android:id="@+id/buttonPickColor"
android:src="@drawable/ic_action_pick_color"
style="@style/dialogFormInputColor" />
</LinearLayout>
@ -72,7 +72,7 @@
android:text="@string/reminder" />
<TextView
android:id="@+id/input_reminder_time"
android:id="@+id/inputReminderTime"
style="@style/dialogFormTimePicker" />
</LinearLayout>

@ -63,5 +63,9 @@
<string name="streaks">Streaks</string>
<string name="no_habits_found">You have no active habits</string>
<string name="long_press_to_toggle">Long press to check or uncheck</string>
<string name="reminder_off">Off</string>
<string name="validation_name_should_not_be_blank">Name cannot be blank.</string>
<string name="validation_number_should_be_positive">Number must be positive.</string>
<string name="validation_at_most_one_rep_per_day">You can have at most one repetition per day</string>
</resources>
Loading…
Cancel
Save