From b0820095f11fbadac9bcbd8ea52cd4a4f09b29a4 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 13 Jun 2018 21:39:06 -0500 Subject: [PATCH] Add action for randomizing habit history (dev mode) --- .../habits/show/ShowHabitsMenu.java | 20 ++++++++++++++- .../src/main/res/menu/show_habit.xml | 6 +++++ .../habits/show/ShowHabitMenuBehavior.java | 25 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 733db302c..b7560a5d3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -24,6 +24,7 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.preferences.Preferences; import org.isoron.uhabits.core.ui.screens.habits.show.*; import javax.inject.*; @@ -35,13 +36,26 @@ public class ShowHabitsMenu extends BaseMenu { @NonNull private Lazy behavior; + @NonNull + private final Preferences prefs; @Inject public ShowHabitsMenu(@NonNull BaseActivity activity, - @NonNull Lazy behavior) + @NonNull Lazy behavior, + @NonNull Preferences prefs) { super(activity); this.behavior = behavior; + this.prefs = prefs; + } + + @Override + public void onCreate(@NonNull Menu menu) + { + super.onCreate(menu); + + if (prefs.isDeveloper()) + menu.findItem(R.id.action_randomize).setVisible(true); } @Override @@ -61,6 +75,10 @@ public class ShowHabitsMenu extends BaseMenu behavior.get().onDeleteHabit(); return true; + case R.id.action_randomize: + behavior.get().onRandomize(); + return true; + default: return false; } diff --git a/uhabits-android/src/main/res/menu/show_habit.xml b/uhabits-android/src/main/res/menu/show_habit.xml index e14ce108c..10bac05df 100644 --- a/uhabits-android/src/main/res/menu/show_habit.xml +++ b/uhabits-android/src/main/res/menu/show_habit.xml @@ -37,4 +37,10 @@ android:title="@string/edit" app:showAsAction="ifRoom"/> + + \ No newline at end of file diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java index ad426f528..37400f30e 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java @@ -25,12 +25,16 @@ import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.core.ui.callbacks.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; import javax.inject.*; +import static java.lang.Math.*; + + public class ShowHabitMenuBehavior { private HabitList habitList; @@ -95,6 +99,27 @@ public class ShowHabitMenuBehavior }); } + public void onRandomize() + { + Random random = new Random(); + habit.getRepetitions().removeAll(); + double strength = 50; + + for (int i = 0; i < 365 * 5; i++) + { + if (i % 7 == 0) strength = max(0, min(100, strength + 10 * random.nextGaussian())); + if (random.nextInt(100) > strength) continue; + + int value = 1; + if (habit.isNumerical()) + value = (int) (1000 + 250 * random.nextGaussian() * strength / 100) * 1000; + + habit.getRepetitions().add(new Repetition(DateUtils.getToday().minus(i), value)); + } + + habit.invalidateNewerThan(Timestamp.ZERO); + } + public enum Message { COULD_NOT_EXPORT, HABIT_DELETED