Show start dates as chips

pull/1291/head
Alex Baker 5 years ago
parent 56d45f490d
commit 8cb71ac2f1

@ -54,6 +54,10 @@ public class TaskContainer {
return task.isHidden(); return task.isHidden();
} }
public long getStartDate() {
return task.getHideUntil();
}
public boolean isCompleted() { public boolean isCompleted() {
return task.isCompleted(); return task.isCompleted();
} }

@ -456,6 +456,9 @@ class Preferences @JvmOverloads constructor(
val showSubtaskChip: Boolean val showSubtaskChip: Boolean
get() = getBoolean(R.string.p_subtask_chips, true) get() = getBoolean(R.string.p_subtask_chips, true)
val showStartDateChip: Boolean
get() = getBoolean(R.string.p_start_date_chip, true)
val showPlaceChip: Boolean val showPlaceChip: Boolean
get() = getBoolean(R.string.p_place_chips, true) get() = getBoolean(R.string.p_place_chips, true)

@ -83,6 +83,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
setupCheckbox(R.string.p_widget_show_checkboxes) setupCheckbox(R.string.p_widget_show_checkboxes)
setupCheckbox(R.string.p_widget_show_dividers) setupCheckbox(R.string.p_widget_show_dividers)
setupCheckbox(R.string.p_widget_show_subtasks) 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_places)
setupCheckbox(R.string.p_widget_show_lists) setupCheckbox(R.string.p_widget_show_lists)
setupCheckbox(R.string.p_widget_show_tags) setupCheckbox(R.string.p_widget_show_tags)

@ -67,9 +67,6 @@ class TaskViewHolder internal constructor(
@BindView(R.id.chip_group) @BindView(R.id.chip_group)
lateinit var chipGroup: ChipGroup lateinit var chipGroup: ChipGroup
@BindView(R.id.hidden_icon)
lateinit var hiddenIcon: View
lateinit var task: TaskContainer lateinit var task: TaskContainer
var indent = 0 var indent = 0
@ -139,7 +136,6 @@ class TaskViewHolder internal constructor(
this.task = task this.task = task
indent = task.indent indent = task.indent
nameView.text = task.title nameView.text = task.title
hiddenIcon.visibility = if (task.isHidden) View.VISIBLE else View.GONE
setupTitleAndCheckbox() setupTitleAndCheckbox()
setupDueDate(sortByDueDate) setupDueDate(sortByDueDate)
setupChips(filter) setupChips(filter)
@ -271,7 +267,7 @@ class TaskViewHolder internal constructor(
description.isSingleLine = false description.isSingleLine = false
description.ellipsize = null description.ellipsize = null
} }
setTopPadding(rowPadding, nameView, completeBox, dueDate, hiddenIcon) setTopPadding(rowPadding, nameView, completeBox, dueDate)
setBottomPadding(rowPadding, completeBox, dueDate) setBottomPadding(rowPadding, completeBox, dueDate)
nameView.textSize = fontSize.toFloat() nameView.textSize = fontSize.toFloat()
description.textSize = fontSize.toFloat() description.textSize = fontSize.toFloat()

@ -6,6 +6,7 @@ import androidx.annotation.DrawableRes
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
@ -21,6 +22,7 @@ import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons.getIconResId import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import java.time.format.FormatStyle
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -46,6 +48,26 @@ class ChipProvider @Inject constructor(
showIcon = appearance != 1 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 { fun newSubtaskChip(task: TaskContainer, compact: Boolean): Chip {
val chip = newChip(task) val chip = newChip(task)
apply( apply(
@ -66,6 +88,9 @@ class ChipProvider @Inject constructor(
if (task.hasChildren() && preferences.showSubtaskChip) { if (task.hasChildren() && preferences.showSubtaskChip) {
chips.add(newSubtaskChip(task, !showText)) chips.add(newSubtaskChip(task, !showText))
} }
if (task.isHidden && preferences.showStartDateChip) {
chips.add(newStartDateChip(task, !showText))
}
if (task.hasLocation() && filter !is PlaceFilter && preferences.showPlaceChip) { if (task.hasLocation() && filter !is PlaceFilter && preferences.showPlaceChip) {
val location = task.getLocation() val location = task.getLocation()
newChip(PlaceFilter(location.place), R.drawable.ic_outline_place_24px)?.let(chips::add) newChip(PlaceFilter(location.place), R.drawable.ic_outline_place_24px)?.let(chips::add)

@ -2,6 +2,7 @@ package org.tasks.widget
import android.content.Context import android.content.Context
import android.widget.RemoteViews import android.widget.RemoteViews
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
@ -11,13 +12,18 @@ import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.ui.ChipListCache import org.tasks.ui.ChipListCache
import java.time.format.FormatStyle
import javax.inject.Inject import javax.inject.Inject
class ChipProvider @Inject constructor( class ChipProvider @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val chipListCache: ChipListCache, private val chipListCache: ChipListCache,
private val locale: Locale,
private val preferences: Preferences,
) { ) {
var isDark = false var isDark = false
@ -41,6 +47,27 @@ class ChipProvider @Inject constructor(
return chip 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? { fun getListChip(filter: Filter?, task: TaskContainer): RemoteViews? {
task.googleTaskList task.googleTaskList
?.takeIf { filter !is GtasksFilter } ?.takeIf { filter !is GtasksFilter }

@ -64,6 +64,7 @@ internal class ScrollableViewsFactory(
private var showDividers = false private var showDividers = false
private var disableGroups = false private var disableGroups = false
private var showSubtasks = false private var showSubtasks = false
private var showStartDates = false
private var showPlaces = false private var showPlaces = false
private var showLists = false private var showLists = false
private var showTags = false private var showTags = false
@ -199,9 +200,6 @@ internal class ScrollableViewsFactory(
val row = newRemoteView() val row = newRemoteView()
if (task.isHidden) { if (task.isHidden) {
textColorTitle = textColorSecondary textColorTitle = textColorSecondary
row.setViewVisibility(R.id.hidden_icon, View.VISIBLE)
} else {
row.setViewVisibility(R.id.hidden_icon, View.GONE)
} }
if (task.isCompleted) { if (task.isCompleted) {
textColorTitle = textColorSecondary textColorTitle = textColorSecondary
@ -267,6 +265,11 @@ internal class ScrollableViewsFactory(
.putExtra(WidgetClickActivity.EXTRA_COLLAPSED, !taskContainer.isCollapsed) .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) { if (taskContainer.hasLocation() && showPlaces) {
chipProvider chipProvider
.getPlaceChip(filter, taskContainer) .getPlaceChip(filter, taskContainer)
@ -367,6 +370,7 @@ internal class ScrollableViewsFactory(
} == true } == true
showPlaces = widgetPreferences.showPlaces() showPlaces = widgetPreferences.showPlaces()
showSubtasks = widgetPreferences.showSubtasks() showSubtasks = widgetPreferences.showSubtasks()
showStartDates = widgetPreferences.showStartDates()
showLists = widgetPreferences.showLists() showLists = widgetPreferences.showLists()
showTags = widgetPreferences.showTags() showTags = widgetPreferences.showTags()
showFullDate = widgetPreferences.alwaysDisplayFullDate showFullDate = widgetPreferences.alwaysDisplayFullDate

@ -60,6 +60,10 @@ public class WidgetPreferences implements QueryPreferences {
return getBoolean(R.string.p_widget_show_subtasks, true); return getBoolean(R.string.p_widget_show_subtasks, true);
} }
boolean showStartDates() {
return getBoolean(R.string.p_widget_show_start_dates, true);
}
boolean disableGroups() { boolean disableGroups() {
return getBoolean(R.string.p_widget_disable_groups, false); return getBoolean(R.string.p_widget_disable_groups, false);
} }

@ -44,22 +44,11 @@
android:textSize="14sp" android:textSize="14sp"
tools:text="Tmrrw" /> tools:text="Tmrrw" />
<ImageView
android:id="@+id/hidden_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/completeBox"
android:paddingEnd="2dp"
android:paddingStart="0dp"
android:src="@drawable/ic_outline_visibility_off_24px"
app:tint="@color/icon_tint_with_alpha"
android:contentDescription="@string/widget_due_date_hidden" />
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toEndOf="@id/hidden_icon" android:layout_toEndOf="@id/completeBox"
android:layout_toStartOf="@id/due_date" android:layout_toStartOf="@id/due_date"
android:paddingStart="0dp" android:paddingStart="0dp"
android:paddingEnd="@dimen/half_keyline_first" android:paddingEnd="@dimen/half_keyline_first"

@ -44,23 +44,9 @@
tools:paddingEnd="@dimen/widget_padding" tools:paddingEnd="@dimen/widget_padding"
tools:textColor="@color/white_60"/> tools:textColor="@color/white_60"/>
<ImageView
android:id="@+id/hidden_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/widget_complete_box"
android:layout_below="@id/top_padding"
android:paddingStart="0dp"
android:paddingEnd="2dp"
android:visibility="gone"
android:src="@drawable/ic_outline_visibility_off_24px"
android:tint="@color/icon_tint_dark_alpha"
tools:visibility="visible"
tools:ignore="UseAppTint" />
<TextView <TextView
android:id="@+id/widget_text" android:id="@+id/widget_text"
android:layout_toEndOf="@id/hidden_icon" android:layout_toEndOf="@id/widget_complete_box"
android:layout_toStartOf="@id/widget_due_end" android:layout_toStartOf="@id/widget_due_end"
android:layout_below="@id/top_padding" android:layout_below="@id/top_padding"
android:layout_width="match_parent" android:layout_width="match_parent"

@ -43,22 +43,9 @@
tools:paddingEnd="@dimen/widget_padding" tools:paddingEnd="@dimen/widget_padding"
tools:textColor="@color/black_60"/> tools:textColor="@color/black_60"/>
<ImageView
android:id="@+id/hidden_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/widget_complete_box"
android:layout_below="@id/top_padding"
android:paddingStart="0dp"
android:paddingEnd="2dp"
android:visibility="gone"
android:src="@drawable/ic_outline_visibility_off_24px"
android:alpha="@dimen/alpha_disabled"
tools:visibility="visible"/>
<TextView <TextView
android:id="@+id/widget_text" android:id="@+id/widget_text"
android:layout_toEndOf="@id/hidden_icon" android:layout_toEndOf="@id/widget_complete_box"
android:layout_toStartOf="@id/widget_due_end" android:layout_toStartOf="@id/widget_due_end"
android:layout_below="@id/top_padding" android:layout_below="@id/top_padding"
android:layout_width="match_parent" android:layout_width="match_parent"

@ -350,6 +350,7 @@
<string name="p_widget_show_full_task_title">widget-show-full-task-title-</string> <string name="p_widget_show_full_task_title">widget-show-full-task-title-</string>
<string name="p_widget_show_dividers">widget-show-dividers-</string> <string name="p_widget_show_dividers">widget-show-dividers-</string>
<string name="p_widget_show_subtasks">widget-show-subtasks-</string> <string name="p_widget_show_subtasks">widget-show-subtasks-</string>
<string name="p_widget_show_start_dates">widget-show-start-dates-</string>
<string name="p_widget_disable_groups">widget-disable_groups-</string> <string name="p_widget_disable_groups">widget-disable_groups-</string>
<string name="p_widget_show_places">widget-show-places-</string> <string name="p_widget_show_places">widget-show-places-</string>
<string name="p_widget_show_lists">widget-show-lists-</string> <string name="p_widget_show_lists">widget-show-lists-</string>
@ -414,6 +415,7 @@
<string name="p_chip_style">chip_style</string> <string name="p_chip_style">chip_style</string>
<string name="p_chip_appearance">chip_appearance</string> <string name="p_chip_appearance">chip_appearance</string>
<string name="p_subtask_chips">chips_subtask</string> <string name="p_subtask_chips">chips_subtask</string>
<string name="p_start_date_chip">chips_start_date</string>
<string name="p_place_chips">chips_place</string> <string name="p_place_chips">chips_place</string>
<string name="p_list_chips">chips_list</string> <string name="p_list_chips">chips_list</string>
<string name="p_tag_chips">chips_tag</string> <string name="p_tag_chips">chips_tag</string>

@ -59,6 +59,7 @@ File %1$s contained %2$s.\n\n
<string name="TEA_no_time">No time</string> <string name="TEA_no_time">No time</string>
<string name="due_date">Due date</string> <string name="due_date">Due date</string>
<string name="due_time">Due time</string> <string name="due_time">Due time</string>
<string name="start_date">Start date</string>
<string name="day_before_due">Day before due</string> <string name="day_before_due">Day before due</string>
<string name="week_before_due">Week before due</string> <string name="week_before_due">Week before due</string>
<string name="TEA_hideUntil_due_date" comment="Used for displaying the chosen hide until value in the task edit screen. Should be the same as due_date, just without capitalization.">due date</string> <string name="TEA_hideUntil_due_date" comment="Used for displaying the chosen hide until value in the task edit screen. Should be the same as due_date, just without capitalization.">due date</string>

@ -130,6 +130,11 @@
android:key="@string/p_subtask_chips" android:key="@string/p_subtask_chips"
android:title="@string/subtasks" /> android:title="@string/subtasks" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="@string/p_start_date_chip"
android:title="@string/start_date" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="true" android:defaultValue="true"
android:key="@string/p_place_chips" android:key="@string/p_place_chips"

@ -158,6 +158,11 @@
android:key="@string/p_widget_show_subtasks" android:key="@string/p_widget_show_subtasks"
android:title="@string/subtasks" /> android:title="@string/subtasks" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="@string/p_widget_show_start_dates"
android:title="@string/start_date" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="true" android:defaultValue="true"
android:key="@string/p_widget_show_places" android:key="@string/p_widget_show_places"

Loading…
Cancel
Save