From 8cb71ac2f1211a3db7dca6a30b07a17dc079a8e2 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 8 Jan 2021 17:43:56 -0600 Subject: [PATCH] Show start dates as chips --- .../java/org/tasks/data/TaskContainer.java | 4 +++ .../java/org/tasks/preferences/Preferences.kt | 3 +++ .../preferences/fragments/ScrollableWidget.kt | 1 + .../java/org/tasks/tasklist/TaskViewHolder.kt | 6 +---- .../main/java/org/tasks/ui/ChipProvider.kt | 25 +++++++++++++++++ .../java/org/tasks/widget/ChipProvider.kt | 27 +++++++++++++++++++ .../tasks/widget/ScrollableViewsFactory.kt | 10 ++++--- .../org/tasks/widget/WidgetPreferences.java | 4 +++ app/src/main/res/layout/task_adapter_row.xml | 13 +-------- app/src/main/res/layout/widget_row_dark.xml | 16 +---------- app/src/main/res/layout/widget_row_light.xml | 15 +---------- app/src/main/res/values/keys.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + .../res/xml/preferences_look_and_feel.xml | 5 ++++ app/src/main/res/xml/preferences_widget.xml | 5 ++++ 15 files changed, 88 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/org/tasks/data/TaskContainer.java b/app/src/main/java/org/tasks/data/TaskContainer.java index 37f3f1ed5..b32f8794a 100644 --- a/app/src/main/java/org/tasks/data/TaskContainer.java +++ b/app/src/main/java/org/tasks/data/TaskContainer.java @@ -54,6 +54,10 @@ public class TaskContainer { return task.isHidden(); } + public long getStartDate() { + return task.getHideUntil(); + } + public boolean isCompleted() { return task.isCompleted(); } diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 9ef2f53d4..a05ce0a5d 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -456,6 +456,9 @@ class Preferences @JvmOverloads constructor( val showSubtaskChip: Boolean get() = getBoolean(R.string.p_subtask_chips, true) + val showStartDateChip: Boolean + get() = getBoolean(R.string.p_start_date_chip, true) + val showPlaceChip: Boolean get() = getBoolean(R.string.p_place_chips, true) diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt index 3de2847fb..6e3c6a26f 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt @@ -83,6 +83,7 @@ class ScrollableWidget : InjectingPreferenceFragment() { setupCheckbox(R.string.p_widget_show_checkboxes) setupCheckbox(R.string.p_widget_show_dividers) setupCheckbox(R.string.p_widget_show_subtasks) + setupCheckbox(R.string.p_widget_show_start_dates) setupCheckbox(R.string.p_widget_show_places) setupCheckbox(R.string.p_widget_show_lists) setupCheckbox(R.string.p_widget_show_tags) diff --git a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt index 461629cb2..f24eb0882 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt +++ b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt @@ -67,9 +67,6 @@ class TaskViewHolder internal constructor( @BindView(R.id.chip_group) lateinit var chipGroup: ChipGroup - @BindView(R.id.hidden_icon) - lateinit var hiddenIcon: View - lateinit var task: TaskContainer var indent = 0 @@ -139,7 +136,6 @@ class TaskViewHolder internal constructor( this.task = task indent = task.indent nameView.text = task.title - hiddenIcon.visibility = if (task.isHidden) View.VISIBLE else View.GONE setupTitleAndCheckbox() setupDueDate(sortByDueDate) setupChips(filter) @@ -271,7 +267,7 @@ class TaskViewHolder internal constructor( description.isSingleLine = false description.ellipsize = null } - setTopPadding(rowPadding, nameView, completeBox, dueDate, hiddenIcon) + setTopPadding(rowPadding, nameView, completeBox, dueDate) setBottomPadding(rowPadding, completeBox, dueDate) nameView.textSize = fontSize.toFloat() description.textSize = fontSize.toFloat() diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.kt b/app/src/main/java/org/tasks/ui/ChipProvider.kt index 261d8261d..cd7cd222d 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.kt +++ b/app/src/main/java/org/tasks/ui/ChipProvider.kt @@ -6,6 +6,7 @@ import androidx.annotation.DrawableRes import androidx.core.content.res.ResourcesCompat import com.google.android.material.chip.Chip import com.todoroo.andlib.utility.AndroidUtilities +import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter @@ -21,6 +22,7 @@ import org.tasks.preferences.Preferences import org.tasks.themes.ColorProvider import org.tasks.themes.CustomIcons.getIconResId import org.tasks.themes.ThemeColor +import java.time.format.FormatStyle import java.util.* import javax.inject.Inject @@ -46,6 +48,26 @@ class ChipProvider @Inject constructor( showIcon = appearance != 1 } + private fun newStartDateChip(task: TaskContainer, compact: Boolean): Chip { + val chip = newChip(task) + apply( + chip, + R.drawable.ic_pending_actions_24px, + DateUtilities.getRelativeDateTime( + activity, + task.startDate, + locale.locale, + if (compact) FormatStyle.SHORT else FormatStyle.MEDIUM, + false, + false + ), + 0, + showText = true, + showIcon = true + ) + return chip + } + fun newSubtaskChip(task: TaskContainer, compact: Boolean): Chip { val chip = newChip(task) apply( @@ -66,6 +88,9 @@ class ChipProvider @Inject constructor( if (task.hasChildren() && preferences.showSubtaskChip) { chips.add(newSubtaskChip(task, !showText)) } + if (task.isHidden && preferences.showStartDateChip) { + chips.add(newStartDateChip(task, !showText)) + } if (task.hasLocation() && filter !is PlaceFilter && preferences.showPlaceChip) { val location = task.getLocation() newChip(PlaceFilter(location.place), R.drawable.ic_outline_place_24px)?.let(chips::add) diff --git a/app/src/main/java/org/tasks/widget/ChipProvider.kt b/app/src/main/java/org/tasks/widget/ChipProvider.kt index 246d268ce..8875b0053 100644 --- a/app/src/main/java/org/tasks/widget/ChipProvider.kt +++ b/app/src/main/java/org/tasks/widget/ChipProvider.kt @@ -2,6 +2,7 @@ package org.tasks.widget import android.content.Context import android.widget.RemoteViews +import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter @@ -11,13 +12,18 @@ import org.tasks.BuildConfig import org.tasks.R import org.tasks.data.TaskContainer import org.tasks.filters.PlaceFilter +import org.tasks.locale.Locale +import org.tasks.preferences.Preferences import org.tasks.themes.CustomIcons import org.tasks.ui.ChipListCache +import java.time.format.FormatStyle import javax.inject.Inject class ChipProvider @Inject constructor( @ApplicationContext private val context: Context, private val chipListCache: ChipListCache, + private val locale: Locale, + private val preferences: Preferences, ) { var isDark = false @@ -41,6 +47,27 @@ class ChipProvider @Inject constructor( return chip } + fun getStartDateChip(task: TaskContainer, showFullDate: Boolean): RemoteViews? { + return if (task.isHidden) { + val chip = newChip() + chip.setTextViewText( + R.id.chip_text, + DateUtilities.getRelativeDateTime( + context, + task.startDate, + locale.locale, + FormatStyle.MEDIUM, + showFullDate, + false + ) + ) + chip.setImageViewResource(R.id.chip_icon, R.drawable.ic_pending_actions_24px) + chip + } else { + null + } + } + fun getListChip(filter: Filter?, task: TaskContainer): RemoteViews? { task.googleTaskList ?.takeIf { filter !is GtasksFilter } diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt index f288cff2d..894d34221 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt +++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt @@ -64,6 +64,7 @@ internal class ScrollableViewsFactory( private var showDividers = false private var disableGroups = false private var showSubtasks = false + private var showStartDates = false private var showPlaces = false private var showLists = false private var showTags = false @@ -199,9 +200,6 @@ internal class ScrollableViewsFactory( val row = newRemoteView() if (task.isHidden) { textColorTitle = textColorSecondary - row.setViewVisibility(R.id.hidden_icon, View.VISIBLE) - } else { - row.setViewVisibility(R.id.hidden_icon, View.GONE) } if (task.isCompleted) { textColorTitle = textColorSecondary @@ -267,6 +265,11 @@ internal class ScrollableViewsFactory( .putExtra(WidgetClickActivity.EXTRA_COLLAPSED, !taskContainer.isCollapsed) ) } + if (taskContainer.isHidden && showStartDates) { + chipProvider + .getStartDateChip(taskContainer, showFullDate) + ?.let { row.addView(R.id.chips, it) } + } if (taskContainer.hasLocation() && showPlaces) { chipProvider .getPlaceChip(filter, taskContainer) @@ -367,6 +370,7 @@ internal class ScrollableViewsFactory( } == true showPlaces = widgetPreferences.showPlaces() showSubtasks = widgetPreferences.showSubtasks() + showStartDates = widgetPreferences.showStartDates() showLists = widgetPreferences.showLists() showTags = widgetPreferences.showTags() showFullDate = widgetPreferences.alwaysDisplayFullDate diff --git a/app/src/main/java/org/tasks/widget/WidgetPreferences.java b/app/src/main/java/org/tasks/widget/WidgetPreferences.java index 6662ae960..792aa5878 100644 --- a/app/src/main/java/org/tasks/widget/WidgetPreferences.java +++ b/app/src/main/java/org/tasks/widget/WidgetPreferences.java @@ -60,6 +60,10 @@ public class WidgetPreferences implements QueryPreferences { return getBoolean(R.string.p_widget_show_subtasks, true); } + boolean showStartDates() { + return getBoolean(R.string.p_widget_show_start_dates, true); + } + boolean disableGroups() { return getBoolean(R.string.p_widget_disable_groups, false); } diff --git a/app/src/main/res/layout/task_adapter_row.xml b/app/src/main/res/layout/task_adapter_row.xml index 860548d66..063cb5fe8 100644 --- a/app/src/main/res/layout/task_adapter_row.xml +++ b/app/src/main/res/layout/task_adapter_row.xml @@ -44,22 +44,11 @@ android:textSize="14sp" tools:text="Tmrrw" /> - - - - - - widget-show-full-task-title- widget-show-dividers- widget-show-subtasks- + widget-show-start-dates- widget-disable_groups- widget-show-places- widget-show-lists- @@ -414,6 +415,7 @@ chip_style chip_appearance chips_subtask + chips_start_date chips_place chips_list chips_tag diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 982c7c1c8..a3b88d9c5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -59,6 +59,7 @@ File %1$s contained %2$s.\n\n No time Due date Due time + Start date Day before due Week before due due date diff --git a/app/src/main/res/xml/preferences_look_and_feel.xml b/app/src/main/res/xml/preferences_look_and_feel.xml index 1a889cace..ef7ec2361 100644 --- a/app/src/main/res/xml/preferences_look_and_feel.xml +++ b/app/src/main/res/xml/preferences_look_and_feel.xml @@ -130,6 +130,11 @@ android:key="@string/p_subtask_chips" android:title="@string/subtasks" /> + + + +