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