diff --git a/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java b/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java
index d868730f2..1aec32a92 100644
--- a/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java
+++ b/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java
@@ -6,7 +6,6 @@
package com.todoroo.andlib.utility;
-import static org.tasks.Strings.isNullOrEmpty;
import static org.tasks.date.DateTimeUtils.newDateTime;
import static org.tasks.time.DateTimeUtils.currentTimeMillis;
@@ -14,13 +13,13 @@ import android.content.Context;
import android.text.format.DateFormat;
import androidx.annotation.Nullable;
import com.todoroo.astrid.data.Task;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.time.format.TextStyle;
import org.tasks.BuildConfig;
import org.tasks.R;
import org.tasks.locale.Locale;
import org.tasks.time.DateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.format.FormatStyle;
-import java.time.format.TextStyle;
public class DateUtilities {
@@ -174,14 +173,14 @@ public class DateUtilities {
if (startOfToday.plusDays(1).equals(startOfDate)) {
return context.getString(
abbreviated
- ? R.string.tmrw
+ ? lowercase ? R.string.tomorrow_abbrev_lowercase : R.string.tmrw
: lowercase ? R.string.tomorrow_lowercase : R.string.tomorrow);
}
if (startOfDate.plusDays(1).equals(startOfToday)) {
return context.getString(
abbreviated
- ? R.string.yest
+ ? lowercase ? R.string.yesterday_abbrev_lowercase : R.string.yest
: lowercase ? R.string.yesterday_lowercase : R.string.yesterday);
}
diff --git a/app/src/main/java/org/tasks/tasklist/AdapterSection.kt b/app/src/main/java/org/tasks/tasklist/AdapterSection.kt
index 736b93155..343017e5c 100644
--- a/app/src/main/java/org/tasks/tasklist/AdapterSection.kt
+++ b/app/src/main/java/org/tasks/tasklist/AdapterSection.kt
@@ -1,3 +1,63 @@
package org.tasks.tasklist
-data class AdapterSection(var firstPosition: Int, val value: Long, var sectionedPosition: Int = 0, var collapsed: Boolean = false)
\ No newline at end of file
+import android.content.Context
+import androidx.annotation.StringRes
+import androidx.core.content.ContextCompat
+import com.todoroo.andlib.utility.DateUtilities
+import com.todoroo.astrid.core.SortHelper.*
+import org.tasks.R
+import org.tasks.date.DateTimeUtils.toDateTime
+import java.time.format.FormatStyle
+import java.util.*
+
+data class AdapterSection(
+ var firstPosition: Int,
+ val value: Long,
+ var sectionedPosition: Int = 0,
+ var collapsed: Boolean = false
+) {
+ fun headerColor(context: Context, sortMode: Int) =
+ ContextCompat.getColor(context, if ((sortMode == SORT_DUE || sortMode == SORT_START)
+ && value > 0
+ && value.toDateTime().plusDays(1).startOfDay().isBeforeNow) {
+ R.color.overdue
+ } else {
+ R.color.text_secondary
+ })
+
+ fun headerString(
+ context: Context,
+ locale: Locale,
+ sortMode: Int,
+ alwaysDisplayFullDate: Boolean,
+ style: FormatStyle = FormatStyle.FULL
+ ): String =
+ when {
+ sortMode == SORT_IMPORTANCE -> context.getString(priorityToString())
+ value == 0L -> context.getString(when (sortMode) {
+ SORT_DUE -> R.string.no_due_date
+ SORT_START -> R.string.no_start_date
+ else -> R.string.no_date
+ })
+ else -> {
+ val dateString = DateUtilities.getRelativeDay(
+ context, value, locale, style, alwaysDisplayFullDate, true
+ )
+ when (sortMode) {
+ SORT_DUE -> context.getString(R.string.sort_due_group, dateString)
+ SORT_START -> context.getString(R.string.sort_start_group, dateString)
+ SORT_CREATED -> context.getString(R.string.sort_created_group, dateString)
+ SORT_MODIFIED -> context.getString(R.string.sort_modified_group, dateString)
+ else -> throw IllegalArgumentException()
+ }
+ }
+ }
+
+ @StringRes
+ private fun priorityToString() = when (value) {
+ 0L -> R.string.filter_high_priority
+ 1L -> R.string.filter_medium_priority
+ 2L -> R.string.filter_low_priority
+ else -> R.string.filter_no_priority
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/tasklist/HeaderViewHolder.kt b/app/src/main/java/org/tasks/tasklist/HeaderViewHolder.kt
index bab6a903c..f5e8dfc0a 100644
--- a/app/src/main/java/org/tasks/tasklist/HeaderViewHolder.kt
+++ b/app/src/main/java/org/tasks/tasklist/HeaderViewHolder.kt
@@ -3,14 +3,9 @@ package org.tasks.tasklist
import android.content.Context
import android.view.View
import android.widget.TextView
-import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView
-import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
-import com.todoroo.astrid.core.SortHelper
import org.tasks.R
-import org.tasks.date.DateTimeUtils.newDateTime
-import java.time.format.FormatStyle
import java.util.*
class HeaderViewHolder(
@@ -24,7 +19,11 @@ class HeaderViewHolder(
fun bind(filter: Filter, sortMode: Int, alwaysDisplayFullDate: Boolean, section: AdapterSection) {
sortGroup = section.value
- val header: String? = if (filter.supportsSorting()) getHeader(sortMode, alwaysDisplayFullDate, sortGroup) else null
+ val header = if (filter.supportsSorting()) {
+ section.headerString(context, locale, sortMode, alwaysDisplayFullDate)
+ } else {
+ null
+ }
if (header == null) {
this.header.visibility = View.GONE
@@ -32,45 +31,10 @@ class HeaderViewHolder(
this.header.visibility = View.VISIBLE
this.header.text = header
this.header.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, if (section.collapsed) R.drawable.ic_keyboard_arrow_down_black_18dp else R.drawable.ic_keyboard_arrow_up_black_18dp, 0)
- this.header.setTextColor(
- context.getColor(
- if ((sortMode == SortHelper.SORT_DUE || sortMode == SortHelper.SORT_START)
- && sortGroup > 0
- && newDateTime(sortGroup).plusDays(1).startOfDay().isBeforeNow) {
- R.color.overdue
- } else {
- R.color.text_secondary
- }))
+ this.header.setTextColor(section.headerColor(context, sortMode))
}
}
- private fun getHeader(sortMode: Int, alwaysDisplayFullDate: Boolean, group: Long): String =
- when {
- sortMode == SortHelper.SORT_IMPORTANCE ->
- context.getString(priorityToString(group.toInt()))
- group == 0L -> context.getString(when (sortMode) {
- SortHelper.SORT_DUE -> R.string.no_due_date
- SortHelper.SORT_START -> R.string.no_start_date
- else -> R.string.no_date
- })
- sortMode == SortHelper.SORT_CREATED ->
- context.getString(R.string.sort_created_group, getDateString(group, alwaysDisplayFullDate))
- sortMode == SortHelper.SORT_MODIFIED ->
- context.getString(R.string.sort_modified_group, getDateString(group, alwaysDisplayFullDate))
- else -> getDateString(group, alwaysDisplayFullDate, false)
- }
-
- private fun getDateString(value: Long, alwaysDisplayFullDate: Boolean, lowercase: Boolean = true) =
- DateUtilities.getRelativeDay(context, value, locale, FormatStyle.FULL, alwaysDisplayFullDate, lowercase)
-
- @StringRes
- private fun priorityToString(priority: Int) = when (priority) {
- 0 -> R.string.filter_high_priority
- 1 -> R.string.filter_medium_priority
- 2 -> R.string.filter_low_priority
- else -> R.string.filter_no_priority
- }
-
init {
header.setOnClickListener {
callback(sortGroup)
diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
index b8e060396..684ccbbd8 100644
--- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
+++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
@@ -8,7 +8,6 @@ import android.graphics.Paint
import android.view.View
import android.widget.RemoteViews
import android.widget.RemoteViewsService.RemoteViewsFactory
-import androidx.annotation.StringRes
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.core.SortHelper
@@ -136,7 +135,7 @@ internal class ScrollableViewsFactory(
val section = tasks.getSection(position)
val sortGroup = section.value
val header: String? = if (filter?.supportsSorting() == true) {
- getHeader(sortMode, section.value)
+ section.headerString(context, locale.locale, sortMode, showFullDate, FormatStyle.MEDIUM)
} else {
null
}
@@ -146,18 +145,7 @@ internal class ScrollableViewsFactory(
} else {
R.drawable.ic_keyboard_arrow_up_black_18dp
})
- val color = if (sortMode == SortHelper.SORT_DUE
- && sortGroup > 0
- && DateTimeUtils.newDateTime(sortGroup).plusDays(1).startOfDay().isBeforeNow) {
- context.getColor(R.color.overdue)
- } else if (sortMode == SortHelper.SORT_START
- && sortGroup > 0
- && DateTimeUtils.newDateTime(sortGroup).plusDays(1).startOfDay().isBeforeNow) {
- context.getColor(R.color.overdue)
- } else {
- textColorSecondary
- }
- row.setTextColor(R.id.header, color)
+ row.setTextColor(R.id.header, section.headerColor(context, sortMode))
if (!showDividers) {
row.setViewVisibility(R.id.divider, View.GONE)
}
@@ -171,31 +159,6 @@ internal class ScrollableViewsFactory(
return row
}
- private fun getHeader(sortMode: Int, group: Long): String = when {
- sortMode == SortHelper.SORT_IMPORTANCE -> context.getString(priorityToString(group.toInt()))
- group == 0L -> context.getString(when (sortMode) {
- SortHelper.SORT_DUE -> R.string.no_due_date
- SortHelper.SORT_START -> R.string.no_start_date
- else -> R.string.no_date
- })
- sortMode == SortHelper.SORT_CREATED ->
- context.getString(R.string.sort_created_group, getDateString(group))
- sortMode == SortHelper.SORT_MODIFIED ->
- context.getString(R.string.sort_modified_group, getDateString(group))
- else -> getDateString(group, false)
- }
-
- private fun getDateString(value: Long, lowercase: Boolean = true) =
- DateUtilities.getRelativeDay(context, value, locale.locale, FormatStyle.MEDIUM, showFullDate, lowercase)
-
- @StringRes
- private fun priorityToString(priority: Int) = when (priority) {
- 0 -> R.string.filter_high_priority
- 1 -> R.string.filter_medium_priority
- 2 -> R.string.filter_low_priority
- else -> R.string.filter_no_priority
- }
-
private fun buildUpdate(position: Int): RemoteViews? {
try {
val taskContainer = getTask(position) ?: return null
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e3e814a52..0b6e1b303 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -305,7 +305,9 @@ File %1$s contained %2$s.\n\n
Yesterday
yesterday
Tmrw
+ tmrw
Yest
+ yest
Background sync
Show checkboxes
Hide background
@@ -630,6 +632,8 @@ File %1$s contained %2$s.\n\n
Unlock additional features and support open source software
No thanks
Got it!
+ Start %s
+ Due %s
Created %s
Modified %s
On launch