From efdf216323f32819fe43835bd9f4b2b19b53664a Mon Sep 17 00:00:00 2001 From: Dharanish Date: Mon, 24 Jun 2024 21:43:26 +0200 Subject: [PATCH] Add toast message for skip days on History editor --- .../activities/habits/show/ShowHabitActivity.kt | 13 +++++++++++++ .../org/isoron/uhabits/core/models/EntryList.kt | 3 ++- .../org/isoron/uhabits/core/models/ScoreList.kt | 1 + .../java/org/isoron/uhabits/core/models/SkipDays.kt | 6 ++++++ .../org/isoron/uhabits/core/models/StreakList.kt | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index a7d07db53..31b6fe33b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -38,6 +38,7 @@ import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialog import org.isoron.uhabits.activities.common.dialogs.HistoryEditorDialog import org.isoron.uhabits.activities.common.dialogs.NumberDialog +import org.isoron.uhabits.core.commands.BlockSkippedDayCommand import org.isoron.uhabits.core.commands.Command import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.models.Habit @@ -70,6 +71,7 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { private val scope = CoroutineScope(Dispatchers.Main) private lateinit var presenter: ShowHabitPresenter private val screen = Screen() + val activity = (this as AppCompatActivity) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -138,9 +140,20 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { } override fun onCommandFinished(command: Command) { + val msg = getExecuteString(command) + if (msg != null) activity.showMessage(msg) screen.refresh() } + private fun getExecuteString(command: Command): String? { + return when (command) { + is BlockSkippedDayCommand -> { + getString(R.string.toast_day_auto_skip) + } + else -> null + } + } + inner class Screen : ShowHabitMenuPresenter.Screen, ShowHabitPresenter.Screen { override fun updateWidgets() { widgetUpdater.updateWidgets() diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt index f44a88658..eb4fedd04 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt @@ -48,7 +48,8 @@ open class EntryList { /** * Returns one entry for each day in the given interval. The first element corresponds to the * newest entry, and the last element corresponds to the oldest. The interval endpoints are - * included. + * included. Takes into account whether days are to be regularly skipped and returns SKIP + * accordingly. */ @Synchronized open fun getByInterval(from: Timestamp, to: Timestamp, skipDays: SkipDays = SkipDays.NONE): List { diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt index 84945ad97..7cf257e54 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt @@ -63,6 +63,7 @@ class ScoreList { /** * Recomputes all scores between the provided [from] and [to] timestamps. + * Takes into account whether some days of the week are automatically skipped. */ @Synchronized fun recompute( diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/SkipDays.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/SkipDays.kt index c5d9f6521..468bc88af 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/SkipDays.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/SkipDays.kt @@ -18,6 +18,12 @@ */ package org.isoron.uhabits.core.models +/** + * If [isSkipDays] is enabled, then the selected [days] of the week are regularly skipped, and + * the score is automatically calculated based on that. For measurable weekly tasks and weekly + * boolean tasks with frequency < 1, the target is not changed but distributed over the rest of the + * days of the week. + */ data class SkipDays( val isSkipDays: Boolean, val days: WeekdayList diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/StreakList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/StreakList.kt index b0557961f..653049854 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/StreakList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/StreakList.kt @@ -46,6 +46,8 @@ class StreakList { .filter { it.value > 0 } .map { it.timestamp } .toTypedArray() + + // gets all the values to make sure that streaks do no consist of just SKIP entries val values = computedEntries .getByInterval(from, to, skipDays) .filter { it.value > 0 }