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(); habit.save();
// Check if reminder has been turned off after alarm was scheduled // 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); Intent contentIntent = new Intent(context, MainActivity.class);
contentIntent.setData(data); contentIntent.setData(data);

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

@ -19,7 +19,6 @@ package org.isoron.uhabits.dialogs;
import android.app.DialogFragment; import android.app.DialogFragment;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.format.DateFormat; import android.text.format.DateFormat;
@ -46,33 +45,18 @@ import org.isoron.uhabits.models.Habit;
public class EditHabitFragment extends DialogFragment implements OnClickListener public class EditHabitFragment extends DialogFragment implements OnClickListener
{ {
private int mode; private Integer mode;
static final int EDIT_MODE = 0; static final int EDIT_MODE = 0;
static final int CREATE_MODE = 1; static final int CREATE_MODE = 1;
private OnSavedListener onSavedListener; private OnSavedListener onSavedListener;
private Habit originalHabit, modified_habit; private Habit originalHabit, modifiedHabit;
private TextView tvName, tvDescription, tvFreqNum, tvFreqDen, tvInputReminder; private TextView tvName, tvDescription, tvFreqNum, tvFreqDen, tvInputReminder;
private SharedPreferences prefs; private SharedPreferences prefs;
private boolean is24HourMode; 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) static EditHabitFragment editSingleHabitFragment(long id)
{ {
EditHabitFragment frag = new EditHabitFragment(); EditHabitFragment frag = new EditHabitFragment();
@ -92,10 +76,6 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
return frag; return frag;
} }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Creation *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) Bundle savedInstanceState)
@ -105,7 +85,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
tvDescription = (TextView) view.findViewById(R.id.input_description); tvDescription = (TextView) view.findViewById(R.id.input_description);
tvFreqNum = (TextView) view.findViewById(R.id.input_freq_num); tvFreqNum = (TextView) view.findViewById(R.id.input_freq_num);
tvFreqDen = (TextView) view.findViewById(R.id.input_freq_den); 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 buttonSave = (Button) view.findViewById(R.id.buttonSave);
Button buttonDiscard = (Button) view.findViewById(R.id.buttonDiscard); Button buttonDiscard = (Button) view.findViewById(R.id.buttonDiscard);
@ -114,70 +94,52 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
buttonDiscard.setOnClickListener(this); buttonDiscard.setOnClickListener(this);
tvInputReminder.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()); prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Bundle args = getArguments(); Bundle args = getArguments();
mode = (Integer) args.get("editMode"); mode = (Integer) args.get("editMode");
is24HourMode = DateFormat.is24HourFormat(getContext()); is24HourMode = DateFormat.is24HourFormat(getActivity());
if (mode == CREATE_MODE) if (mode == CREATE_MODE)
{ {
getDialog().setTitle("Create habit"); 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 defaultNum = prefs.getInt("pref_default_habit_freq_num", modifiedHabit.freqNum);
int defaultDen = prefs.getInt("pref_default_habit_freq_den", modified_habit.freq_den); int defaultDen = prefs.getInt("pref_default_habit_freq_den", modifiedHabit.freqDen);
int defaultColor = prefs.getInt("pref_default_habit_color", modified_habit.color); int defaultColor = prefs.getInt("pref_default_habit_color", modifiedHabit.color);
modified_habit.color = defaultColor; modifiedHabit.color = defaultColor;
modified_habit.freq_num = defaultNum; modifiedHabit.freqNum = defaultNum;
modified_habit.freq_den = defaultDen; modifiedHabit.freqDen = defaultDen;
} }
else if (mode == EDIT_MODE) else if (mode == EDIT_MODE)
{ {
originalHabit = Habit.get((Long) args.get("habitId")); originalHabit = Habit.get((Long) args.get("habitId"));
modified_habit = new Habit(originalHabit); modifiedHabit = new Habit(originalHabit);
getDialog().setTitle("Edit habit"); getDialog().setTitle("Edit habit");
tvName.append(modified_habit.name); tvName.append(modifiedHabit.name);
tvDescription.append(modified_habit.description); tvDescription.append(modifiedHabit.description);
} }
tvFreqNum.append(modified_habit.freq_num.toString()); tvFreqNum.append(modifiedHabit.freqNum.toString());
tvFreqDen.append(modified_habit.freq_den.toString()); tvFreqDen.append(modifiedHabit.freqDen.toString());
changeColor(modified_habit.color); changeColor(modifiedHabit.color);
updateReminder(); updateReminder();
buttonPickColor.setOnClickListener(new OnClickListener() buttonPickColor.setOnClickListener(this);
{
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");
}
});
return view; return view;
} }
private void changeColor(Integer color) private void changeColor(Integer color)
{ {
modified_habit.color = color; modifiedHabit.color = color;
tvName.setTextColor(color); tvName.setTextColor(color);
SharedPreferences.Editor editor = prefs.edit(); SharedPreferences.Editor editor = prefs.edit();
@ -187,17 +149,16 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
private void updateReminder() private void updateReminder()
{ {
if (modified_habit.reminder_hour != null) if (modifiedHabit.reminderHour != null)
{ {
tvInputReminder.setTextColor(Color.BLACK); tvInputReminder.setTextColor(Color.BLACK);
tvInputReminder.setText( tvInputReminder.setText(DateHelper.formatTime(getActivity(),
DateHelper.formatTime(getActivity(), modified_habit.reminder_hour, modifiedHabit.reminderHour, modifiedHabit.reminderMin));
modified_habit.reminder_min));
} }
else else
{ {
tvInputReminder.setTextColor(Color.GRAY); 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; this.onSavedListener = onSavedListener;
} }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Callback *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@Override @Override
public void onClick(View v) public void onClick(View v)
{ {
int id = v.getId(); switch(v.getId())
/* Due date spinner */
if (id == R.id.input_reminder_time)
{ {
int default_hour = 8; case R.id.inputReminderTime:
int default_min = 0; onDateSpinnerClick();
break;
if (modified_habit.reminder_hour != null) case R.id.buttonSave:
{ onSaveButtonClick();
default_hour = modified_habit.reminder_hour; break;
default_min = modified_habit.reminder_min;
case R.id.buttonDiscard:
dismiss();
break;
case R.id.buttonPickColor:
onColorButtonClick();
break;
}
} }
TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener() private void onColorButtonClick()
{ {
ColorPickerDialog picker = ColorPickerDialog.newInstance(
R.string.color_picker_default_title, ColorHelper.palette, modifiedHabit.color, 4,
ColorPickerDialog.SIZE_SMALL);
@Override picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
{ {
modified_habit.reminder_hour = hour; public void onColorSelected(int color)
modified_habit.reminder_min = minute;
updateReminder();
}
@Override
public void onTimeCleared(RadialPickerLayout view)
{ {
modified_habit.reminder_hour = null; changeColor(color);
modified_habit.reminder_min = null;
updateReminder();
} }
}, default_hour, default_min, is24HourMode); });
timePicker.show(getFragmentManager(), "timePicker"); picker.show(getFragmentManager(), "picker");
} }
/* Save button */ private void onSaveButtonClick()
if (id == R.id.buttonSave)
{ {
Command command = null; Command command = null;
modified_habit.name = tvName.getText().toString().trim(); modifiedHabit.name = tvName.getText().toString().trim();
modified_habit.description = tvDescription.getText().toString().trim(); modifiedHabit.description = tvDescription.getText().toString().trim();
modified_habit.freq_num = Integer.parseInt(tvFreqNum.getText().toString()); modifiedHabit.freqNum = Integer.parseInt(tvFreqNum.getText().toString());
modified_habit.freq_den = Integer.parseInt(tvFreqDen.getText().toString()); modifiedHabit.freqDen = Integer.parseInt(tvFreqDen.getText().toString());
if (!validate()) return;
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();
Habit savedHabit = null;
if (mode == EDIT_MODE)
{
command = originalHabit.new EditCommand(modifiedHabit);
savedHabit = originalHabit;
}
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modifiedHabit);
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit);
dismiss();
}
private boolean validate()
{
Boolean valid = true; Boolean valid = true;
if (modified_habit.name.length() == 0) if (modifiedHabit.name.length() == 0)
{ {
tvName.setError("Name cannot be blank."); tvName.setError(getString(R.string.validation_name_should_not_be_blank));
valid = false; valid = false;
} }
if (modified_habit.freq_den <= 0) if (modifiedHabit.freqNum <= 0)
{ {
tvFreqNum.setError("Number must be positive."); tvFreqNum.setError(getString(R.string.validation_number_should_be_positive));
valid = false; valid = false;
} }
if (modified_habit.freq_num > modified_habit.freq_den) if (modifiedHabit.freqNum > modifiedHabit.freqDen)
{ {
tvFreqNum.setError("You can have at most one repetition per day"); tvFreqNum.setError(getString(R.string.validation_at_most_one_rep_per_day));
valid = false; valid = false;
} }
if (!valid) return; return valid;
}
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();
Habit savedHabit = null; private void onDateSpinnerClick()
{
int defaultHour = 8;
int defaultMin = 0;
if (mode == EDIT_MODE) if (modifiedHabit.reminderHour != null)
{ {
command = originalHabit.new EditCommand(modified_habit); defaultHour = modifiedHabit.reminderHour;
savedHabit = originalHabit; defaultMin = modifiedHabit.reminderMin;
} }
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modified_habit); TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener()
{
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit); @Override
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
dismiss(); {
modifiedHabit.reminderHour = hour;
modifiedHabit.reminderMin = minute;
updateReminder();
} }
/* Discard button */ @Override
if (id == R.id.buttonDiscard) public void onTimeCleared(RadialPickerLayout view)
{ {
dismiss(); 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; public String description;
@Column(name = "freq_num") @Column(name = "freq_num")
public Integer freq_num; public Integer freqNum;
@Column(name = "freq_den") @Column(name = "freq_den")
public Integer freq_den; public Integer freqDen;
@Column(name = "color") @Column(name = "color")
public Integer color; public Integer color;
@ -69,10 +69,10 @@ public class Habit extends Model
public Integer position; public Integer position;
@Column(name = "reminder_hour") @Column(name = "reminder_hour")
public Integer reminder_hour; public Integer reminderHour;
@Column(name = "reminder_min") @Column(name = "reminder_min")
public Integer reminder_min; public Integer reminderMin;
@Column(name = "highlight") @Column(name = "highlight")
public Integer highlight; public Integer highlight;
@ -91,8 +91,8 @@ public class Habit extends Model
this.position = Habit.getCount(); this.position = Habit.getCount();
this.highlight = 0; this.highlight = 0;
this.archived = 0; this.archived = 0;
this.freq_den = 7; this.freqDen = 7;
this.freq_num = 3; this.freqNum = 3;
} }
public static Habit get(Long id) public static Habit get(Long id)
@ -232,12 +232,12 @@ public class Habit extends Model
{ {
this.name = model.name; this.name = model.name;
this.description = model.description; this.description = model.description;
this.freq_num = model.freq_num; this.freqNum = model.freqNum;
this.freq_den = model.freq_den; this.freqDen = model.freqDen;
this.color = model.color; this.color = model.color;
this.position = model.position; this.position = model.position;
this.reminder_hour = model.reminder_hour; this.reminderHour = model.reminderHour;
this.reminder_min = model.reminder_min; this.reminderMin = model.reminderMin;
this.highlight = model.highlight; this.highlight = model.highlight;
this.archived = model.archived; this.archived = model.archived;
} }
@ -343,7 +343,7 @@ public class Habit extends Model
if (beginning > today) return; if (beginning > today) return;
long beginningExtended = beginning - (long) (freq_den) * day; long beginningExtended = beginning - (long) (freqDen) * day;
List<Repetition> reps = selectRepsFromTo(beginningExtended, today).execute(); List<Repetition> reps = selectRepsFromTo(beginningExtended, today).execute();
int nDays = (int) ((today - beginning) / day) + 1; int nDays = (int) ((today - beginning) / day) + 1;
@ -363,10 +363,10 @@ public class Habit extends Model
{ {
int counter = 0; 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 (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(); ActiveAndroid.beginTransaction();
@ -491,7 +491,7 @@ public class Habit extends Model
long today = DateHelper.getStartOfDay(DateHelper.getLocalTime()); long today = DateHelper.getStartOfDay(DateHelper.getLocalTime());
long day = DateHelper.millisecondsInOneDay; 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)); double multiplier = Math.pow(0.5, 1.0 / (14.0 / freq - 1));
Score newestScore = getNewestScore(); Score newestScore = getNewestScore();
@ -696,8 +696,8 @@ public class Habit extends Model
this.modified = new Habit(modified); this.modified = new Habit(modified);
this.original = new Habit(Habit.this); this.original = new Habit(Habit.this);
hasIntervalChanged = (this.original.freq_den != this.modified.freq_den || hasIntervalChanged = (this.original.freqDen != this.modified.freqDen ||
this.original.freq_num != this.modified.freq_num); this.original.freqNum != this.modified.freqNum);
} }
public void execute() public void execute()

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

@ -63,5 +63,9 @@
<string name="streaks">Streaks</string> <string name="streaks">Streaks</string>
<string name="no_habits_found">You have no active habits</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="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> </resources>
Loading…
Cancel
Save