diff --git a/app/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java b/app/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java new file mode 100644 index 000000000..aa758cbb7 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java @@ -0,0 +1,66 @@ +/* Copyright (C) 2016 Alinson Santos Xavier + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.isoron.uhabits.commands; + +import org.isoron.helpers.Command; +import org.isoron.uhabits.R; +import org.isoron.uhabits.models.Habit; + +public class CreateHabitCommand extends Command +{ + private Habit model; + private Long savedId; + + public CreateHabitCommand(Habit model) + { + this.model = model; + } + + @Override + public void execute() + { + Habit savedHabit = new Habit(model); + if (savedId == null) + { + savedHabit.save(); + savedId = savedHabit.getId(); + } + else + { + savedHabit.save(savedId); + } + } + + @Override + public void undo() + { + Habit.get(savedId).delete(); + } + + @Override + public Integer getExecuteStringId() + { + return R.string.toast_habit_created; + } + + @Override + public Integer getUndoStringId() + { + return R.string.toast_habit_deleted; + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java b/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java new file mode 100644 index 000000000..f70a841b4 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java @@ -0,0 +1,75 @@ +/* Copyright (C) 2016 Alinson Santos Xavier + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.isoron.uhabits.commands; + +import org.isoron.helpers.Command; +import org.isoron.uhabits.R; +import org.isoron.uhabits.models.Habit; + +public class EditHabitCommand extends Command +{ + private Habit original; + private Habit modified; + private long savedId; + private boolean hasIntervalChanged; + + public EditHabitCommand(Habit original, Habit modified) + { + this.savedId = original.getId(); + this.modified = new Habit(modified); + this.original = new Habit(original); + + hasIntervalChanged = (this.original.freqDen != this.modified.freqDen || + this.original.freqNum != this.modified.freqNum); + } + + public void execute() + { + Habit habit = Habit.get(savedId); + habit.copyAttributes(modified); + habit.save(); + if (hasIntervalChanged) + { + habit.deleteCheckmarksNewerThan(0); + habit.deleteStreaksNewerThan(0); + habit.deleteScoresNewerThan(0); + } + } + + public void undo() + { + Habit habit = Habit.get(savedId); + habit.copyAttributes(original); + habit.save(); + if (hasIntervalChanged) + { + habit.deleteCheckmarksNewerThan(0); + habit.deleteStreaksNewerThan(0); + habit.deleteScoresNewerThan(0); + } + } + + public Integer getExecuteStringId() + { + return R.string.toast_habit_changed; + } + + public Integer getUndoStringId() + { + return R.string.toast_habit_changed_back; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java b/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java new file mode 100644 index 000000000..53a95438d --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java @@ -0,0 +1,44 @@ +/* Copyright (C) 2016 Alinson Santos Xavier + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.isoron.uhabits.commands; + +import org.isoron.helpers.Command; +import org.isoron.uhabits.models.Habit; + +public class ToggleRepetitionCommand extends Command +{ + private Long offset; + private Habit habit; + + public ToggleRepetitionCommand(Habit habit, long offset) + { + this.offset = offset; + this.habit = habit; + } + + @Override + public void execute() + { + habit.toggleRepetition(offset); + } + + @Override + public void undo() + { + execute(); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/isoron/uhabits/fragments/EditHabitFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/EditHabitFragment.java index 7a6745ba4..82a32d37d 100644 --- a/app/src/main/java/org/isoron/uhabits/fragments/EditHabitFragment.java +++ b/app/src/main/java/org/isoron/uhabits/fragments/EditHabitFragment.java @@ -40,6 +40,8 @@ import org.isoron.helpers.Command; import org.isoron.helpers.DateHelper; import org.isoron.helpers.DialogHelper.OnSavedListener; import org.isoron.uhabits.R; +import org.isoron.uhabits.commands.CreateHabitCommand; +import org.isoron.uhabits.commands.EditHabitCommand; import org.isoron.uhabits.dialogs.WeekdayPickerDialog; import org.isoron.uhabits.models.Habit; @@ -241,11 +243,11 @@ public class EditHabitFragment extends DialogFragment if (mode == EDIT_MODE) { - command = originalHabit.new EditCommand(modifiedHabit); + command = new EditHabitCommand(originalHabit, modifiedHabit); savedHabit = originalHabit; } - if (mode == CREATE_MODE) command = new Habit.CreateCommand(modifiedHabit); + if (mode == CREATE_MODE) command = new CreateHabitCommand(modifiedHabit); if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit); diff --git a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java index d435c1404..2b1df0750 100644 --- a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java +++ b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java @@ -69,6 +69,7 @@ import org.isoron.uhabits.R; import org.isoron.uhabits.commands.ArchiveHabitsCommand; import org.isoron.uhabits.commands.ChangeHabitColorCommand; import org.isoron.uhabits.commands.DeleteHabitsCommand; +import org.isoron.uhabits.commands.ToggleRepetitionCommand; import org.isoron.uhabits.commands.UnarchiveHabitsCommand; import org.isoron.uhabits.helpers.ReminderHelper; import org.isoron.uhabits.io.CSVExporter; @@ -545,7 +546,7 @@ public class ListHabitsFragment extends Fragment if (v.getTag(R.string.toggle_key).equals(2)) updateCheckmark(habit.color, (TextView) v, 0); else updateCheckmark(habit.color, (TextView) v, 2); - executeCommand(habit.new ToggleRepetitionCommand(timestamp), habit.getId()); + executeCommand(new ToggleRepetitionCommand(habit, timestamp), habit.getId()); } private void executeCommand(Command c, Long refreshKey) 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 967e9367d..23cc5296f 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java @@ -666,125 +666,4 @@ public class Habit extends Model ActiveAndroid.endTransaction(); } } - - public static class CreateCommand extends Command - { - private Habit model; - private Long savedId; - - public CreateCommand(Habit model) - { - this.model = model; - } - - @Override - public void execute() - { - Habit savedHabit = new Habit(model); - if (savedId == null) - { - savedHabit.save(); - savedId = savedHabit.getId(); - } - else - { - savedHabit.save(savedId); - } - } - - @Override - public void undo() - { - Habit.get(savedId).delete(); - } - - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_created; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_deleted; - } - - } - - public class EditCommand extends Command - { - private Habit original; - private Habit modified; - private long savedId; - private boolean hasIntervalChanged; - - public EditCommand(Habit modified) - { - this.savedId = getId(); - this.modified = new Habit(modified); - this.original = new Habit(Habit.this); - - hasIntervalChanged = (this.original.freqDen != this.modified.freqDen || - this.original.freqNum != this.modified.freqNum); - } - - public void execute() - { - Habit habit = Habit.get(savedId); - habit.copyAttributes(modified); - habit.save(); - if (hasIntervalChanged) - { - habit.deleteCheckmarksNewerThan(0); - habit.deleteStreaksNewerThan(0); - habit.deleteScoresNewerThan(0); - } - } - - public void undo() - { - Habit habit = Habit.get(savedId); - habit.copyAttributes(original); - habit.save(); - if (hasIntervalChanged) - { - habit.deleteCheckmarksNewerThan(0); - habit.deleteStreaksNewerThan(0); - habit.deleteScoresNewerThan(0); - } - } - - public Integer getExecuteStringId() - { - return R.string.toast_habit_changed; - } - - public Integer getUndoStringId() - { - return R.string.toast_habit_changed_back; - } - } - - public class ToggleRepetitionCommand extends Command - { - private Long offset; - - public ToggleRepetitionCommand(long offset) - { - this.offset = offset; - } - - @Override - public void execute() - { - toggleRepetition(offset); - } - - @Override - public void undo() - { - execute(); - } - } }