Cache all widget preferences

pull/996/head
Alex Baker 6 years ago
parent 517575a651
commit 1f41efbd3c

@ -13,7 +13,6 @@ import android.util.DisplayMetrics;
import android.view.View; import android.view.View;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import android.widget.RemoteViewsService; import android.widget.RemoteViewsService;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
@ -42,10 +41,10 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private final Locale locale; private final Locale locale;
private final SubtasksHelper subtasksHelper; private final SubtasksHelper subtasksHelper;
private final Preferences preferences; private final Preferences preferences;
private final WidgetPreferences widgetPreferences;
private final Context context; private final Context context;
private final int indentPadding; private final int indentPadding;
private boolean isDark;
private boolean showDueDates; private boolean showDueDates;
private boolean bottomDueDate; private boolean bottomDueDate;
private boolean showCheckboxes; private boolean showCheckboxes;
@ -54,6 +53,13 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Filter filter; private Filter filter;
private int textColorPrimary; private int textColorPrimary;
private int textColorSecondary; private int textColorSecondary;
private boolean showFullTaskTitle;
private boolean showDescription;
private boolean showFullDescription;
private Bitmap divider;
private int vPad;
private int hPad;
private boolean handleDueDateClick;
private List<TaskContainer> tasks = new ArrayList<>(); private List<TaskContainer> tasks = new ArrayList<>();
@ -74,7 +80,6 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
this.defaultFilterProvider = defaultFilterProvider; this.defaultFilterProvider = defaultFilterProvider;
this.checkBoxProvider = checkBoxProvider; this.checkBoxProvider = checkBoxProvider;
this.locale = locale; this.locale = locale;
widgetPreferences = new WidgetPreferences(context, preferences, widgetId);
DisplayMetrics metrics = context.getResources().getDisplayMetrics(); DisplayMetrics metrics = context.getResources().getDisplayMetrics();
indentPadding = (int)(20 * metrics.density); indentPadding = (int)(20 * metrics.density);
updateSettings(); updateSettings();
@ -172,21 +177,14 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
} }
} }
row.setInt( row.setInt(R.id.widget_text, "setMaxLines", showFullTaskTitle ? Integer.MAX_VALUE : 1);
R.id.widget_text,
"setMaxLines",
widgetPreferences.showFullTaskTitle() ? Integer.MAX_VALUE : 1);
boolean showDescription = task.hasNotes() && widgetPreferences.showDescription();
if (showDescription) { if (showDescription && task.hasNotes()) {
row.setTextViewText(R.id.widget_description, task.getNotes()); row.setTextViewText(R.id.widget_description, task.getNotes());
row.setViewVisibility(R.id.widget_description, View.VISIBLE); row.setViewVisibility(R.id.widget_description, View.VISIBLE);
row.setTextColor(R.id.widget_description, textColorSecondary); row.setTextColor(R.id.widget_description, textColorSecondary);
row.setInt( row.setInt(
R.id.widget_description, R.id.widget_description, "setMaxLines", showFullDescription ? Integer.MAX_VALUE : 2);
"setMaxLines",
widgetPreferences.showFullDescription() ? Integer.MAX_VALUE : 2);
} else { } else {
row.setViewVisibility(R.id.widget_description, View.GONE); row.setViewVisibility(R.id.widget_description, View.GONE);
} }
@ -200,16 +198,13 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
editIntent.putExtra(WidgetClickActivity.EXTRA_TASK, task); editIntent.putExtra(WidgetClickActivity.EXTRA_TASK, task);
row.setOnClickFillInIntent(R.id.widget_row, editIntent); row.setOnClickFillInIntent(R.id.widget_row, editIntent);
int theme = widgetPreferences.getThemeIndex();
if (atLeastLollipop()) { if (atLeastLollipop()) {
row.setInt( row.setInt(
R.id.widget_row, R.id.widget_row,
"setBackgroundResource", "setBackgroundResource",
theme == 0 ? R.drawable.widget_ripple_light : R.drawable.widget_ripple_dark); isDark ? R.drawable.widget_ripple_dark : R.drawable.widget_ripple_light);
} }
int hPad = (int) context.getResources().getDimension(R.dimen.widget_padding);
int vPad = widgetPreferences.getWidgetSpacing();
row.setViewPadding(R.id.widget_complete_box, hPad, vPad, hPad, vPad); row.setViewPadding(R.id.widget_complete_box, hPad, vPad, hPad, vPad);
row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad); row.setViewPadding(R.id.widget_due_end, hPad, vPad, hPad, vPad);
if (showCheckboxes) { if (showCheckboxes) {
@ -221,9 +216,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
row.setInt( row.setInt(
R.id.widget_complete_box, R.id.widget_complete_box,
"setBackgroundResource", "setBackgroundResource",
theme == 0 isDark ? R.drawable.widget_ripple_circle_dark : R.drawable.widget_ripple_circle_light);
? R.drawable.widget_ripple_circle_light
: R.drawable.widget_ripple_circle_dark);
} else { } else {
row.setViewVisibility(R.id.widget_complete_box, View.GONE); row.setViewVisibility(R.id.widget_complete_box, View.GONE);
row.setViewPadding(R.id.start_padding, hPad, 0, 0, 0); row.setViewPadding(R.id.start_padding, hPad, 0, 0, 0);
@ -231,13 +224,11 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
row.setViewPadding(R.id.top_padding, 0, vPad, 0, 0); row.setViewPadding(R.id.top_padding, 0, vPad, 0, 0);
row.setViewPadding(R.id.bottom_padding, 0, vPad, 0, 0); row.setViewPadding(R.id.bottom_padding, 0, vPad, 0, 0);
if (widgetPreferences.showDividers()) { if (divider == null) {
int dividerColor =
ContextCompat.getColor(context, theme == 0 ? R.color.black_12 : R.color.white_12);
row.setViewVisibility(R.id.divider, View.VISIBLE);
row.setImageViewBitmap(R.id.divider, getSolidBackground(dividerColor));
} else {
row.setViewVisibility(R.id.divider, View.GONE); row.setViewVisibility(R.id.divider, View.GONE);
} else {
row.setViewVisibility(R.id.divider, View.VISIBLE);
row.setImageViewBitmap(R.id.divider, divider);
} }
if (taskContainer.hasChildren()) { if (taskContainer.hasChildren()) {
@ -248,7 +239,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
row.setInt( row.setInt(
R.id.subtask_button, R.id.subtask_button,
"setBackgroundResource", "setBackgroundResource",
theme == 0 ? R.drawable.widget_chip_light : R.drawable.widget_chip_dark); isDark ? R.drawable.widget_chip_dark : R.drawable.widget_chip_light);
row.setTextColor(R.id.subtask_text, textColorSecondary); row.setTextColor(R.id.subtask_text, textColorSecondary);
row.setTextViewText( row.setTextViewText(
R.id.subtask_text, R.id.subtask_text,
@ -284,12 +275,6 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
return null; return null;
} }
private static Bitmap getSolidBackground(@ColorInt int bgColor) {
Bitmap bitmap = Bitmap.createBitmap(2, 2, Bitmap.Config.ARGB_8888); // Create a Bitmap
new Canvas(bitmap).drawColor(bgColor); // Set the color
return bitmap;
}
private TaskContainer getTask(int position) { private TaskContainer getTask(int position) {
return position < tasks.size() ? tasks.get(position) : null; return position < tasks.size() ? tasks.get(position) : null;
} }
@ -313,9 +298,9 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
int dueDateRes = bottomDueDate ? R.id.widget_due_bottom : R.id.widget_due_end; int dueDateRes = bottomDueDate ? R.id.widget_due_bottom : R.id.widget_due_end;
row.setViewVisibility(bottomDueDate ? R.id.widget_due_end : R.id.widget_due_bottom, View.GONE); row.setViewVisibility(bottomDueDate ? R.id.widget_due_end : R.id.widget_due_bottom, View.GONE);
if (task.hasDueDate()) { if (task.hasDueDate()) {
if (!bottomDueDate) { // if (!bottomDueDate) {
row.setViewPadding(R.id.widget_text, 0, 0, 0, 0); // row.setViewPadding(R.id.widget_text, 0, 0, 0, 0);
} // }
row.setViewVisibility(dueDateRes, View.VISIBLE); row.setViewVisibility(dueDateRes, View.VISIBLE);
row.setTextViewText( row.setTextViewText(
dueDateRes, dueDateRes,
@ -328,13 +313,11 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
} else { } else {
row.setViewVisibility(dueDateRes, View.GONE); row.setViewVisibility(dueDateRes, View.GONE);
} }
if (widgetPreferences.rescheduleOnDueDateClick()) { if (handleDueDateClick) {
row.setInt( row.setInt(
dueDateRes, dueDateRes,
"setBackgroundResource", "setBackgroundResource",
widgetPreferences.getThemeIndex() == 0 isDark ? R.drawable.widget_ripple_circle_dark : R.drawable.widget_ripple_circle_light);
? R.drawable.widget_ripple_circle_light
: R.drawable.widget_ripple_circle_dark);
Intent intent = new Intent(WidgetClickActivity.RESCHEDULE_TASK); Intent intent = new Intent(WidgetClickActivity.RESCHEDULE_TASK);
intent.putExtra(WidgetClickActivity.EXTRA_TASK, task); intent.putExtra(WidgetClickActivity.EXTRA_TASK, task);
row.setOnClickFillInIntent(dueDateRes, intent); row.setOnClickFillInIntent(dueDateRes, intent);
@ -342,7 +325,14 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
} }
private void updateSettings() { private void updateSettings() {
boolean isDark = widgetPreferences.getThemeIndex() > 0; 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 = textColorPrimary =
ContextCompat.getColor(context, isDark ? R.color.white_87 : R.color.black_87); ContextCompat.getColor(context, isDark ? R.color.white_87 : R.color.black_87);
textColorSecondary = textColorSecondary =
@ -354,5 +344,12 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
textSize = widgetPreferences.getFontSize(); textSize = widgetPreferences.getFontSize();
dueDateTextSize = Math.max(10, textSize - 2); dueDateTextSize = Math.max(10, textSize - 2);
filter = defaultFilterProvider.getFilterFromPreference(widgetPreferences.getFilterId()); filter = defaultFilterProvider.getFilterFromPreference(widgetPreferences.getFilterId());
if (widgetPreferences.showDividers()) {
divider = Bitmap.createBitmap(2, 2, Bitmap.Config.ARGB_8888); // Create a Bitmap
int bgColor = ContextCompat.getColor(context, isDark ? R.color.white_12 : R.color.black_12);
new Canvas(divider).drawColor(bgColor); // Set the color
} else {
divider = null;
}
} }
} }

Loading…
Cancel
Save