Add string and color helpers to AdapterSection

pull/1296/head
Alex Baker 5 years ago
parent 9358dfaca5
commit af2894f8f4

@ -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);
}

@ -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)
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
}
}

@ -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)

@ -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

@ -305,7 +305,9 @@ File %1$s contained %2$s.\n\n
<string name="yesterday">Yesterday</string>
<string name="yesterday_lowercase">yesterday</string>
<string name="tmrw">Tmrw</string>
<string name="tomorrow_abbrev_lowercase">tmrw</string>
<string name="yest">Yest</string>
<string name="yesterday_abbrev_lowercase">yest</string>
<string name="sync_SPr_interval_title">Background sync</string>
<string name="widget_show_checkboxes">Show checkboxes</string>
<string name="widget_hide_background">Hide background</string>
@ -630,6 +632,8 @@ File %1$s contained %2$s.\n\n
<string name="support_development_subscribe">Unlock additional features and support open source software</string>
<string name="no_thanks">No thanks</string>
<string name="got_it">Got it!</string>
<string name="sort_start_group">Start %s</string>
<string name="sort_due_group">Due %s</string>
<string name="sort_created_group">Created %s</string>
<string name="sort_modified_group">Modified %s</string>
<string name="on_launch">On launch</string>

Loading…
Cancel
Save