mirror of https://github.com/tasks/tasks
Convert ScrollableViewsFactory to Kotlin
parent
8487526171
commit
b394251afc
@ -1,315 +0,0 @@
|
||||
package org.tasks.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Paint;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.widget.RemoteViews;
|
||||
import android.widget.RemoteViewsService;
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
import com.todoroo.astrid.api.Filter;
|
||||
import com.todoroo.astrid.dao.TaskDaoBlocking;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
import com.todoroo.astrid.subtasks.SubtasksHelper;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.tasks.BuildConfig;
|
||||
import org.tasks.R;
|
||||
import org.tasks.data.SubtaskInfo;
|
||||
import org.tasks.data.TaskContainer;
|
||||
import org.tasks.data.TaskListQuery;
|
||||
import org.tasks.locale.Locale;
|
||||
import org.tasks.preferences.DefaultFilterProvider;
|
||||
import org.tasks.preferences.Preferences;
|
||||
import org.tasks.ui.CheckBoxProvider;
|
||||
import java.time.format.FormatStyle;
|
||||
import timber.log.Timber;
|
||||
|
||||
class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
|
||||
|
||||
private final int widgetId;
|
||||
private final TaskDaoBlocking taskDao;
|
||||
private final DefaultFilterProvider defaultFilterProvider;
|
||||
private final CheckBoxProvider checkBoxProvider;
|
||||
private final Locale locale;
|
||||
private final SubtasksHelper subtasksHelper;
|
||||
private final Preferences preferences;
|
||||
private final Context context;
|
||||
private final int indentPadding;
|
||||
|
||||
private boolean isDark;
|
||||
private boolean showDueDates;
|
||||
private boolean endDueDate;
|
||||
private boolean showCheckboxes;
|
||||
private float textSize;
|
||||
private float dueDateTextSize;
|
||||
private Filter filter;
|
||||
private int textColorPrimary;
|
||||
private int textColorSecondary;
|
||||
private boolean showFullTaskTitle;
|
||||
private boolean showDescription;
|
||||
private boolean showFullDescription;
|
||||
private int vPad;
|
||||
private int hPad;
|
||||
private boolean handleDueDateClick;
|
||||
private boolean showDividers;
|
||||
private boolean showSubtasks;
|
||||
private boolean isRtl;
|
||||
|
||||
private List<TaskContainer> tasks = new ArrayList<>();
|
||||
|
||||
ScrollableViewsFactory(
|
||||
SubtasksHelper subtasksHelper,
|
||||
Preferences preferences,
|
||||
Context context,
|
||||
int widgetId,
|
||||
TaskDaoBlocking taskDao,
|
||||
DefaultFilterProvider defaultFilterProvider,
|
||||
CheckBoxProvider checkBoxProvider,
|
||||
Locale locale) {
|
||||
this.subtasksHelper = subtasksHelper;
|
||||
this.preferences = preferences;
|
||||
this.context = context;
|
||||
this.widgetId = widgetId;
|
||||
this.taskDao = taskDao;
|
||||
this.defaultFilterProvider = defaultFilterProvider;
|
||||
this.checkBoxProvider = checkBoxProvider;
|
||||
this.locale = locale;
|
||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
indentPadding = (int)(20 * metrics.density);
|
||||
updateSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {}
|
||||
|
||||
@Override
|
||||
public void onDataSetChanged() {
|
||||
updateSettings();
|
||||
tasks = taskDao.fetchTasks(subtasks -> getQuery(filter, subtasks));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return tasks.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteViews getViewAt(int position) {
|
||||
return buildUpdate(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteViews getLoadingView() {
|
||||
return newRemoteView();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getViewTypeCount() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
TaskContainer task = getTask(position);
|
||||
return task == null ? 0 : task.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasStableIds() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private Bitmap getCheckbox(Task task) {
|
||||
return checkBoxProvider.getWidgetCheckBox(task);
|
||||
}
|
||||
|
||||
private RemoteViews newRemoteView() {
|
||||
return new RemoteViews(
|
||||
BuildConfig.APPLICATION_ID, isDark ? R.layout.widget_row_dark : R.layout.widget_row_light);
|
||||
}
|
||||
|
||||
private RemoteViews buildUpdate(int position) {
|
||||
try {
|
||||
TaskContainer taskContainer = getTask(position);
|
||||
if (taskContainer == null) {
|
||||
return null;
|
||||
}
|
||||
Task task = taskContainer.getTask();
|
||||
int textColorTitle = textColorPrimary;
|
||||
|
||||
RemoteViews 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;
|
||||
row.setInt(
|
||||
R.id.widget_text, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
|
||||
} else {
|
||||
row.setInt(R.id.widget_text, "setPaintFlags", Paint.ANTI_ALIAS_FLAG);
|
||||
}
|
||||
row.setFloat(R.id.widget_text, "setTextSize", textSize);
|
||||
if (showDueDates) {
|
||||
formatDueDate(row, task);
|
||||
} else {
|
||||
row.setViewVisibility(R.id.widget_due_bottom, View.GONE);
|
||||
row.setViewVisibility(R.id.widget_due_end, View.GONE);
|
||||
if (task.hasDueDate() && task.isOverdue()) {
|
||||
textColorTitle = context.getColor(R.color.overdue);
|
||||
}
|
||||
}
|
||||
if (showFullTaskTitle) {
|
||||
row.setInt(R.id.widget_text, "setMaxLines", Integer.MAX_VALUE);
|
||||
}
|
||||
row.setTextViewText(R.id.widget_text, task.getTitle());
|
||||
row.setTextColor(R.id.widget_text, textColorTitle);
|
||||
|
||||
if (showDescription && task.hasNotes()) {
|
||||
row.setFloat(R.id.widget_description, "setTextSize", textSize);
|
||||
row.setTextViewText(R.id.widget_description, task.getNotes());
|
||||
row.setViewVisibility(R.id.widget_description, View.VISIBLE);
|
||||
if (showFullDescription) {
|
||||
row.setInt(R.id.widget_description, "setMaxLines", Integer.MAX_VALUE);
|
||||
}
|
||||
} else {
|
||||
row.setViewVisibility(R.id.widget_description, View.GONE);
|
||||
}
|
||||
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.widget_row,
|
||||
new Intent(WidgetClickActivity.EDIT_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_FILTER, filter)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task));
|
||||
|
||||
if (showCheckboxes) {
|
||||
row.setViewPadding(R.id.widget_complete_box, hPad, vPad, hPad, vPad);
|
||||
row.setImageViewBitmap(R.id.widget_complete_box, getCheckbox(task));
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.widget_complete_box,
|
||||
new Intent(WidgetClickActivity.COMPLETE_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task));
|
||||
} else {
|
||||
row.setViewPadding(R.id.widget_complete_box, hPad, 0, 0, 0);
|
||||
row.setInt(R.id.widget_complete_box, "setBackgroundResource", 0);
|
||||
}
|
||||
row.setViewPadding(R.id.top_padding, 0, vPad, 0, 0);
|
||||
row.setViewPadding(R.id.bottom_padding, 0, vPad, 0, 0);
|
||||
|
||||
if (!showDividers) {
|
||||
row.setViewVisibility(R.id.divider, View.GONE);
|
||||
}
|
||||
|
||||
if (showSubtasks && taskContainer.hasChildren()) {
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.subtask_button,
|
||||
new Intent(WidgetClickActivity.TOGGLE_SUBTASKS)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task)
|
||||
.putExtra(WidgetClickActivity.EXTRA_COLLAPSED, !taskContainer.isCollapsed()));
|
||||
row.setTextViewText(
|
||||
R.id.subtask_text,
|
||||
context
|
||||
.getResources()
|
||||
.getQuantityString(
|
||||
R.plurals.subtask_count, taskContainer.children, taskContainer.children));
|
||||
row.setImageViewResource(
|
||||
R.id.subtask_icon,
|
||||
taskContainer.isCollapsed()
|
||||
? R.drawable.ic_keyboard_arrow_up_black_18dp
|
||||
: R.drawable.ic_keyboard_arrow_down_black_18dp);
|
||||
row.setViewVisibility(R.id.subtask_button, View.VISIBLE);
|
||||
} else {
|
||||
row.setViewVisibility(R.id.subtask_button, View.GONE);
|
||||
}
|
||||
row.setInt(R.id.widget_row, "setLayoutDirection", locale.getDirectionality());
|
||||
|
||||
int startPad = taskContainer.getIndent() * indentPadding;
|
||||
row.setViewPadding(R.id.widget_row, isRtl ? 0 : startPad, 0, isRtl ? startPad : 0, 0);
|
||||
|
||||
return row;
|
||||
} catch (Exception e) {
|
||||
Timber.e(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private TaskContainer getTask(int position) {
|
||||
return position < tasks.size() ? tasks.get(position) : null;
|
||||
}
|
||||
|
||||
private List<String> getQuery(Filter filter, SubtaskInfo subtasks) {
|
||||
List<String> queries = TaskListQuery.getQuery(preferences, filter, subtasks);
|
||||
int last = queries.size() - 1;
|
||||
queries.set(last, subtasksHelper.applySubtasksToWidgetFilter(filter, queries.get(last)));
|
||||
return queries;
|
||||
}
|
||||
|
||||
private void formatDueDate(RemoteViews row, Task task) {
|
||||
int dueDateRes = endDueDate ? R.id.widget_due_end : R.id.widget_due_bottom;
|
||||
row.setViewVisibility(endDueDate ? R.id.widget_due_bottom : R.id.widget_due_end, View.GONE);
|
||||
boolean hasDueDate = task.hasDueDate();
|
||||
int endPad = hasDueDate && endDueDate ? 0 : hPad;
|
||||
row.setViewPadding(R.id.widget_text, isRtl ? endPad : 0, 0, isRtl ? 0 : endPad, 0);
|
||||
if (hasDueDate) {
|
||||
if (endDueDate) {
|
||||
row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad);
|
||||
}
|
||||
row.setViewVisibility(dueDateRes, View.VISIBLE);
|
||||
row.setTextViewText(
|
||||
dueDateRes,
|
||||
DateUtilities.getRelativeDateTime(
|
||||
context, task.getDueDate(), locale.getLocale(), FormatStyle.MEDIUM));
|
||||
row.setTextColor(
|
||||
dueDateRes,
|
||||
task.isOverdue() ? context.getColor(R.color.overdue) : textColorSecondary);
|
||||
row.setFloat(dueDateRes, "setTextSize", dueDateTextSize);
|
||||
if (handleDueDateClick) {
|
||||
row.setOnClickFillInIntent(
|
||||
dueDateRes,
|
||||
new Intent(WidgetClickActivity.RESCHEDULE_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task));
|
||||
} else {
|
||||
row.setInt(dueDateRes, "setBackgroundResource", 0);
|
||||
}
|
||||
} else {
|
||||
row.setViewVisibility(dueDateRes, View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSettings() {
|
||||
WidgetPreferences widgetPreferences = new WidgetPreferences(context, preferences, widgetId);
|
||||
vPad = widgetPreferences.getWidgetSpacing();
|
||||
hPad = (int) context.getResources().getDimension(R.dimen.widget_padding);
|
||||
handleDueDateClick = widgetPreferences.rescheduleOnDueDateClick();
|
||||
showFullTaskTitle = widgetPreferences.showFullTaskTitle();
|
||||
showDescription = widgetPreferences.showDescription();
|
||||
showFullDescription = widgetPreferences.showFullDescription();
|
||||
isDark = widgetPreferences.getThemeIndex() > 0;
|
||||
textColorPrimary =
|
||||
context.getColor(isDark ? R.color.white_87 : R.color.black_87);
|
||||
textColorSecondary =
|
||||
context.getColor(isDark ? R.color.white_60 : R.color.black_60);
|
||||
int dueDatePosition = widgetPreferences.getDueDatePosition();
|
||||
showDueDates = dueDatePosition != 2;
|
||||
endDueDate = dueDatePosition != 1;
|
||||
showCheckboxes = widgetPreferences.showCheckboxes();
|
||||
textSize = widgetPreferences.getFontSize();
|
||||
dueDateTextSize = Math.max(10, textSize - 2);
|
||||
filter = defaultFilterProvider.getFilterFromPreferenceBlocking(widgetPreferences.getFilterId());
|
||||
showDividers = widgetPreferences.showDividers();
|
||||
showSubtasks = widgetPreferences.showSubtasks();
|
||||
isRtl = locale.getDirectionality() == View.LAYOUT_DIRECTION_RTL;
|
||||
}
|
||||
}
|
@ -0,0 +1,264 @@
|
||||
package org.tasks.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Paint
|
||||
import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import android.widget.RemoteViewsService.RemoteViewsFactory
|
||||
import com.todoroo.andlib.utility.DateUtilities
|
||||
import com.todoroo.astrid.api.Filter
|
||||
import com.todoroo.astrid.dao.TaskDaoBlocking
|
||||
import com.todoroo.astrid.data.Task
|
||||
import com.todoroo.astrid.subtasks.SubtasksHelper
|
||||
import org.tasks.BuildConfig
|
||||
import org.tasks.R
|
||||
import org.tasks.data.SubtaskInfo
|
||||
import org.tasks.data.TaskContainer
|
||||
import org.tasks.data.TaskListQuery.getQuery
|
||||
import org.tasks.locale.Locale
|
||||
import org.tasks.preferences.DefaultFilterProvider
|
||||
import org.tasks.preferences.Preferences
|
||||
import org.tasks.ui.CheckBoxProvider
|
||||
import timber.log.Timber
|
||||
import java.time.format.FormatStyle
|
||||
import java.util.*
|
||||
import kotlin.math.max
|
||||
|
||||
internal class ScrollableViewsFactory(
|
||||
private val subtasksHelper: SubtasksHelper,
|
||||
private val preferences: Preferences,
|
||||
private val context: Context,
|
||||
private val widgetId: Int,
|
||||
private val taskDao: TaskDaoBlocking,
|
||||
private val defaultFilterProvider: DefaultFilterProvider,
|
||||
private val checkBoxProvider: CheckBoxProvider,
|
||||
private val locale: Locale) : RemoteViewsFactory {
|
||||
private val indentPadding: Int
|
||||
private var isDark = false
|
||||
private var showDueDates = false
|
||||
private var endDueDate = false
|
||||
private var showCheckboxes = false
|
||||
private var textSize = 0f
|
||||
private var dueDateTextSize = 0f
|
||||
private var filter: Filter? = null
|
||||
private var textColorPrimary = 0
|
||||
private var textColorSecondary = 0
|
||||
private var showFullTaskTitle = false
|
||||
private var showDescription = false
|
||||
private var showFullDescription = false
|
||||
private var vPad = 0
|
||||
private var hPad = 0
|
||||
private var handleDueDateClick = false
|
||||
private var showDividers = false
|
||||
private var showSubtasks = false
|
||||
private var isRtl = false
|
||||
private var tasks: List<TaskContainer> = ArrayList()
|
||||
override fun onCreate() {}
|
||||
override fun onDataSetChanged() {
|
||||
updateSettings()
|
||||
tasks = taskDao.fetchTasks { subtasks: SubtaskInfo -> getQuery(filter, subtasks) }
|
||||
}
|
||||
|
||||
override fun onDestroy() {}
|
||||
override fun getCount(): Int {
|
||||
return tasks.size
|
||||
}
|
||||
|
||||
override fun getViewAt(position: Int): RemoteViews {
|
||||
return buildUpdate(position)!!
|
||||
}
|
||||
|
||||
override fun getLoadingView(): RemoteViews {
|
||||
return newRemoteView()
|
||||
}
|
||||
|
||||
override fun getViewTypeCount(): Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
override fun getItemId(position: Int): Long {
|
||||
val task = getTask(position)
|
||||
return task?.id ?: 0
|
||||
}
|
||||
|
||||
override fun hasStableIds(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
private fun getCheckbox(task: Task): Bitmap {
|
||||
return checkBoxProvider.getWidgetCheckBox(task)
|
||||
}
|
||||
|
||||
private fun newRemoteView(): RemoteViews {
|
||||
return RemoteViews(
|
||||
BuildConfig.APPLICATION_ID, if (isDark) R.layout.widget_row_dark else R.layout.widget_row_light)
|
||||
}
|
||||
|
||||
private fun buildUpdate(position: Int): RemoteViews? {
|
||||
try {
|
||||
val taskContainer = getTask(position) ?: return null
|
||||
val task = taskContainer.getTask()
|
||||
var textColorTitle = textColorPrimary
|
||||
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
|
||||
row.setInt(
|
||||
R.id.widget_text, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG or Paint.ANTI_ALIAS_FLAG)
|
||||
} else {
|
||||
row.setInt(R.id.widget_text, "setPaintFlags", Paint.ANTI_ALIAS_FLAG)
|
||||
}
|
||||
row.setFloat(R.id.widget_text, "setTextSize", textSize)
|
||||
if (showDueDates) {
|
||||
formatDueDate(row, task)
|
||||
} else {
|
||||
row.setViewVisibility(R.id.widget_due_bottom, View.GONE)
|
||||
row.setViewVisibility(R.id.widget_due_end, View.GONE)
|
||||
if (task.hasDueDate() && task.isOverdue) {
|
||||
textColorTitle = context.getColor(R.color.overdue)
|
||||
}
|
||||
}
|
||||
if (showFullTaskTitle) {
|
||||
row.setInt(R.id.widget_text, "setMaxLines", Int.MAX_VALUE)
|
||||
}
|
||||
row.setTextViewText(R.id.widget_text, task.title)
|
||||
row.setTextColor(R.id.widget_text, textColorTitle)
|
||||
if (showDescription && task.hasNotes()) {
|
||||
row.setFloat(R.id.widget_description, "setTextSize", textSize)
|
||||
row.setTextViewText(R.id.widget_description, task.notes)
|
||||
row.setViewVisibility(R.id.widget_description, View.VISIBLE)
|
||||
if (showFullDescription) {
|
||||
row.setInt(R.id.widget_description, "setMaxLines", Int.MAX_VALUE)
|
||||
}
|
||||
} else {
|
||||
row.setViewVisibility(R.id.widget_description, View.GONE)
|
||||
}
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.widget_row,
|
||||
Intent(WidgetClickActivity.EDIT_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_FILTER, filter)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task))
|
||||
if (showCheckboxes) {
|
||||
row.setViewPadding(R.id.widget_complete_box, hPad, vPad, hPad, vPad)
|
||||
row.setImageViewBitmap(R.id.widget_complete_box, getCheckbox(task))
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.widget_complete_box,
|
||||
Intent(WidgetClickActivity.COMPLETE_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task))
|
||||
} else {
|
||||
row.setViewPadding(R.id.widget_complete_box, hPad, 0, 0, 0)
|
||||
row.setInt(R.id.widget_complete_box, "setBackgroundResource", 0)
|
||||
}
|
||||
row.setViewPadding(R.id.top_padding, 0, vPad, 0, 0)
|
||||
row.setViewPadding(R.id.bottom_padding, 0, vPad, 0, 0)
|
||||
if (!showDividers) {
|
||||
row.setViewVisibility(R.id.divider, View.GONE)
|
||||
}
|
||||
if (showSubtasks && taskContainer.hasChildren()) {
|
||||
row.setOnClickFillInIntent(
|
||||
R.id.subtask_button,
|
||||
Intent(WidgetClickActivity.TOGGLE_SUBTASKS)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task)
|
||||
.putExtra(WidgetClickActivity.EXTRA_COLLAPSED, !taskContainer.isCollapsed))
|
||||
row.setTextViewText(
|
||||
R.id.subtask_text,
|
||||
context
|
||||
.resources
|
||||
.getQuantityString(
|
||||
R.plurals.subtask_count, taskContainer.children, taskContainer.children))
|
||||
row.setImageViewResource(
|
||||
R.id.subtask_icon,
|
||||
if (taskContainer.isCollapsed) R.drawable.ic_keyboard_arrow_up_black_18dp else R.drawable.ic_keyboard_arrow_down_black_18dp)
|
||||
row.setViewVisibility(R.id.subtask_button, View.VISIBLE)
|
||||
} else {
|
||||
row.setViewVisibility(R.id.subtask_button, View.GONE)
|
||||
}
|
||||
row.setInt(R.id.widget_row, "setLayoutDirection", locale.directionality)
|
||||
val startPad = taskContainer.getIndent() * indentPadding
|
||||
row.setViewPadding(R.id.widget_row, if (isRtl) 0 else startPad, 0, if (isRtl) startPad else 0, 0)
|
||||
return row
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun getTask(position: Int): TaskContainer? {
|
||||
return if (position < tasks.size) tasks[position] else null
|
||||
}
|
||||
|
||||
private fun getQuery(filter: Filter?, subtasks: SubtaskInfo): List<String> {
|
||||
val queries = getQuery(preferences, filter!!, subtasks)
|
||||
val last = queries.size - 1
|
||||
queries[last] = subtasksHelper.applySubtasksToWidgetFilter(filter, queries[last])
|
||||
return queries
|
||||
}
|
||||
|
||||
private fun formatDueDate(row: RemoteViews, task: Task) {
|
||||
val dueDateRes = if (endDueDate) R.id.widget_due_end else R.id.widget_due_bottom
|
||||
row.setViewVisibility(if (endDueDate) R.id.widget_due_bottom else R.id.widget_due_end, View.GONE)
|
||||
val hasDueDate = task.hasDueDate()
|
||||
val endPad = if (hasDueDate && endDueDate) 0 else hPad
|
||||
row.setViewPadding(R.id.widget_text, if (isRtl) endPad else 0, 0, if (isRtl) 0 else endPad, 0)
|
||||
if (hasDueDate) {
|
||||
if (endDueDate) {
|
||||
row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad)
|
||||
}
|
||||
row.setViewVisibility(dueDateRes, View.VISIBLE)
|
||||
row.setTextViewText(
|
||||
dueDateRes,
|
||||
DateUtilities.getRelativeDateTime(
|
||||
context, task.dueDate, locale.locale, FormatStyle.MEDIUM))
|
||||
row.setTextColor(
|
||||
dueDateRes,
|
||||
if (task.isOverdue) context.getColor(R.color.overdue) else textColorSecondary)
|
||||
row.setFloat(dueDateRes, "setTextSize", dueDateTextSize)
|
||||
if (handleDueDateClick) {
|
||||
row.setOnClickFillInIntent(
|
||||
dueDateRes,
|
||||
Intent(WidgetClickActivity.RESCHEDULE_TASK)
|
||||
.putExtra(WidgetClickActivity.EXTRA_TASK, task))
|
||||
} else {
|
||||
row.setInt(dueDateRes, "setBackgroundResource", 0)
|
||||
}
|
||||
} else {
|
||||
row.setViewVisibility(dueDateRes, View.GONE)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateSettings() {
|
||||
val widgetPreferences = WidgetPreferences(context, preferences, widgetId)
|
||||
vPad = widgetPreferences.widgetSpacing
|
||||
hPad = context.resources.getDimension(R.dimen.widget_padding).toInt()
|
||||
handleDueDateClick = widgetPreferences.rescheduleOnDueDateClick()
|
||||
showFullTaskTitle = widgetPreferences.showFullTaskTitle()
|
||||
showDescription = widgetPreferences.showDescription()
|
||||
showFullDescription = widgetPreferences.showFullDescription()
|
||||
isDark = widgetPreferences.themeIndex > 0
|
||||
textColorPrimary = context.getColor(if (isDark) R.color.white_87 else R.color.black_87)
|
||||
textColorSecondary = context.getColor(if (isDark) R.color.white_60 else R.color.black_60)
|
||||
val dueDatePosition = widgetPreferences.dueDatePosition
|
||||
showDueDates = dueDatePosition != 2
|
||||
endDueDate = dueDatePosition != 1
|
||||
showCheckboxes = widgetPreferences.showCheckboxes()
|
||||
textSize = widgetPreferences.fontSize.toFloat()
|
||||
dueDateTextSize = max(10f, textSize - 2)
|
||||
filter = defaultFilterProvider.getFilterFromPreferenceBlocking(widgetPreferences.filterId)
|
||||
showDividers = widgetPreferences.showDividers()
|
||||
showSubtasks = widgetPreferences.showSubtasks()
|
||||
isRtl = locale.directionality == View.LAYOUT_DIRECTION_RTL
|
||||
}
|
||||
|
||||
init {
|
||||
val metrics = context.resources.displayMetrics
|
||||
indentPadding = (20 * metrics.density).toInt()
|
||||
updateSettings()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue