diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt index ab08da6ba..0d82905f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt @@ -8,6 +8,7 @@ import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatterBuilder import java.time.format.TextStyle import java.time.temporal.TemporalAccessor +import java.util.Date import java.util.Locale fun String.parseToZonedDateTime(): ZonedDateTime? { @@ -23,6 +24,10 @@ fun String.parseToZonedDateTime(): ZonedDateTime? { } } +fun Date.toZonedDateTime(): ZonedDateTime? { + return this.toInstant().atZone(ZoneId.systemDefault()) +} + /** * Returns full display name in default Locale (Monday, Tuesday, Wednesday, etc.) */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index f9a84840b..1874f47a3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.dayOfWeekString import com.habitrpg.android.habitica.extensions.parseToZonedDateTime +import com.habitrpg.android.habitica.extensions.toZonedDateTime import com.habitrpg.android.habitica.models.BaseMainObject import com.habitrpg.android.habitica.models.Tag import com.habitrpg.common.habitica.helpers.ExceptionHandler @@ -22,6 +23,7 @@ import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import org.json.JSONArray import org.json.JSONException +import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneId import java.time.ZonedDateTime @@ -146,6 +148,21 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { return isActive && !completed(userID) } + fun isDueToday(): Boolean? { + val zonedDueDate = dueDate?.toZonedDateTime() + if (zonedDueDate != null) { + val day = ZonedDateTime.now().dayOfYear + val year = ZonedDateTime.now().year + return (zonedDueDate.dayOfYear == day) && (zonedDueDate.year == year) + } + return null + } + + fun isDayOrMorePastDue(): Boolean? { + val zonedDueDate = dueDate?.toZonedDateTime() + return zonedDueDate?.toLocalDate()?.isBefore(LocalDate.now()) + } + val streakString: String? get() { return if (counterUp != null && (counterUp ?: 0) > 0 && counterDown != null && (counterDown ?: 0) > 0) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt index 8ac863f50..c948f2173 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt @@ -1,6 +1,8 @@ package com.habitrpg.android.habitica.ui.viewHolders.tasks import android.view.View +import androidx.core.content.ContextCompat +import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.helpers.GroupPlanInfoProvider import com.habitrpg.android.habitica.models.tasks.ChecklistItem import com.habitrpg.android.habitica.models.tasks.Task @@ -34,7 +36,14 @@ class TodoViewHolder( override fun configureSpecialTaskTextView(task: Task) { super.configureSpecialTaskTextView(task) if (task.dueDate != null) { - task.dueDate?.let { specialTaskTextView?.text = dateFormatter.format(it) } + if (task.isDueToday() == true) { + specialTaskTextView?.text = context.getString(R.string.today) + } else if (task.isDayOrMorePastDue() == true) { + task.dueDate?.let { specialTaskTextView?.text = dateFormatter.format(it) } + specialTaskTextView?.setTextColor(ContextCompat.getColor(context, R.color.maroon_100)) + } else { + task.dueDate?.let { specialTaskTextView?.text = dateFormatter.format(it) } + } this.specialTaskTextView?.visibility = View.VISIBLE calendarIconView?.visibility = View.VISIBLE } else {