From c36cdb1e4293f105b38c3620321e744d2f9a2049 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 20 Feb 2016 13:53:41 -0500 Subject: [PATCH] Refactor EditHabitsFragment --- .../isoron/uhabits/ReminderAlarmReceiver.java | 2 +- .../org/isoron/uhabits/ReminderHelper.java | 4 +- .../uhabits/dialogs/EditHabitFragment.java | 265 +++++++++--------- .../java/org/isoron/uhabits/models/Habit.java | 32 +-- app/src/main/res/layout/edit_habit.xml | 4 +- app/src/main/res/values/strings.xml | 4 + 6 files changed, 151 insertions(+), 160 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java index 66b7fd418..a018a266e 100644 --- a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java @@ -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); diff --git a/app/src/main/java/org/isoron/uhabits/ReminderHelper.java b/app/src/main/java/org/isoron/uhabits/ReminderHelper.java index 5ad71e6c4..80cfb68e7 100644 --- a/app/src/main/java/org/isoron/uhabits/ReminderHelper.java +++ b/app/src/main/java/org/isoron/uhabits/ReminderHelper.java @@ -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(); diff --git a/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java index 8c858c0e2..6d5706244 100644 --- a/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java +++ b/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java @@ -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"); } } diff --git a/app/src/main/java/org/isoron/uhabits/models/Habit.java b/app/src/main/java/org/isoron/uhabits/models/Habit.java index 7804276f3..845b863eb 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java @@ -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 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() diff --git a/app/src/main/res/layout/edit_habit.xml b/app/src/main/res/layout/edit_habit.xml index 7bb8eb411..011638bba 100644 --- a/app/src/main/res/layout/edit_habit.xml +++ b/app/src/main/res/layout/edit_habit.xml @@ -22,7 +22,7 @@ @@ -72,7 +72,7 @@ android:text="@string/reminder" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94f50ce20..8f2d7e74b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,5 +63,9 @@ Streaks You have no active habits Long press to check or uncheck + Off + Name cannot be blank. + Number must be positive. + You can have at most one repetition per day \ No newline at end of file