From d594d3b08595edf2eeb14b6a7acc98cb807e8ef1 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 18 Nov 2020 22:13:03 -0600 Subject: [PATCH] Make skip days an opt-in feature --- .../common/dialogs/HistoryEditorDialog.java | 1 + .../activities/common/views/HistoryChart.java | 12 ++++++++- .../habits/list/views/CheckmarkButtonView.kt | 6 ++++- .../habits/show/views/HistoryCard.java | 6 ++++- .../isoron/uhabits/widgets/HistoryWidget.kt | 1 + .../NumericalCheckmarkWidgetActivity.kt | 3 ++- .../src/main/res/values/strings.xml | 2 ++ .../src/main/res/xml/preferences.xml | 7 +++++ .../uhabits/core/models/Repetition.java | 13 +++++++++- .../uhabits/core/preferences/Preferences.java | 5 ++++ .../core/ui/widgets/WidgetBehavior.java | 26 ++++++++++++++++--- 11 files changed, 73 insertions(+), 9 deletions(-) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java index dd5bd5525..6a64af230 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java @@ -82,6 +82,7 @@ public class HistoryEditorDialog extends AppCompatDialogFragment historyChart = new HistoryChart(context); historyChart.setController(controller); historyChart.setFirstWeekday(prefs.getFirstWeekday()); + historyChart.setSkipEnabled(prefs.isSkipEnabled()); if (savedInstanceState != null) { diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java index da488d048..2363554a7 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java @@ -102,6 +102,8 @@ public class HistoryChart extends ScrollableChart @NonNull private Controller controller; + private boolean skipsEnabled; + public HistoryChart(Context context) { super(context); @@ -153,7 +155,10 @@ public class HistoryChart extends ScrollableChart int offset = timestamp.daysUntil(today); if (offset < checkmarks.length) { - newValue = Repetition.nextToggleValue(checkmarks[offset]); + if(skipsEnabled) + newValue = Repetition.nextToggleValueWithSkip(checkmarks[offset]); + else + newValue = Repetition.nextToggleValueWithoutSkip(checkmarks[offset]); checkmarks[offset] = newValue; } @@ -211,6 +216,11 @@ public class HistoryChart extends ScrollableChart initColors(); } + public void setSkipEnabled(boolean value) + { + this.skipsEnabled = value; + } + public void setIsEditable(boolean isEditable) { this.isEditable = isEditable; diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index eded35446..166158ea2 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -62,7 +62,11 @@ class CheckmarkButtonView( } fun performToggle() { - value = Repetition.nextToggleValue(value) + value = if(preferences.isSkipEnabled) { + Repetition.nextToggleValueWithSkip(value) + } else { + Repetition.nextToggleValueWithoutSkip(value) + } onToggle(value) performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) invalidate() diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java index 82110d410..f4430a490 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java @@ -120,7 +120,11 @@ public class HistoryCard extends HabitCard { if (isCanceled()) return; int[] checkmarks = habit.getCheckmarks().getAllValues(); - if(prefs != null) chart.setFirstWeekday(prefs.getFirstWeekday()); + if(prefs != null) + { + chart.setFirstWeekday(prefs.getFirstWeekday()); + chart.setSkipEnabled(prefs.isSkipEnabled()); + } chart.setCheckmarks(checkmarks); } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt index a1abb02b2..5dea8d622 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt @@ -44,6 +44,7 @@ class HistoryWidget( if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f) (widgetView.dataView as HistoryChart).apply { setFirstWeekday(firstWeekday) + setSkipEnabled(prefs.isSkipEnabled) setColor(PaletteUtils.getColor(context, habit.color)) setCheckmarks(habit.checkmarks.allValues) setNumerical(habit.isNumerical) 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 042506c0d..fd309957d 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 @@ -49,7 +49,8 @@ class NumericalCheckmarkWidgetActivity : Activity(), ListHabitsBehavior.NumberPi data = parser.parseCheckmarkIntent(intent) behavior = WidgetBehavior(component.habitList, component.commandRunner, - component.notificationTray) + component.notificationTray, + component.preferences) widgetUpdater = component.widgetUpdater showNumberSelector(this) diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index 964faf8a6..4e1fd75d9 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -200,4 +200,6 @@ No yes-or-no habits found Increment Decrement + Enable skip days + Toggle twice to add a skip instead of a checkmark. Skips keep your score unchanged and don\'t break your streak. \ No newline at end of file diff --git a/android/uhabits-android/src/main/res/xml/preferences.xml b/android/uhabits-android/src/main/res/xml/preferences.xml index d36ae17f3..7b0d75489 100644 --- a/android/uhabits-android/src/main/res/xml/preferences.xml +++ b/android/uhabits-android/src/main/res/xml/preferences.xml @@ -31,6 +31,13 @@ android:title="@string/pref_toggle_title" app:iconSpaceReserved="false" /> + +