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" />
+
+