From 61414d62f4c586c78aa07cf37d719e8e7d9a2f77 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Thu, 26 Nov 2020 14:19:02 -0600 Subject: [PATCH] Remove calls to Repetition.add and Repetition.remove --- .../org/isoron/uhabits/HabitFixtures.java | 3 +- .../NumericalCheckmarkWidgetActivity.kt | 2 +- .../commands/CreateRepetitionCommand.java | 63 ++++++++++++------- .../uhabits/core/test/HabitFixtures.java | 4 +- .../habits/show/ShowHabitMenuBehavior.java | 2 +- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java index 83756727c..836327853 100644 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java @@ -128,8 +128,7 @@ public class HabitFixtures Timestamp timestamp = DateUtils.getToday(); for (int value : LONG_NUMERICAL_HABIT_CHECKS) { - Repetition r = new Repetition(timestamp, value); - habit.getRepetitions().add(r); + habit.getRepetitions().setValue(timestamp, value); timestamp = timestamp.minus(1); } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt index fd309957d..e385c241b 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt @@ -58,7 +58,7 @@ class NumericalCheckmarkWidgetActivity : Activity(), ListHabitsBehavior.NumberPi } override fun onNumberPicked(newValue: Double) { - behavior.setNumericValue(data.habit, data.timestamp, (newValue * 1000).toInt()) + behavior.setValue(data.habit, data.timestamp, (newValue * 1000).toInt()) widgetUpdater.updateWidgets() finish() } diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java index dfcedb5ee..33c0148da 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java @@ -23,6 +23,8 @@ import androidx.annotation.*; import org.isoron.uhabits.core.models.*; +import java.util.*; + /** * Command to toggle a repetition. */ @@ -31,20 +33,19 @@ public class CreateRepetitionCommand extends Command @NonNull final Habit habit; - private HabitList habitList; + @NonNull + final HabitList habitList; + + @NonNull final Timestamp timestamp; final int value; - @Nullable - Repetition previousRep; - - @Nullable - Repetition newRep; + int previousValue; public CreateRepetitionCommand(@NonNull HabitList habitList, @NonNull Habit habit, - Timestamp timestamp, + @NonNull Timestamp timestamp, int value) { this.habitList = habitList; @@ -57,18 +58,8 @@ public class CreateRepetitionCommand extends Command public void execute() { RepetitionList reps = habit.getRepetitions(); - - previousRep = reps.getByTimestamp(timestamp); - if (previousRep != null) reps.remove(previousRep); - - if (value > 0) - { - newRep = new Repetition(timestamp, value); - reps.add(newRep); - } - - habit.invalidateNewerThan(timestamp); - habitList.update(habit); + previousValue = reps.getValue(timestamp); + reps.setValue(timestamp, value); } @NonNull @@ -87,9 +78,7 @@ public class CreateRepetitionCommand extends Command @Override public void undo() { - if(newRep != null) habit.getRepetitions().remove(newRep); - if (previousRep != null) habit.getRepetitions().add(previousRep); - habit.invalidateNewerThan(timestamp); + habit.getRepetitions().setValue(timestamp, previousValue); } public static class Record @@ -129,4 +118,34 @@ public class CreateRepetitionCommand extends Command return command; } } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CreateRepetitionCommand that = (CreateRepetitionCommand) o; + return value == that.value && + habit.equals(that.habit) && + habitList.equals(that.habitList) && + timestamp.equals(that.timestamp); + } + + @Override + public int hashCode() + { + return Objects.hash(habit, habitList, timestamp, value); + } + + @Override + public String toString() + { + return "CreateRepetitionCommand{" + + "habit=" + habit + + ", habitList=" + habitList + + ", timestamp=" + timestamp + + ", value=" + value + + ", previousValue=" + previousValue + + '}'; + } } \ No newline at end of file diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java index 90af84d56..7ac134f07 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java @@ -89,7 +89,7 @@ public class HabitFixtures for (int i = 0; i < times.length; i++) { Timestamp timestamp = today.minus(times[i]); - habit.getRepetitions().add(new Repetition(timestamp, values[i])); + habit.getRepetitions().setValue(timestamp, values[i]); } return habit; @@ -125,7 +125,7 @@ public class HabitFixtures for (int i = 0; i < times.length; i++) { Timestamp timestamp = reference.minus(times[i]); - habit.getRepetitions().add(new Repetition(timestamp, values[i])); + habit.getRepetitions().setValue(timestamp, values[i]); } return habit; diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java index 6e47293a2..2c5599c90 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java @@ -114,7 +114,7 @@ public class ShowHabitMenuBehavior if (habit.isNumerical()) value = (int) (1000 + 250 * random.nextGaussian() * strength / 100) * 1000; - habit.getRepetitions().add(new Repetition(DateUtils.getToday().minus(i), value)); + habit.getRepetitions().setValue(DateUtils.getToday().minus(i), value); } habit.invalidateNewerThan(Timestamp.ZERO);