Default list preference changes

pull/384/head
Alex Baker 8 years ago
parent d48f11d70c
commit 871513ccee

@ -16,4 +16,8 @@ public class GtasksFilterExposer {
public List<Filter> getFilters() { public List<Filter> getFilters() {
return Collections.emptyList(); return Collections.emptyList();
} }
public Filter getFilter(long aLong) {
return null;
}
} }

@ -3,4 +3,5 @@ package com.todoroo.astrid.gtasks;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
public class GtasksListFragment extends TaskListFragment { public class GtasksListFragment extends TaskListFragment {
public static final String TOKEN_STORE_ID = "storeId";
} }

@ -42,6 +42,8 @@ import static java.util.Collections.emptyList;
*/ */
public class GtasksFilterExposer { public class GtasksFilterExposer {
private static final int CLOUD = R.drawable.ic_cloud_queue_24dp;
private final GtasksListService gtasksListService; private final GtasksListService gtasksListService;
private final GtasksPreferenceService gtasksPreferenceService; private final GtasksPreferenceService gtasksPreferenceService;
private final Context context; private final Context context;
@ -62,18 +64,24 @@ public class GtasksFilterExposer {
return emptyList(); return emptyList();
} }
int cloud = R.drawable.ic_cloud_queue_24dp;
List<Filter> listFilters = newArrayList(); List<Filter> listFilters = newArrayList();
for (GtasksList list : gtasksListService.getLists()) { for (GtasksList list : gtasksListService.getLists()) {
Filter filter = filterFromList(gtasksMetadata, context, list); listFilters.add(filterFromList(list));
filter.icon = cloud;
listFilters.add(filter);
} }
return listFilters; return listFilters;
} }
public static Filter filterFromList(GtasksMetadata gtasksMetadata, Context context, GtasksList list) { public Filter getFilter(long id) {
if (gtasksPreferenceService.isLoggedIn()) {
GtasksList list = gtasksListService.getList(id);
if (list != null) {
return filterFromList(list);
}
}
return null;
}
private Filter filterFromList(GtasksList list) {
String listName = list.getName(); String listName = list.getName();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.putAll(gtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues()); values.putAll(gtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues());
@ -92,7 +100,7 @@ public class GtasksFilterExposer {
Bundle extras = new Bundle(); Bundle extras = new Bundle();
extras.putLong(GtasksListFragment.TOKEN_STORE_ID, list.getId()); extras.putLong(GtasksListFragment.TOKEN_STORE_ID, list.getId());
filter.customExtras = extras; filter.customExtras = extras;
filter.icon = CLOUD;
return filter; return filter;
} }
} }

@ -33,6 +33,10 @@ public class GtasksListService {
return storeObjectDao.getGtasksLists(); return storeObjectDao.getGtasksLists();
} }
public GtasksList getList(long id) {
return storeObjectDao.getGtasksList(id);
}
/** /**
* Reads in remote list information and updates local list objects. * Reads in remote list information and updates local list objects.
* *

@ -92,7 +92,7 @@ public final class BuiltInFilterExposer {
null); null);
} }
private static Filter getTodayFilter(Resources r) { public static Filter getTodayFilter(Resources r) {
String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today)); String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today));
ContentValues todayValues = new ContentValues(); ContentValues todayValues = new ContentValues();
todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON); todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON);
@ -104,7 +104,7 @@ public final class BuiltInFilterExposer {
todayValues); todayValues);
} }
private static Filter getRecentlyModifiedFilter(Resources r) { public static Filter getRecentlyModifiedFilter(Resources r) {
return new Filter(r.getString(R.string.BFE_Recent), return new Filter(r.getString(R.string.BFE_Recent),
new QueryTemplate().where( new QueryTemplate().where(
TaskCriteria.notDeleted()).orderBy( TaskCriteria.notDeleted()).orderBy(
@ -112,7 +112,7 @@ public final class BuiltInFilterExposer {
null); null);
} }
private static Filter getUncategorizedFilter(Resources r) { public static Filter getUncategorizedFilter(Resources r) {
return new Filter(r.getString(R.string.tag_FEx_untagged), return new Filter(r.getString(R.string.tag_FEx_untagged),
new QueryTemplate().where(Criterion.and( new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE) Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE)
@ -122,14 +122,19 @@ public final class BuiltInFilterExposer {
null); null);
} }
/**
* Is this the inbox?
*/
public static boolean isInbox(Context context, Filter filter) { public static boolean isInbox(Context context, Filter filter) {
return (filter != null && filter.equals(getMyTasksFilter(context.getResources()))); return filter != null && filter.equals(getMyTasksFilter(context.getResources()));
} }
public static boolean isTodayFilter(Context context, Filter filter) { public static boolean isTodayFilter(Context context, Filter filter) {
return (filter != null && filter.equals(getTodayFilter(context.getResources()))); return filter != null && filter.equals(getTodayFilter(context.getResources()));
}
public static boolean isUncategorizedFilter(Context context, Filter filter) {
return filter != null && filter.equals(getUncategorizedFilter(context.getResources()));
}
public static boolean isRecentlyModifiedFilter(Context context, Filter filter) {
return filter != null && filter.equals(getRecentlyModifiedFilter(context.getResources()));
} }
} }

@ -5,7 +5,11 @@
*/ */
package com.todoroo.astrid.core; package com.todoroo.astrid.core;
import com.todoroo.andlib.data.Callback; import android.content.ContentValues;
import android.text.TextUtils;
import com.google.common.base.Function;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao;
@ -13,13 +17,17 @@ import com.todoroo.astrid.data.StoreObject;
import org.tasks.R; import org.tasks.R;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform;
public final class CustomFilterExposer { public final class CustomFilterExposer {
private static final int filter = R.drawable.ic_filter_list_24dp;
private final StoreObjectDao storeObjectDao; private final StoreObjectDao storeObjectDao;
@Inject @Inject
@ -28,19 +36,32 @@ public final class CustomFilterExposer {
} }
public List<Filter> getFilters() { public List<Filter> getFilters() {
final List<Filter> list = new ArrayList<>(); return newArrayList(transform(storeObjectDao.getSavedFilters(), new Function<StoreObject, Filter>() {
@Override
public Filter apply(StoreObject input) {
return load(input);
}
}));
}
final int filter = R.drawable.ic_filter_list_24dp; public Filter getFilter(long id) {
return load(storeObjectDao.getSavedFilterById(id));
}
storeObjectDao.getSavedFilters(new Callback<StoreObject>() { private Filter load(StoreObject savedFilter) {
@Override String title = savedFilter.getValue(SavedFilter.NAME);
public void apply(StoreObject savedFilter) { String sql = savedFilter.getValue(SavedFilter.SQL);
CustomFilter f = SavedFilter.load(savedFilter); String values = savedFilter.getValue(SavedFilter.VALUES);
f.icon = filter;
list.add(f); ContentValues contentValues = null;
if(!TextUtils.isEmpty(values)) {
contentValues = AndroidUtilities.contentValuesFromSerializedString(values);
} }
});
return list; sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column
CustomFilter customFilter = new CustomFilter(title, sql, contentValues, savedFilter.getId());
customFilter.icon = filter;
return customFilter;
} }
} }

@ -6,11 +6,9 @@
package com.todoroo.astrid.core; package com.todoroo.astrid.core;
import android.content.ContentValues; import android.content.ContentValues;
import android.text.TextUtils;
import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.core.CustomFilterActivity.CriterionInstance; import com.todoroo.astrid.core.CustomFilterActivity.CriterionInstance;
import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject; import com.todoroo.astrid.data.StoreObject;
@ -110,23 +108,4 @@ public class SavedFilter {
return item.replace(AndroidUtilities.SERIALIZATION_SEPARATOR, return item.replace(AndroidUtilities.SERIALIZATION_SEPARATOR,
AndroidUtilities.SEPARATOR_ESCAPE); AndroidUtilities.SEPARATOR_ESCAPE);
} }
/**
* Read filter from store
*/
public static CustomFilter load(StoreObject savedFilter) {
String title = savedFilter.getValue(NAME);
String sql = savedFilter.getValue(SQL);
String values = savedFilter.getValue(VALUES);
ContentValues contentValues = null;
if(!TextUtils.isEmpty(values)) {
contentValues = AndroidUtilities.contentValuesFromSerializedString(values);
}
sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column
return new CustomFilter(title, sql, contentValues, savedFilter.getId());
}
} }

@ -6,7 +6,6 @@
package com.todoroo.astrid.dao; package com.todoroo.astrid.dao;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.todoroo.andlib.data.Callback;
import com.todoroo.andlib.data.DatabaseDao; import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Order;
@ -34,12 +33,17 @@ public class StoreObjectDao {
dao = new DatabaseDao<>(database, StoreObject.class); dao = new DatabaseDao<>(database, StoreObject.class);
} }
public void getSavedFilters(Callback<StoreObject> callback) { public List<StoreObject> getSavedFilters() {
dao.query(callback, select(StoreObject.PROPERTIES) return dao.toList(select(StoreObject.PROPERTIES)
.where(isSavedFilter) .where(isSavedFilter)
.orderBy(Order.asc(SavedFilter.NAME))); .orderBy(Order.asc(SavedFilter.NAME)));
} }
public StoreObject getSavedFilterById(long id) {
return dao.getFirst(select(StoreObject.PROPERTIES)
.where(and(isSavedFilter, StoreObject.ID.eq(id))));
}
public GtasksList getGtasksList(long id) { public GtasksList getGtasksList(long id) {
StoreObject result = dao.fetch(id, StoreObject.PROPERTIES); StoreObject result = dao.fetch(id, StoreObject.PROPERTIES);
if (!result.getType().equals(GtasksList.TYPE)) { if (!result.getType().equals(GtasksList.TYPE)) {

@ -57,6 +57,10 @@ public class TagFilterExposer {
return list; return list;
} }
public Filter getFilterByUuid(String uuid) {
return filterFromTagData(context, tagService.tagFromUUID(uuid));
}
/** 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) {
String title = tag.getName(); String title = tag.getName();
@ -101,7 +105,7 @@ public class TagFilterExposer {
return filters; return filters;
} }
protected Filter constructFilter(Context context, TagData tag) { private Filter constructFilter(Context context, TagData tag) {
return filterFromTag(context, tag, TaskCriteria.activeAndVisible()); return filterFromTag(context, tag, TaskCriteria.activeAndVisible());
} }

@ -78,7 +78,7 @@ public final class TagService {
return array.toArray(new TagData[array.size()]); return array.toArray(new TagData[array.size()]);
} }
private TagData tagFromUUID(String uuid) { public TagData tagFromUUID(String uuid) {
return tagDataDao.getByUuid(uuid, TagData.PROPERTIES); return tagDataDao.getByUuid(uuid, TagData.PROPERTIES);
} }

@ -5,7 +5,7 @@ import org.tasks.R;
public class Tracking { public class Tracking {
public enum Events { public enum Events {
SET_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.tracking_action_set, R.string.p_default_list_name); SET_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.tracking_action_set, R.string.p_default_list);
public final int category; public final int category;
public final int action; public final int action;

@ -50,7 +50,7 @@ public class AppearancePreferences extends InjectingPreferenceActivity {
return true; return true;
} }
}); });
Preference defaultList = findPreference(getString(R.string.p_default_list_name)); Preference defaultList = findPreference(getString(R.string.p_default_list));
Filter filter = defaultFilterProvider.getDefaultFilter(); Filter filter = defaultFilterProvider.getDefaultFilter();
defaultList.setSummary(filter.listingTitle); defaultList.setSummary(filter.listingTitle);
defaultList.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { defaultList.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@ -87,7 +87,7 @@ public class AppearancePreferences extends InjectingPreferenceActivity {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Filter filter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER); Filter filter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER);
defaultFilterProvider.setDefaultFilter(filter); defaultFilterProvider.setDefaultFilter(filter);
findPreference(getString(R.string.p_default_list_name)).setSummary(filter.listingTitle); findPreference(getString(R.string.p_default_list)).setSummary(filter.listingTitle);
} }
} else { } else {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);

@ -1,14 +1,17 @@
package org.tasks.preferences; package org.tasks.preferences;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.tags.TagFilterExposer;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
@ -20,40 +23,53 @@ import javax.inject.Inject;
import timber.log.Timber; import timber.log.Timber;
import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.isNullOrEmpty;
import static com.todoroo.astrid.core.BuiltInFilterExposer.getMyTasksFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.getRecentlyModifiedFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.getTodayFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.getUncategorizedFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.isRecentlyModifiedFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.isTodayFilter;
import static com.todoroo.astrid.core.BuiltInFilterExposer.isUncategorizedFilter;
public class DefaultFilterProvider { public class DefaultFilterProvider {
private static final int TYPE_FILTER = 0; private static final int TYPE_FILTER = 0;
private static final int TYPE_CUSTOM_FILTER = 1; private static final int TYPE_CUSTOM_FILTER = 1;
private static final int TYPE_FILTER_WITH_CUSTOM_INTENT = 2; private static final int TYPE_TAG = 2;
private static final int TYPE_GOOGLE_TASKS = 3;
private static final int FILTER_MY_TASKS = 0;
private static final int FILTER_TODAY = 1;
private static final int FILTER_UNCATEGORIZED = 2;
private static final int FILTER_RECENTLY_MODIFIED = 3;
private final Context context; private final Context context;
private final Preferences preferences; private final Preferences preferences;
private Tracker tracker; private final Tracker tracker;
private final CustomFilterExposer customFilterExposer;
private final TagFilterExposer tagFilterExposer;
private final GtasksFilterExposer gtasksFilterExposer;
@Inject @Inject
public DefaultFilterProvider(@ForApplication Context context, Preferences preferences, Tracker tracker) { public DefaultFilterProvider(@ForApplication Context context, Preferences preferences,
Tracker tracker, CustomFilterExposer customFilterExposer,
TagFilterExposer tagFilterExposer, GtasksFilterExposer gtasksFilterExposer) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.tracker = tracker; this.tracker = tracker;
this.customFilterExposer = customFilterExposer;
this.tagFilterExposer = tagFilterExposer;
this.gtasksFilterExposer = gtasksFilterExposer;
} }
public Filter getDefaultFilter() { public Filter getDefaultFilter() {
String listName = preferences.getStringValue(R.string.p_default_list_name); String defaultList = preferences.getStringValue(R.string.p_default_list);
if (!isNullOrEmpty(listName)) { if (!isNullOrEmpty(defaultList)) {
try { try {
ContentValues valuesForNewTasks = AndroidUtilities.contentValuesFromSerializedString(preferences.getStringValue(R.string.p_default_list_values)); Filter filter = loadFilterFromPreferences(defaultList);
String sqlQuery = preferences.getStringValue(R.string.p_default_list_sql); if (filter != null) {
switch (preferences.getInt(R.string.p_default_list_type)) { return filter;
case TYPE_FILTER_WITH_CUSTOM_INTENT:
FilterWithCustomIntent filterWithCustomIntent = new FilterWithCustomIntent(listName, sqlQuery, valuesForNewTasks);
filterWithCustomIntent.customExtras = AndroidUtilities.bundleFromSerializedString(preferences.getStringValue(R.string.p_default_list_extras));
filterWithCustomIntent.customTaskList = ComponentName.unflattenFromString(preferences.getStringValue(R.string.p_default_list_class));
return filterWithCustomIntent;
case TYPE_CUSTOM_FILTER:
return new CustomFilter(listName, sqlQuery, valuesForNewTasks, preferences.getLong(R.string.p_default_list_id, 0L));
} }
return new Filter(listName, sqlQuery, valuesForNewTasks);
} catch (Exception e) { } catch (Exception e) {
Timber.e(e, e.getMessage()); Timber.e(e, e.getMessage());
} }
@ -61,28 +77,78 @@ public class DefaultFilterProvider {
return BuiltInFilterExposer.getMyTasksFilter(context.getResources()); return BuiltInFilterExposer.getMyTasksFilter(context.getResources());
} }
private Filter loadFilterFromPreferences(String defaultList) {
String[] split = defaultList.split(":");
switch (Integer.parseInt(split[0])) {
case TYPE_FILTER:
return getBuiltInFilter(Integer.parseInt(split[1]));
case TYPE_CUSTOM_FILTER:
return customFilterExposer.getFilter(Long.parseLong(split[1]));
case TYPE_TAG:
return tagFilterExposer.getFilterByUuid(split[1]);
case TYPE_GOOGLE_TASKS:
return gtasksFilterExposer.getFilter(Long.parseLong(split[1]));
default:
return null;
}
}
public void setDefaultFilter(Filter filter) { public void setDefaultFilter(Filter filter) {
tracker.reportEvent(Tracking.Events.SET_DEFAULT_LIST); tracker.reportEvent(Tracking.Events.SET_DEFAULT_LIST);
preferences.setString(R.string.p_default_list_name, filter.listingTitle); int filterType = getFilterType(filter);
preferences.setString(R.string.p_default_list_sql, filter.getSqlQuery()); switch (filterType) {
preferences.setInt(R.string.p_default_list_type, getFilterType(filter)); case TYPE_FILTER:
preferences.setString(R.string.p_default_list_values, filter.valuesForNewTasks != null setDefaultFilter(filterType, getBuiltInFilterId(filter));
? AndroidUtilities.contentValuesToSerializedString(filter.valuesForNewTasks) break;
: null); case TYPE_CUSTOM_FILTER:
if (filter instanceof FilterWithCustomIntent) { setDefaultFilter(filterType, ((CustomFilter) filter).getId());
preferences.setString(R.string.p_default_list_class, ((FilterWithCustomIntent) filter).customTaskList.flattenToString()); break;
preferences.setString(R.string.p_default_list_extras, AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent) filter).customExtras)); case TYPE_TAG:
} else if (filter instanceof CustomFilter) { setDefaultFilter(filterType, ((FilterWithCustomIntent) filter).customExtras.getString(TagViewFragment.EXTRA_TAG_UUID));
preferences.setLong(R.string.p_default_list_id, ((CustomFilter) filter).getId()); break;
case TYPE_GOOGLE_TASKS:
setDefaultFilter(filterType, ((FilterWithCustomIntent) filter).customExtras.getLong(GtasksListFragment.TOKEN_STORE_ID, 0L));
break;
} }
} }
private <T> void setDefaultFilter(int type, T value) {
preferences.setString(R.string.p_default_list, String.format("%s:%s", type, value));
}
private int getFilterType(Filter filter) { private int getFilterType(Filter filter) {
if (filter instanceof FilterWithCustomIntent) { if (filter instanceof FilterWithCustomIntent) {
return TYPE_FILTER_WITH_CUSTOM_INTENT; return filter.isTagFilter()
? TYPE_TAG
: TYPE_GOOGLE_TASKS;
} else if (filter instanceof CustomFilter) { } else if (filter instanceof CustomFilter) {
return TYPE_CUSTOM_FILTER; return TYPE_CUSTOM_FILTER;
} }
return TYPE_FILTER; return TYPE_FILTER;
} }
private Filter getBuiltInFilter(int id) {
Resources resources = context.getResources();
switch (id) {
case FILTER_TODAY:
return getTodayFilter(resources);
case FILTER_UNCATEGORIZED:
return getUncategorizedFilter(resources);
case FILTER_RECENTLY_MODIFIED:
return getRecentlyModifiedFilter(resources);
}
return getMyTasksFilter(resources);
}
private int getBuiltInFilterId(Filter filter) {
if (isTodayFilter(context, filter)) {
return FILTER_TODAY;
} else if (isUncategorizedFilter(context, filter)) {
return FILTER_UNCATEGORIZED;
} else if (isRecentlyModifiedFilter(context, filter)) {
return FILTER_RECENTLY_MODIFIED;
}
return FILTER_MY_TASKS;
}
} }

@ -280,13 +280,7 @@
<string name="p_collect_statistics">collect_statistics</string> <string name="p_collect_statistics">collect_statistics</string>
<string name="p_back_button_saves_task">back_button_saves_task</string> <string name="p_back_button_saves_task">back_button_saves_task</string>
<string name="p_default_list_name">default_list_name</string> <string name="p_default_list">default_list</string>
<string name="p_default_list_sql">default_list_sql</string>
<string name="p_default_list_values">default_list_values</string>
<string name="p_default_list_type">default_list_type</string>
<string name="p_default_list_id">default_list_id</string>
<string name="p_default_list_class">default_list_class</string>
<string name="p_default_list_extras">default_list_extras</string>
<string name="tracking_category_preferences">Preferences</string> <string name="tracking_category_preferences">Preferences</string>
<string name="tracking_action_set">Set</string> <string name="tracking_action_set">Set</string>

@ -10,7 +10,7 @@
<PreferenceCategory android:title="@string/task_list_options"> <PreferenceCategory android:title="@string/task_list_options">
<com.todoroo.astrid.ui.MultilinePreference <com.todoroo.astrid.ui.MultilinePreference
android:key="@string/p_default_list_name" android:key="@string/p_default_list"
android:title="@string/default_list" /> android:title="@string/default_list" />
<com.todoroo.astrid.ui.MultilineListPreference <com.todoroo.astrid.ui.MultilineListPreference

Loading…
Cancel
Save