From b3f039d6583a5826be0ac69059c50b8027c6fab4 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 26 Mar 2017 10:14:23 -0400 Subject: [PATCH] Make score take target value into account --- .../isoron/uhabits/commands/EditHabitCommand.java | 13 +++++++------ .../main/java/org/isoron/uhabits/models/Habit.java | 2 +- .../main/java/org/isoron/uhabits/models/Score.java | 2 +- .../java/org/isoron/uhabits/models/ScoreList.java | 12 ++++++++++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java b/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java index 8d9605dbb..dd105fb99 100644 --- a/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java +++ b/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java @@ -42,6 +42,8 @@ public class EditHabitCommand extends Command private boolean hasFrequencyChanged; + private final boolean hasTargetChanged; + public EditHabitCommand(@Provided @NonNull ModelFactory modelFactory, @NonNull HabitList habitList, @NonNull Habit original, @@ -58,6 +60,9 @@ public class EditHabitCommand extends Command Frequency originalFreq = this.original.getFrequency(); Frequency modifiedFreq = this.modified.getFrequency(); hasFrequencyChanged = (!originalFreq.equals(modifiedFreq)); + hasTargetChanged = + (original.getTargetType() != modified.getTargetType() || + original.getTargetValue() != modified.getTargetValue()); } @Override @@ -97,11 +102,7 @@ public class EditHabitCommand extends Command private void invalidateIfNeeded(Habit habit) { - if (hasFrequencyChanged) - { - habit.getCheckmarks().invalidateNewerThan(0); - habit.getStreaks().invalidateNewerThan(0); - habit.getScores().invalidateNewerThan(0); - } + if (hasFrequencyChanged || hasTargetChanged) + habit.invalidateNewerThan(0); } } \ No newline at end of file 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 d9b8c9d21..8a87f417d 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java @@ -102,7 +102,7 @@ public class Habit this.name = ""; this.description = ""; this.targetType = AT_LEAST; - this.targetValue = 0; + this.targetValue = 1; this.unit = ""; checkmarks = factory.buildCheckmarkList(this); diff --git a/app/src/main/java/org/isoron/uhabits/models/Score.java b/app/src/main/java/org/isoron/uhabits/models/Score.java index bc27b9dab..fcfc8b56a 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Score.java +++ b/app/src/main/java/org/isoron/uhabits/models/Score.java @@ -60,7 +60,7 @@ public final class Score */ public static double compute(double frequency, double previousScore, - int checkmarkValue) + double checkmarkValue) { double multiplier = pow(0.5, frequency / 13.0); diff --git a/app/src/main/java/org/isoron/uhabits/models/ScoreList.java b/app/src/main/java/org/isoron/uhabits/models/ScoreList.java index e6021956f..60a399a61 100644 --- a/app/src/main/java/org/isoron/uhabits/models/ScoreList.java +++ b/app/src/main/java/org/isoron/uhabits/models/ScoreList.java @@ -276,8 +276,16 @@ public abstract class ScoreList implements Iterable for (int i = 0; i < checkmarkValues.length; i++) { - int value = checkmarkValues[checkmarkValues.length - i - 1]; - if(!habit.isNumerical() && value > 0) value = 1; + double value = checkmarkValues[checkmarkValues.length - i - 1]; + + if(habit.isNumerical()) + { + value /= habit.getTargetValue(); + value = Math.min(1, value); + } + + if(!habit.isNumerical() && value > 0) + value = 1; previousValue = Score.compute(freq, previousValue, value); scores.add(new Score(from + day * i, previousValue));