Replace filter with filter ID in widgets

pull/384/head
Alex Baker 8 years ago
parent aef5ae7cb1
commit 79c2850eb7

@ -115,7 +115,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
TaskEditFragment taskEditFragment = getTaskEditFragment(); TaskEditFragment taskEditFragment = getTaskEditFragment();
List<TaskEditControlFragment> taskEditControlFragments = null; List<TaskEditControlFragment> taskEditControlFragments = null;
if (taskEditFragment != null) { if (taskEditFragment != null) {
if (intent.hasExtra(OPEN_FILTER) || intent.hasExtra(OPEN_TASK)) { if (intent.hasExtra(OPEN_FILTER) || intent.hasExtra(LOAD_FILTER) || intent.hasExtra(OPEN_TASK)) {
taskEditFragment.save(); taskEditFragment.save();
taskEditFragment = null; taskEditFragment = null;
} else { } else {

@ -774,8 +774,6 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
Filter filter = TagFilterExposer.filterFromTagData(getActivity(), td); Filter filter = TagFilterExposer.filterFromTagData(getActivity(), td);
((TaskListActivity) getActivity()).onFilterItemClicked(filter); ((TaskListActivity) getActivity()).onFilterItemClicked(filter);
} }
} else {
refresh();
} }
} else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) { } else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) {
TagData tagData = getActiveTagData(); TagData tagData = getActiveTagData();
@ -786,12 +784,11 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
if (activeUuid.equals(uuid)) { if (activeUuid.equals(uuid)) {
((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources())); ((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources()));
((TaskListActivity) getActivity()).clearNavigationDrawer(); // Should auto refresh ((TaskListActivity) getActivity()).clearNavigationDrawer(); // Should auto refresh
} else {
refresh();
} }
} }
((TaskListActivity) getActivity()).refreshNavigationDrawer(); ((TaskListActivity) getActivity()).refreshNavigationDrawer();
broadcaster.refresh();
} }
} else if (requestCode == REQUEST_EDIT_FILTER) { } else if (requestCode == REQUEST_EDIT_FILTER) {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
@ -804,6 +801,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
} }
((TaskListActivity) getActivity()).refreshNavigationDrawer(); ((TaskListActivity) getActivity()).refreshNavigationDrawer();
broadcaster.refresh();
} }
} else if (requestCode == REQUEST_SORT) { } else if (requestCode == REQUEST_SORT) {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {

@ -49,6 +49,10 @@ public final class CustomFilterExposer {
} }
private Filter load(StoreObject savedFilter) { private Filter load(StoreObject savedFilter) {
if (savedFilter == null) {
return null;
}
String title = savedFilter.getValue(SavedFilter.NAME); String title = savedFilter.getValue(SavedFilter.NAME);
String sql = savedFilter.getValue(SavedFilter.SQL); String sql = savedFilter.getValue(SavedFilter.SQL);
String values = savedFilter.getValue(SavedFilter.VALUES); String values = savedFilter.getValue(SavedFilter.VALUES);

@ -63,6 +63,9 @@ public class TagFilterExposer {
/** Create filter from new tag object */ /** Create filter from new tag object */
public static FilterWithCustomIntent filterFromTag(Context context, TagData tag, Criterion criterion) { public static FilterWithCustomIntent filterFromTag(Context context, TagData tag, Criterion criterion) {
if (tag == null) {
return null;
}
String title = tag.getName(); String title = tag.getName();
if (TextUtils.isEmpty(title)) { if (TextUtils.isEmpty(title)) {
return null; return null;

@ -8,27 +8,20 @@ package com.todoroo.astrid.widget;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.tags.TagFilterExposer;
import org.tasks.Broadcaster; import org.tasks.Broadcaster;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.BroadcastComponent; import org.tasks.injection.BroadcastComponent;
import org.tasks.injection.InjectingAppWidgetProvider; import org.tasks.injection.InjectingAppWidgetProvider;
import org.tasks.intents.TaskIntents; import org.tasks.intents.TaskIntents;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.widget.ScrollableWidgetUpdateService; import org.tasks.widget.ScrollableWidgetUpdateService;
@ -39,20 +32,20 @@ import timber.log.Timber;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static com.todoroo.astrid.api.AstridApiConstants.BROADCAST_EVENT_REFRESH; import static com.todoroo.astrid.api.AstridApiConstants.BROADCAST_EVENT_REFRESH;
import static org.tasks.intents.TaskIntents.getEditTaskStack; import static org.tasks.intents.TaskIntents.getEditTaskIntent;
public class TasksWidget extends InjectingAppWidgetProvider { public class TasksWidget extends InjectingAppWidgetProvider {
private static int flags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP; private static int flags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP;
@Inject Broadcaster broadcaster; @Inject Broadcaster broadcaster;
@Inject TagDataDao tagDataDao;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject DefaultFilterProvider defaultFilterProvider;
public static final String COMPLETE_TASK = "COMPLETE_TASK"; public static final String COMPLETE_TASK = "COMPLETE_TASK";
public static final String EDIT_TASK = "EDIT_TASK"; public static final String EDIT_TASK = "EDIT_TASK";
public static final String EXTRA_FILTER = "extra_filter"; public static final String EXTRA_FILTER_ID = "extra_filter_id";
public static final String EXTRA_ID = "extra_id"; //$NON-NLS-1$ public static final String EXTRA_ID = "extra_id"; //$NON-NLS-1$
@Override @Override
@ -65,8 +58,10 @@ public class TasksWidget extends InjectingAppWidgetProvider {
break; break;
case EDIT_TASK: case EDIT_TASK:
long taskId = intent.getLongExtra(EXTRA_ID, 0); long taskId = intent.getLongExtra(EXTRA_ID, 0);
Filter filter = intent.getParcelableExtra(EXTRA_FILTER); String filterId = intent.getStringExtra(EXTRA_FILTER_ID);
getEditTaskStack(context, filter, taskId).startActivities(); Intent editTaskIntent = getEditTaskIntent(context, filterId, taskId);
editTaskIntent.setFlags(flags);
context.startActivity(editTaskIntent);
break; break;
case BROADCAST_EVENT_REFRESH: case BROADCAST_EVENT_REFRESH:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
@ -97,11 +92,9 @@ public class TasksWidget extends InjectingAppWidgetProvider {
} }
private RemoteViews createScrollableWidget(Context context, int id) { private RemoteViews createScrollableWidget(Context context, int id) {
Filter filter = getFilter(context, id); String filterId = preferences.getStringValue(WidgetConfigActivity.PREF_WIDGET_ID + id);
Intent rvIntent = new Intent(context, ScrollableWidgetUpdateService.class); Intent rvIntent = new Intent(context, ScrollableWidgetUpdateService.class);
Bundle filterBundle = new Bundle(com.todoroo.astrid.api.Filter.class.getClassLoader()); rvIntent.putExtra(ScrollableWidgetUpdateService.FILTER_ID, filterId);
filterBundle.putParcelable(ScrollableWidgetUpdateService.FILTER, filter);
rvIntent.putExtra(ScrollableWidgetUpdateService.FILTER, filterBundle);
rvIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id); rvIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
rvIntent.setData(Uri.parse(rvIntent.toUri(Intent.URI_INTENT_SCHEME))); rvIntent.setData(Uri.parse(rvIntent.toUri(Intent.URI_INTENT_SCHEME)));
boolean darkTheme = preferences.useDarkWidgetTheme(id); boolean darkTheme = preferences.useDarkWidgetTheme(id);
@ -114,11 +107,12 @@ public class TasksWidget extends InjectingAppWidgetProvider {
remoteViews.setInt(R.id.list_view, "setBackgroundColor", android.R.color.transparent); remoteViews.setInt(R.id.list_view, "setBackgroundColor", android.R.color.transparent);
remoteViews.setInt(R.id.empty_view, "setBackgroundColor", android.R.color.transparent); remoteViews.setInt(R.id.empty_view, "setBackgroundColor", android.R.color.transparent);
} }
Filter filter = defaultFilterProvider.getFilterFromPreference(filterId);
remoteViews.setTextViewText(R.id.widget_title, filter.listingTitle); remoteViews.setTextViewText(R.id.widget_title, filter.listingTitle);
remoteViews.setRemoteAdapter(R.id.list_view, rvIntent); remoteViews.setRemoteAdapter(R.id.list_view, rvIntent);
remoteViews.setEmptyView(R.id.list_view, R.id.empty_view); remoteViews.setEmptyView(R.id.list_view, R.id.empty_view);
remoteViews.setOnClickPendingIntent(R.id.widget_title, getOpenListIntent(context, filter, id)); remoteViews.setOnClickPendingIntent(R.id.widget_title, getOpenListIntent(context, filterId, id));
remoteViews.setOnClickPendingIntent(R.id.widget_button, getNewTaskIntent(context, filter, id)); remoteViews.setOnClickPendingIntent(R.id.widget_button, getNewTaskIntent(context, filterId, id));
remoteViews.setPendingIntentTemplate(R.id.list_view, getPendingIntentTemplate(context)); remoteViews.setPendingIntentTemplate(R.id.list_view, getPendingIntentTemplate(context));
return remoteViews; return remoteViews;
} }
@ -128,74 +122,15 @@ public class TasksWidget extends InjectingAppWidgetProvider {
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
} }
private PendingIntent getOpenListIntent(Context context, Filter filter, int widgetId) { private PendingIntent getOpenListIntent(Context context, String filterId, int widgetId) {
Intent intent = TaskIntents.getTaskListIntent(context, filter); Intent intent = TaskIntents.getTaskListByIdIntent(context, filterId);
intent.setFlags(flags); intent.setFlags(flags);
return PendingIntent.getActivity(context, widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getActivity(context, widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
} }
private PendingIntent getNewTaskIntent(Context context, Filter filter, int widgetId) { private PendingIntent getNewTaskIntent(Context context, String filterId, int widgetId) {
Intent intent = TaskIntents.getNewTaskIntent(context, filter); Intent intent = TaskIntents.getNewTaskIntent(context, filterId);
intent.setFlags(flags); intent.setFlags(flags);
return PendingIntent.getActivity(context, -widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getActivity(context, -widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
} }
private Filter getFilter(Context context, int widgetId) {
// base our filter off the inbox filter, replace stuff if we have it
Filter filter = BuiltInFilterExposer.getMyTasksFilter(context.getResources());
String sql = preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId);
if (sql != null) {
sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column
filter.setSqlQuery(sql);
}
String title = preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId);
if (title != null) {
filter.listingTitle = title;
}
String contentValues = preferences.getStringValue(WidgetConfigActivity.PREF_VALUES + widgetId);
if (contentValues != null) {
filter.valuesForNewTasks = AndroidUtilities.contentValuesFromSerializedString(contentValues);
}
String customComponent = preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_INTENT
+ widgetId);
if (customComponent != null) {
ComponentName component = ComponentName.unflattenFromString(customComponent);
filter = new FilterWithCustomIntent(filter.listingTitle, filter.getSqlQuery(), filter.valuesForNewTasks);
((FilterWithCustomIntent) filter).customTaskList = component;
String serializedExtras = preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_EXTRAS
+ widgetId);
((FilterWithCustomIntent) filter).customExtras = AndroidUtilities.bundleFromSerializedString(serializedExtras);
}
// Validate tagData
long id = preferences.getLong(WidgetConfigActivity.PREF_TAG_ID + widgetId, 0);
TagData tagData;
if (id > 0) {
tagData = tagDataDao.fetch(id, TagData.ID, TagData.NAME, TagData.UUID);
if (tagData != null && !tagData.getName().equals(filter.listingTitle)) { // Tag has been renamed; rebuild filter
filter = TagFilterExposer.filterFromTagData(context, tagData);
preferences.setString(WidgetConfigActivity.PREF_SQL + widgetId, filter.getSqlQuery());
preferences.setString(WidgetConfigActivity.PREF_TITLE + widgetId, filter.listingTitle);
ContentValues newTaskValues = filter.valuesForNewTasks;
String contentValuesString = null;
if (newTaskValues != null) {
contentValuesString = AndroidUtilities.contentValuesToSerializedString(newTaskValues);
}
preferences.setString(WidgetConfigActivity.PREF_VALUES + widgetId, contentValuesString);
String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent) filter).customExtras);
if (flattenedExtras != null) {
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId,
flattenedExtras);
}
}
} else {
tagData = tagDataDao.getTagByName(filter.listingTitle, TagData.ID);
if (tagData != null) {
preferences.setLong(WidgetConfigActivity.PREF_TAG_ID + widgetId, tagData.getId());
}
}
return filter;
}
} }

@ -6,7 +6,6 @@
package com.todoroo.astrid.widget; package com.todoroo.astrid.widget;
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManager;
import android.content.ContentValues;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
@ -15,11 +14,9 @@ import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.ListView; import android.widget.ListView;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.adapter.FilterAdapter; import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import org.tasks.R; import org.tasks.R;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
@ -27,17 +24,13 @@ import org.tasks.filters.FilterProvider;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingListActivity; import org.tasks.injection.InjectingListActivity;
import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.DefaultFilterProvider;
import javax.inject.Inject; import javax.inject.Inject;
public class WidgetConfigActivity extends InjectingListActivity { public class WidgetConfigActivity extends InjectingListActivity {
public static final String PREF_TITLE = "widget-title-"; public static final String PREF_WIDGET_ID = "widget-id-";
public static final String PREF_SQL = "widget-sql-";
public static final String PREF_VALUES = "widget-values-";
public static final String PREF_CUSTOM_INTENT = "widget-intent-";
public static final String PREF_CUSTOM_EXTRAS = "widget-extras-";
public static final String PREF_TAG_ID = "widget-tag-id-";
public static final String PREF_SHOW_DUE_DATE = "widget-show-due-date-"; public static final String PREF_SHOW_DUE_DATE = "widget-show-due-date-";
public static final String PREF_HIDE_CHECKBOXES = "widget-hide-checkboxes-"; public static final String PREF_HIDE_CHECKBOXES = "widget-hide-checkboxes-";
public static final String PREF_DARK_THEME = "widget-dark-theme-"; public static final String PREF_DARK_THEME = "widget-dark-theme-";
@ -51,6 +44,7 @@ public class WidgetConfigActivity extends InjectingListActivity {
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject ActivityPreferences preferences; @Inject ActivityPreferences preferences;
@Inject FilterProvider filterProvider; @Inject FilterProvider filterProvider;
@Inject DefaultFilterProvider defaultFilterProvider;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@ -132,37 +126,14 @@ public class WidgetConfigActivity extends InjectingListActivity {
DisplayMetrics metrics = new DisplayMetrics(); DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics); getWindowManager().getDefaultDisplay().getMetrics(metrics);
String sql = null; if (filterListItem != null && filterListItem instanceof Filter) {
String contentValuesString = null; Filter filter = (Filter) filterListItem;
String title = null; preferences.setString(WidgetConfigActivity.PREF_WIDGET_ID + mAppWidgetId, defaultFilterProvider.getFilterPreferenceValue(filter));
preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + mAppWidgetId, showDueDate);
if(filterListItem != null && filterListItem instanceof Filter) { preferences.setBoolean(WidgetConfigActivity.PREF_DARK_THEME + mAppWidgetId, darkTheme);
sql = ((Filter)filterListItem).getSqlQuery(); preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_CHECKBOXES + mAppWidgetId, hideCheckboxes);
ContentValues values = ((Filter)filterListItem).valuesForNewTasks; preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_HEADER + mAppWidgetId, hideHeader);
if(values != null) { preferences.setBoolean(WidgetConfigActivity.PREF_WIDGET_TRANSPARENT + mAppWidgetId, transparent);
contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);
}
title = ((Filter)filterListItem).listingTitle;
}
preferences.setString(WidgetConfigActivity.PREF_TITLE + mAppWidgetId, title);
preferences.setString(WidgetConfigActivity.PREF_SQL + mAppWidgetId, sql);
preferences.setString(WidgetConfigActivity.PREF_VALUES + mAppWidgetId, contentValuesString);
preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + mAppWidgetId, showDueDate);
preferences.setBoolean(WidgetConfigActivity.PREF_DARK_THEME + mAppWidgetId, darkTheme);
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_CHECKBOXES + mAppWidgetId, hideCheckboxes);
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_HEADER + mAppWidgetId, hideHeader);
preferences.setBoolean(WidgetConfigActivity.PREF_WIDGET_TRANSPARENT + mAppWidgetId, transparent);
if(filterListItem instanceof FilterWithCustomIntent) {
String flattenedName = ((FilterWithCustomIntent)filterListItem).customTaskList.flattenToString();
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_INTENT + mAppWidgetId,
flattenedName);
String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent)filterListItem).customExtras);
if (flattenedExtras != null) {
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + mAppWidgetId,
flattenedExtras);
}
} }
} }

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.support.v4.app.TaskStackBuilder; import android.support.v4.app.TaskStackBuilder;
import com.google.common.base.Strings;
import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
@ -14,8 +15,14 @@ public class TaskIntents {
return TaskStackBuilder.create(context).addNextIntent(getEditTaskIntent(context, filter, taskId)); return TaskStackBuilder.create(context).addNextIntent(getEditTaskIntent(context, filter, taskId));
} }
public static Intent getNewTaskIntent(Context context, Filter filter) { public static Intent getNewTaskIntent(Context context, String filterId) {
return getEditTaskIntent(context, filter, 0L); return getEditTaskIntent(context, filterId, 0L);
}
public static Intent getEditTaskIntent(Context context, String filterId, long taskId) {
Intent taskListIntent = getTaskListByIdIntent(context, filterId);
taskListIntent.putExtra(TaskListActivity.OPEN_TASK, taskId);
return taskListIntent;
} }
public static Intent getEditTaskIntent(Context context, final Filter filter, final long taskId) { public static Intent getEditTaskIntent(Context context, final Filter filter, final long taskId) {
@ -31,4 +38,12 @@ public class TaskIntents {
} }
return intent; return intent;
} }
public static Intent getTaskListByIdIntent(Context context, final String filterId) {
Intent intent = new Intent(context, TaskListActivity.class);
if (!Strings.isNullOrEmpty(filterId)) {
intent.putExtra(TaskListActivity.LOAD_FILTER, filterId);
}
return intent;
}
} }

@ -1,5 +1,6 @@
package org.tasks.widget; package org.tasks.widget;
import android.appwidget.AppWidgetManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
@ -23,6 +24,7 @@ import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.ui.WidgetCheckBoxes; import org.tasks.ui.WidgetCheckBoxes;
@ -31,13 +33,14 @@ import timber.log.Timber;
public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private final WidgetCheckBoxes checkBoxes; private final WidgetCheckBoxes checkBoxes;
private final int widgetId;
private final Database database; private final Database database;
private final TaskService taskService; private final TaskService taskService;
private final DefaultFilterProvider defaultFilterProvider;
private final SubtasksHelper subtasksHelper; private final SubtasksHelper subtasksHelper;
private final Preferences preferences; private final Preferences preferences;
private final Context context; private final Context context;
private final Filter filter; private final String filterId;
private final int widgetId;
private final boolean dark; private final boolean dark;
private final boolean showDueDates; private final boolean showDueDates;
private final boolean hideCheckboxes; private final boolean hideCheckboxes;
@ -48,17 +51,19 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
SubtasksHelper subtasksHelper, SubtasksHelper subtasksHelper,
Preferences preferences, Preferences preferences,
Context context, Context context,
Filter filter, String filterId,
int widgetId, int widgetId,
Database database, Database database,
TaskService taskService) { TaskService taskService,
DefaultFilterProvider defaultFilterProvider) {
this.subtasksHelper = subtasksHelper; this.subtasksHelper = subtasksHelper;
this.preferences = preferences; this.preferences = preferences;
this.context = context; this.context = context;
this.filter = filter; this.filterId = filterId;
this.widgetId = widgetId; this.widgetId = widgetId;
this.database = database; this.database = database;
this.taskService = taskService; this.taskService = taskService;
this.defaultFilterProvider = defaultFilterProvider;
checkBoxes = new WidgetCheckBoxes(context); checkBoxes = new WidgetCheckBoxes(context);
dark = preferences.useDarkWidgetTheme(widgetId); dark = preferences.useDarkWidgetTheme(widgetId);
@ -156,7 +161,7 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
long taskId = task.getId(); long taskId = task.getId();
Intent editIntent = new Intent(TasksWidget.EDIT_TASK); Intent editIntent = new Intent(TasksWidget.EDIT_TASK);
editIntent.putExtra(TasksWidget.EXTRA_FILTER, filter); editIntent.putExtra(TasksWidget.EXTRA_FILTER_ID, filterId);
editIntent.putExtra(TasksWidget.EXTRA_ID, taskId); editIntent.putExtra(TasksWidget.EXTRA_ID, taskId);
row.setOnClickFillInIntent(R.id.widget_row, editIntent); row.setOnClickFillInIntent(R.id.widget_row, editIntent);
@ -195,15 +200,13 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
if(sort == 0) { if(sort == 0) {
sort = SortHelper.SORT_WIDGET; sort = SortHelper.SORT_WIDGET;
} }
Filter filter = defaultFilterProvider.getFilterFromPreference(filterId);
filter.setFilterQueryOverride(null); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews rv = new RemoteViews(context.getPackageName(), dark ? R.layout.scrollable_widget_dark : R.layout.scrollable_widget_light);
String query = SortHelper.adjustQueryForFlagsAndSort(preferences, rv.setTextViewText(R.id.widget_title, filter.listingTitle);
filter.getSqlQuery(), sort).replaceAll("LIMIT \\d+", ""); appWidgetManager.partiallyUpdateAppWidget(widgetId, rv);
String query = SortHelper.adjustQueryForFlagsAndSort(preferences, filter.getSqlQuery(), sort).replaceAll("LIMIT \\d+", "");
String tagName = preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId); return subtasksHelper.applySubtasksToWidgetFilter(filter, query, filter.listingTitle, 0);
return subtasksHelper.applySubtasksToWidgetFilter(filter, query, tagName, 0);
} }
public void formatDueDate(RemoteViews row, Task task, int textColor) { public void formatDueDate(RemoteViews row, Task task, int textColor) {

@ -4,25 +4,26 @@ import android.appwidget.AppWidgetManager;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
import org.tasks.injection.InjectingRemoteViewsService; import org.tasks.injection.InjectingRemoteViewsService;
import org.tasks.injection.ServiceComponent; import org.tasks.injection.ServiceComponent;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import javax.inject.Inject; import javax.inject.Inject;
public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService { public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService {
public static final String FILTER = "org.tasks.widget.FILTER"; public static final String FILTER_ID = "org.tasks.widget.FILTER_ID";
@Inject Database database; @Inject Database database;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject SubtasksHelper subtasksHelper; @Inject SubtasksHelper subtasksHelper;
@Inject DefaultFilterProvider defaultFilterProvider;
@Override @Override
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
@ -42,11 +43,10 @@ public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService {
return null; return null;
} }
Bundle bundle = extras.getBundle(FILTER); String filterId = (String) extras.get(FILTER_ID);
Filter filter = (Filter) bundle.get(FILTER);
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
return new ScrollableViewsFactory(subtasksHelper, preferences, this, filter, return new ScrollableViewsFactory(subtasksHelper, preferences, this, filterId,
widgetId, database, taskService); widgetId, database, taskService, defaultFilterProvider);
} }
@Override @Override

Loading…
Cancel
Save