Cache all widget preferences

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

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