diff --git a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java index 21d821909..06ad02507 100644 --- a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java @@ -21,6 +21,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; import java.util.Map.Entry; import timber.log.Timber; @@ -80,9 +82,9 @@ public class AndroidUtilities { /** * Serializes a content value into a string */ - public static String contentValuesToSerializedString(ContentValues source) { + public static String mapToSerializedString(Map source) { StringBuilder result = new StringBuilder(); - for(Entry entry : source.valueSet()) { + for(Entry entry : source.entrySet()) { addSerialized(result, entry.getKey(), entry.getValue()); } return result.toString(); @@ -109,37 +111,42 @@ public class AndroidUtilities { result.append(SERIALIZATION_SEPARATOR); } - /** - * Turn ContentValues into a string - */ - public static ContentValues contentValuesFromSerializedString(String string) { - if(string == null) { - return new ContentValues(); + public static Map mapFromSerializedString(String string) { + if (string == null) { + return new HashMap<>(); } - ContentValues result = new ContentValues(); + Map result = new HashMap<>(); fromSerialized(string, result, (object, key, type, value) -> { - switch(type) { - case 'i': - object.put(key, Integer.parseInt(value)); - break; - case 'd': - object.put(key, Double.parseDouble(value)); - break; - case 'l': - object.put(key, Long.parseLong(value)); - break; - case 's': - object.put(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR)); - break; - case 'b': - object.put(key, Boolean.parseBoolean(value)); - break; + switch (type) { + case 'i': + object.put(key, Integer.parseInt(value)); + break; + case 'd': + object.put(key, Double.parseDouble(value)); + break; + case 'l': + object.put(key, Long.parseLong(value)); + break; + case 's': + object.put(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR)); + break; + case 'b': + object.put(key, Boolean.parseBoolean(value)); + break; } }); return result; } + public static Map mapFromContentValues(ContentValues contentValues) { + Map map = new HashMap<>(); + for (Map.Entry entry : contentValues.valueSet()) { + map.put(entry.getKey(), entry.getValue()); + } + return map; + } + public interface SerializedPut { void put(T object, String key, char type, String value) throws NumberFormatException; } diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/app/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 628c6c71b..7375c72f9 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -6,7 +6,6 @@ package com.todoroo.astrid.activity; import android.annotation.SuppressLint; -import android.content.ContentValues; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; @@ -63,6 +62,8 @@ import org.tasks.ui.EmptyTaskEditFragment; import org.tasks.ui.NavigationDrawerFragment; import org.tasks.ui.PriorityControlSet; +import java.util.Map; + import javax.inject.Inject; import butterknife.BindView; @@ -424,11 +425,11 @@ public class TaskListActivity extends InjectingAppCompatActivity implements if (model == null) { Intent intent = getIntent(); String valuesAsString = intent.getStringExtra(TaskEditFragment.TOKEN_VALUES); - ContentValues values = null; + Map values = null; try { if (valuesAsString != null) { valuesAsString = PermaSql.replacePlaceholders(valuesAsString); - values = AndroidUtilities.contentValuesFromSerializedString(valuesAsString); + values = AndroidUtilities.mapFromSerializedString(valuesAsString); } } catch (Exception e) { // oops, can't serialize diff --git a/app/src/main/java/com/todoroo/astrid/api/CustomFilter.java b/app/src/main/java/com/todoroo/astrid/api/CustomFilter.java index 7538f2828..7a66bf843 100644 --- a/app/src/main/java/com/todoroo/astrid/api/CustomFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/CustomFilter.java @@ -1,12 +1,13 @@ package com.todoroo.astrid.api; -import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.data.StoreObject; +import java.util.Map; + public class CustomFilter extends Filter { private long id; @@ -14,8 +15,8 @@ public class CustomFilter extends Filter { } - public CustomFilter(String listingTitle, String sql, ContentValues contentValues, long id) { - super(listingTitle, sql, contentValues); + public CustomFilter(String listingTitle, String sql, Map values, long id) { + super(listingTitle, sql, values); this.id = id; } @@ -25,7 +26,7 @@ public class CustomFilter extends Filter { storeObject.setItem(listingTitle); storeObject.setValue(sqlQuery); if (valuesForNewTasks != null && valuesForNewTasks.size() > 0) { - storeObject.setValue2(AndroidUtilities.contentValuesToSerializedString(valuesForNewTasks)); + storeObject.setValue2(AndroidUtilities.mapToSerializedString(valuesForNewTasks)); } return storeObject; } diff --git a/app/src/main/java/com/todoroo/astrid/api/CustomFilterCriterion.java b/app/src/main/java/com/todoroo/astrid/api/CustomFilterCriterion.java index 699cb7444..aa425269e 100644 --- a/app/src/main/java/com/todoroo/astrid/api/CustomFilterCriterion.java +++ b/app/src/main/java/com/todoroo/astrid/api/CustomFilterCriterion.java @@ -5,11 +5,13 @@ */ package com.todoroo.astrid.api; -import android.content.ContentValues; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; +import java.util.HashMap; +import java.util.Map; + /** * CustomFilterCriteria allow users to build a custom filter by chaining * together criteria @@ -53,7 +55,7 @@ abstract public class CustomFilterCriterion implements Parcelable { * tasks they create should also be tagged 'ABC'. If set to null, no * additional values will be stored for a task. */ - public ContentValues valuesForNewTasks = null; + public final Map valuesForNewTasks = new HashMap<>(); /** * Icon for this criteria. Can be null for no bitmap @@ -74,7 +76,7 @@ abstract public class CustomFilterCriterion implements Parcelable { dest.writeString(identifier); dest.writeString(text); dest.writeString(sql); - dest.writeParcelable(valuesForNewTasks, 0); + dest.writeMap(valuesForNewTasks); dest.writeParcelable(icon, 0); dest.writeString(name); } @@ -86,7 +88,7 @@ abstract public class CustomFilterCriterion implements Parcelable { identifier = source.readString(); text = source.readString(); sql = source.readString(); - valuesForNewTasks = source.readParcelable(ContentValues.class.getClassLoader()); + source.readMap(valuesForNewTasks, getClass().getClassLoader()); icon = source.readParcelable(Bitmap.class.getClassLoader()); name = source.readString(); } diff --git a/app/src/main/java/com/todoroo/astrid/api/Filter.java b/app/src/main/java/com/todoroo/astrid/api/Filter.java index 29a848c64..da0ca4b5c 100644 --- a/app/src/main/java/com/todoroo/astrid/api/Filter.java +++ b/app/src/main/java/com/todoroo/astrid/api/Filter.java @@ -5,12 +5,15 @@ */ package com.todoroo.astrid.api; -import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; import com.todoroo.andlib.sql.QueryTemplate; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + /** * A FilterListFilter allows users to display tasks that have * something in common. @@ -24,14 +27,6 @@ import com.todoroo.andlib.sql.QueryTemplate; */ public class Filter extends FilterListItem { - // --- constants - - /** Constant for valuesForNewTasks to indicate the value should be replaced - * with the current time as long */ - public static final long VALUE_NOW = Long.MIN_VALUE + 1; - - // --- instance variables - /** * {@link PermaSql} query for this filter. The query will be appended to the select * statement after "SELECT fields FROM table %s". It is @@ -61,10 +56,10 @@ public class Filter extends FilterListItem { * tasks they create should also be tagged 'ABC'. If set to null, no * additional values will be stored for a task. Can use {@link PermaSql} */ - public ContentValues valuesForNewTasks = null; + final public Map valuesForNewTasks = new HashMap<>(); public Filter(String listingTitle, QueryTemplate sqlQuery) { - this(listingTitle, sqlQuery, null); + this(listingTitle, sqlQuery, Collections.emptyMap()); } /** @@ -74,7 +69,7 @@ public class Filter extends FilterListItem { * @param sqlQuery * SQL query for this list (see {@link #sqlQuery} for examples). */ - public Filter(String listingTitle, QueryTemplate sqlQuery, ContentValues valuesForNewTasks) { + public Filter(String listingTitle, QueryTemplate sqlQuery, Map valuesForNewTasks) { this(listingTitle, sqlQuery == null ? null : sqlQuery.toString(), valuesForNewTasks); } @@ -86,11 +81,11 @@ public class Filter extends FilterListItem { * @param sqlQuery * SQL query for this list (see {@link #sqlQuery} for examples). */ - public Filter(String listingTitle, String sqlQuery, ContentValues valuesForNewTasks) { + protected Filter(String listingTitle, String sqlQuery, Map valuesForNewTasks) { this.listingTitle = listingTitle; this.sqlQuery = sqlQuery; this.filterOverride = null; - this.valuesForNewTasks = valuesForNewTasks; + this.valuesForNewTasks.putAll(valuesForNewTasks); } public String getSqlQuery() { @@ -165,7 +160,7 @@ public class Filter extends FilterListItem { super.writeToParcel(dest, flags); dest.writeString(""); // old title dest.writeString(sqlQuery); - dest.writeParcelable(valuesForNewTasks, 0); + dest.writeMap(valuesForNewTasks); } @Override @@ -173,7 +168,7 @@ public class Filter extends FilterListItem { super.readFromParcel(source); source.readString(); // old title sqlQuery = source.readString(); - valuesForNewTasks = source.readParcelable(ContentValues.class.getClassLoader()); + source.readMap(valuesForNewTasks, getClass().getClassLoader()); } /** diff --git a/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java b/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java index df5752f2b..a0111a817 100644 --- a/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java @@ -19,6 +19,10 @@ import com.todoroo.astrid.gtasks.GtasksMetadata; import org.tasks.R; +import java.util.Map; + +import static com.todoroo.andlib.utility.AndroidUtilities.mapFromContentValues; + public class GtasksFilter extends Filter { private static final int CLOUD = R.drawable.ic_cloud_black_24dp; @@ -57,9 +61,9 @@ public class GtasksFilter extends Filter { .where(fullCriterion); } - private static ContentValues getValuesForNewTasks(GtasksList list) { - ContentValues values = new ContentValues(); - values.putAll(GtasksMetadata.createEmptyMetadataWithoutList(AbstractModel.NO_ID).getMergedValues()); + private static Map getValuesForNewTasks(GtasksList list) { + ContentValues contentValues = GtasksMetadata.createEmptyMetadataWithoutList(AbstractModel.NO_ID).getMergedValues(); + Map values = mapFromContentValues(contentValues); values.remove(Metadata.TASK.name); values.put(GtasksMetadata.LIST_ID.name, list.getRemoteId()); values.put(GtasksMetadata.ORDER.name, PermaSql.VALUE_NOW); diff --git a/app/src/main/java/com/todoroo/astrid/api/MultipleSelectCriterion.java b/app/src/main/java/com/todoroo/astrid/api/MultipleSelectCriterion.java index 8d80a0252..e3364af9a 100644 --- a/app/src/main/java/com/todoroo/astrid/api/MultipleSelectCriterion.java +++ b/app/src/main/java/com/todoroo/astrid/api/MultipleSelectCriterion.java @@ -10,6 +10,8 @@ import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; +import java.util.Map; + /** * CustomFilterCriteria allow users to build a custom filter by chaining * together criteria @@ -34,12 +36,14 @@ public class MultipleSelectCriterion extends CustomFilterCriterion implements Pa * Create a new CustomFilterCriteria object */ public MultipleSelectCriterion(String identifier, String title, String sql, - ContentValues valuesForNewTasks, String[] entryTitles, - String[] entryValues, Bitmap icon, String name) { + Map valuesForNewTasks, String[] entryTitles, + String[] entryValues, Bitmap icon, String name) { this.identifier = identifier; this.text = title; this.sql = sql; - this.valuesForNewTasks = valuesForNewTasks; + if (valuesForNewTasks != null) { + this.valuesForNewTasks.putAll(valuesForNewTasks); + } this.entryTitles = entryTitles; this.entryValues = entryValues; this.icon = icon; diff --git a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java index fcdbf14cf..92be2f961 100644 --- a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java @@ -1,6 +1,5 @@ package com.todoroo.astrid.api; -import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; @@ -16,6 +15,9 @@ import com.todoroo.astrid.tags.TaskToTagMetadata; import org.tasks.R; +import java.util.HashMap; +import java.util.Map; + public class TagFilter extends Filter { private static final int TAG = R.drawable.ic_label_24dp; @@ -47,12 +49,12 @@ public class TagFilter extends Filter { .where(fullCriterion); } - private static ContentValues getValuesForNewTask(TagData tagData) { - ContentValues contentValues = new ContentValues(); - contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY); - contentValues.put(TaskToTagMetadata.TAG_NAME.name, tagData.getName()); - contentValues.put(TaskToTagMetadata.TAG_UUID.name, tagData.getRemoteId()); - return contentValues; + private static Map getValuesForNewTask(TagData tagData) { + Map values = new HashMap<>(); + values.put(Metadata.KEY.name, TaskToTagMetadata.KEY); + values.put(TaskToTagMetadata.TAG_NAME.name, tagData.getName()); + values.put(TaskToTagMetadata.TAG_UUID.name, tagData.getRemoteId()); + return values; } /** diff --git a/app/src/main/java/com/todoroo/astrid/api/TextInputCriterion.java b/app/src/main/java/com/todoroo/astrid/api/TextInputCriterion.java index c3ee5a27b..1671bd81e 100644 --- a/app/src/main/java/com/todoroo/astrid/api/TextInputCriterion.java +++ b/app/src/main/java/com/todoroo/astrid/api/TextInputCriterion.java @@ -37,7 +37,6 @@ public class TextInputCriterion extends CustomFilterCriterion implements Parcela this.identifier = identifier; this.text = title; this.sql = sql; - this.valuesForNewTasks = null; this.prompt = prompt; this.hint = hint; this.icon = icon; diff --git a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java index 2ad6c6f1d..2ecd2b7df 100644 --- a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java @@ -5,7 +5,6 @@ */ package com.todoroo.astrid.core; -import android.content.ContentValues; import android.content.Context; import android.content.res.Resources; @@ -27,7 +26,9 @@ import org.tasks.injection.ForApplication; import org.tasks.preferences.Preferences; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.inject.Inject; @@ -88,7 +89,7 @@ public final class BuiltInFilterExposer { public static Filter getTodayFilter(Resources r) { String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today)); - ContentValues todayValues = new ContentValues(); + Map todayValues = new HashMap<>(); todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON); return new Filter(todayTitle, new QueryTemplate().where( diff --git a/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java b/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java index 42bd3e671..943815715 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java +++ b/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java @@ -5,7 +5,6 @@ */ package com.todoroo.astrid.core; -import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -45,7 +44,9 @@ import org.tasks.locale.Locale; import org.tasks.ui.MenuColorizer; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; @@ -231,7 +232,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple } StringBuilder sql = new StringBuilder(" WHERE "); - ContentValues values = new ContentValues(); + Map values = new HashMap<>(); for(int i = 0; i < adapter.getCount(); i++) { CriterionInstance instance = adapter.getItem(i); String value = instance.getValueFromCriterion(); @@ -263,7 +264,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple if(instance.criterion.valuesForNewTasks != null && instance.type == CriterionInstance.TYPE_INTERSECT) { - for(Entry entry : instance.criterion.valuesForNewTasks.valueSet()) { + for(Entry entry : instance.criterion.valuesForNewTasks.entrySet()) { values.put(entry.getKey().replace("?", value), entry.getValue().toString().replace("?", value)); } diff --git a/app/src/main/java/com/todoroo/astrid/core/CustomFilterExposer.java b/app/src/main/java/com/todoroo/astrid/core/CustomFilterExposer.java index 9e82ab211..240a4993a 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CustomFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/core/CustomFilterExposer.java @@ -5,7 +5,6 @@ */ package com.todoroo.astrid.core; -import android.content.ContentValues; import android.text.TextUtils; import com.todoroo.andlib.utility.AndroidUtilities; @@ -17,6 +16,7 @@ import com.todoroo.astrid.data.StoreObject; import org.tasks.R; import java.util.List; +import java.util.Map; import javax.inject.Inject; @@ -49,16 +49,16 @@ public final class CustomFilterExposer { String title = savedFilter.getItem(); String sql = savedFilter.getValue(); - String values = savedFilter.getValue2(); + String valuesString = savedFilter.getValue2(); - ContentValues contentValues = null; - if(!TextUtils.isEmpty(values)) { - contentValues = AndroidUtilities.contentValuesFromSerializedString(values); + Map values = null; + if(!TextUtils.isEmpty(valuesString)) { + values = AndroidUtilities.mapFromSerializedString(valuesString); } sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column - CustomFilter customFilter = new CustomFilter(title, sql, contentValues, savedFilter.getId()); + CustomFilter customFilter = new CustomFilter(title, sql, values, savedFilter.getId()); customFilter.icon = filter; return customFilter; } diff --git a/app/src/main/java/com/todoroo/astrid/core/SavedFilter.java b/app/src/main/java/com/todoroo/astrid/core/SavedFilter.java index 26fd78968..146ae9fec 100644 --- a/app/src/main/java/com/todoroo/astrid/core/SavedFilter.java +++ b/app/src/main/java/com/todoroo/astrid/core/SavedFilter.java @@ -5,13 +5,13 @@ */ package com.todoroo.astrid.core; -import android.content.ContentValues; - import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.core.CustomFilterActivity.CriterionInstance; import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.data.StoreObject; +import java.util.Map; + /** * {@link StoreObject} entries for a saved custom filter * @@ -26,7 +26,7 @@ public class SavedFilter { * Save a filter */ public static StoreObject persist(StoreObjectDao dao, CustomFilterAdapter adapter, String title, - String sql, ContentValues values) { + String sql, Map values) { if(title == null || title.length() == 0) { return null; @@ -46,7 +46,7 @@ public class SavedFilter { if(values == null) { storeObject.setValue2(""); //$NON-NLS-1$ } else { - storeObject.setValue2(AndroidUtilities.contentValuesToSerializedString(values)); + storeObject.setValue2(AndroidUtilities.mapToSerializedString(values)); } String filters = serializeFilters(adapter); diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java index 2c3e26141..9493eab93 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java @@ -73,11 +73,11 @@ public class TaskCreator { * Create task from the given content values, saving it. This version * doesn't need to start with a base task model. */ - public Task createWithValues(ContentValues values, String title) { + public Task createWithValues(Map values, String title) { return createWithValues(new Task(), values, title); } - Task createWithValues(Task task, ContentValues values, String title) { + Task createWithValues(Task task, Map values, String title) { if (title != null) { task.setTitle(title.trim()); } @@ -93,7 +93,7 @@ public class TaskCreator { if (values != null && values.size() > 0) { ContentValues forTask = new ContentValues(); forMetadata = new ContentValues(); - outer: for (Map.Entry item : values.valueSet()) { + outer: for (Map.Entry item : values.entrySet()) { String key = item.getKey(); Object value = item.getValue(); if (value instanceof String) { diff --git a/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java b/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java index 3a827da43..e69ee029b 100644 --- a/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java +++ b/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java @@ -53,7 +53,7 @@ public class FilterSelectionActivity extends InjectingAppCompatActivity { data.putExtra(EXTRA_FILTER_NAME, selectedFilter.listingTitle); data.putExtra(EXTRA_FILTER_SQL, selectedFilter.getSqlQuery()); if (selectedFilter.valuesForNewTasks != null) { - data.putExtra(EXTRA_FILTER_VALUES, AndroidUtilities.contentValuesToSerializedString(selectedFilter.valuesForNewTasks)); + data.putExtra(EXTRA_FILTER_VALUES, AndroidUtilities.mapToSerializedString(selectedFilter.valuesForNewTasks)); } setResult(RESULT_OK, data); dialog.dismiss(); diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java index db50cc332..3eaad5385 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java @@ -28,13 +28,16 @@ import org.tasks.R; import org.tasks.gtasks.SyncAdapterHelper; import org.tasks.injection.ForApplication; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.inject.Inject; import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newLinkedHashSet; +import static com.todoroo.andlib.utility.AndroidUtilities.mapFromContentValues; public class FilterCriteriaProvider { @@ -84,7 +87,7 @@ public class FilterCriteriaProvider { // TODO: adding to hash set because duplicate tag name bug hasn't been fixed yet List tags = newArrayList(newLinkedHashSet(transform(tagService.getTagList(), TagData::getName))); String[] tagNames = tags.toArray(new String[tags.size()]); - ContentValues values = new ContentValues(); + Map values = new HashMap<>(); values.put(Metadata.KEY.name, TaskToTagMetadata.KEY); values.put(TaskToTagMetadata.TAG_NAME.name, "?"); return new MultipleSelectCriterion( @@ -124,7 +127,7 @@ public class FilterCriteriaProvider { PermaSql.VALUE_EOD_NEXT_WEEK, PermaSql.VALUE_EOD_NEXT_MONTH, }; - ContentValues values = new ContentValues(); + Map values = new HashMap<>(); values.put(Task.DUE_DATE.name, "?"); return new MultipleSelectCriterion( IDENTIFIER_DUEDATE, @@ -151,7 +154,7 @@ public class FilterCriteriaProvider { String[] entries = new String[] { "!!!", "!!", "!", "o" }; - ContentValues values = new ContentValues(); + Map values = new HashMap<>(); values.put(Task.IMPORTANCE.name, "?"); return new MultipleSelectCriterion( IDENTIFIER_IMPORTANCE, @@ -165,8 +168,6 @@ public class FilterCriteriaProvider { } private CustomFilterCriterion getTaskTitleContainsFilter() { - ContentValues values = new ContentValues(); - values.put(Task.TITLE.name, "?"); return new TextInputCriterion( IDENTIFIER_TITLE, r.getString(R.string.CFC_title_contains_text), @@ -188,8 +189,8 @@ public class FilterCriteriaProvider { listIds[i] = lists.get(i).getRemoteId(); } - ContentValues values = new ContentValues(); - values.putAll(gtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues()); + ContentValues contentValues = gtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues(); + Map values = mapFromContentValues(contentValues); values.remove(Metadata.TASK.name); values.put(GtasksMetadata.LIST_ID.name, "?");