From 1a4289116e4c4949ceb42b23a31945410e8b7db7 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 23 Apr 2020 15:15:03 -0500 Subject: [PATCH] Offer new filter templates --- .../astrid/core/BuiltInFilterExposer.java | 26 ---- .../astrid/core/CriterionInstance.java | 6 +- .../activities/FilterSettingsActivity.java | 17 ++- .../java/org/tasks/dialogs/NewFilterDialog.kt | 137 ++++++++++++++++++ .../tasks/filters/FilterCriteriaProvider.java | 6 +- .../org/tasks/filters/FilterProvider.java | 6 +- .../injection/DialogFragmentComponent.java | 3 + .../preferences/DefaultFilterProvider.java | 8 +- .../main/java/org/tasks/themes/CustomIcons.kt | 5 +- .../tasks/ui/NavigationDrawerFragment.java | 6 + app/src/main/res/layout/control_set_tags.xml | 2 +- app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-bg-rBG/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-et/strings.xml | 1 - app/src/main/res/values-eu/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-gl/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-id/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-iw/strings.xml | 1 - app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-lt/strings.xml | 1 - app/src/main/res/values-nb/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sk/strings.xml | 1 - app/src/main/res/values-sl-rSI/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/keys.xml | 1 - app/src/main/res/values/strings.xml | 16 +- .../res/xml/preferences_navigation_drawer.xml | 6 - 48 files changed, 184 insertions(+), 95 deletions(-) create mode 100644 app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt 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 d1b035e86..663c86e1c 100644 --- a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java @@ -9,8 +9,6 @@ package com.todoroo.astrid.core; import android.content.Context; import android.content.res.Resources; import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Field; -import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.api.Filter; @@ -23,7 +21,6 @@ import java.util.List; import java.util.Map; import javax.inject.Inject; import org.tasks.R; -import org.tasks.data.Tag; import org.tasks.filters.RecentlyModifiedFilter; import org.tasks.filters.SortableFilter; import org.tasks.injection.ForApplication; @@ -72,17 +69,6 @@ public final class BuiltInFilterExposer { return new RecentlyModifiedFilter(r.getString(R.string.BFE_Recent)); } - public static Filter getUncategorizedFilter(Resources r) { - return new Filter( - r.getString(R.string.tag_FEx_untagged), - new QueryTemplate() - .where( - Criterion.and( - Criterion.not( - Task.UUID.in(Query.select(Field.field("task_uid")).from(Tag.TABLE))), - TaskCriteria.activeAndVisible()))); - } - public static boolean isInbox(Context context, Filter filter) { return filter != null && filter.equals(getMyTasksFilter(context.getResources())); } @@ -91,10 +77,6 @@ public final class BuiltInFilterExposer { 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())); } @@ -107,9 +89,7 @@ public final class BuiltInFilterExposer { public List getFilters() { Resources r = context.getResources(); - // core filters List filters = new ArrayList<>(); - if (preferences.getBoolean(R.string.p_show_today_filter, true)) { Filter todayFilter = getTodayFilter(r); todayFilter.icon = CustomIcons.getTODAY(); @@ -120,12 +100,6 @@ public final class BuiltInFilterExposer { recentlyModifiedFilter.icon = CustomIcons.getHISTORY(); filters.add(recentlyModifiedFilter); } - if (preferences.getBoolean(R.string.p_show_not_in_list_filter, true)) { - Filter uncategorizedFilter = getUncategorizedFilter(r); - uncategorizedFilter.icon = CustomIcons.getLABEL_OFF(); - filters.add(uncategorizedFilter); - } - // transmit filter list return filters; } } diff --git a/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.java b/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.java index 3fc16543f..013ff1241 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.java +++ b/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.java @@ -208,7 +208,11 @@ public class CriterionInstance { + '}'; } - public String serialize() { + public static String serialize(List criterion) { + return Joiner.on("\n").join(transform(criterion, CriterionInstance::serialize)); + } + + private String serialize() { // criterion|entry|text|type|sql return Joiner.on(AndroidUtilities.SERIALIZATION_SEPARATOR) .join( diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.java b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.java index ae2d24b88..731a24418 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.java @@ -31,7 +31,6 @@ import com.google.android.material.button.MaterialButtonToggleGroup; import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; -import com.google.common.base.Joiner; import com.google.common.base.Strings; import com.todoroo.andlib.data.Property.CountProperty; import com.todoroo.andlib.sql.Query; @@ -65,6 +64,7 @@ import org.tasks.locale.Locale; public class FilterSettingsActivity extends BaseListSettingsActivity { public static final String TOKEN_FILTER = "token_filter"; + public static final String EXTRA_TITLE = "extra_title"; public static final String EXTRA_CRITERIA = "extra_criteria"; @Inject FilterDao filterDao; @Inject Locale locale; @@ -105,6 +105,11 @@ public class FilterSettingsActivity extends BaseListSettingsActivity { filterCriteriaProvider, savedInstanceState.getString(EXTRA_CRITERIA)); } else if (filter != null) { criteria = CriterionInstance.fromString(filterCriteriaProvider, filter.getCriterion()); + } else if (getIntent().hasExtra(EXTRA_CRITERIA)) { + name.setText(getIntent().getStringExtra(EXTRA_TITLE)); + criteria = + CriterionInstance.fromString( + filterCriteriaProvider, getIntent().getStringExtra(EXTRA_CRITERIA)); } else { CriterionInstance instance = new CriterionInstance(); instance.criterion = filterCriteriaProvider.getStartingUniverse(); @@ -249,7 +254,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity { protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putString(EXTRA_CRITERIA, getCriterion()); + outState.putString(EXTRA_CRITERIA, CriterionInstance.serialize(criteria)); } @Override @@ -287,7 +292,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity { f.setColor(selectedColor); f.setIcon(selectedIcon); f.setValues(mapToSerializedString(getValues())); - f.setCriterion(getCriterion()); + f.setCriterion(CriterionInstance.serialize(criteria)); f.setSql(getSql()); if (isNew()) { f.setId(filterDao.insert(f)); @@ -319,7 +324,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity { return !getNewName().equals(filter.listingTitle) || selectedColor != filter.tint || selectedIcon != filter.icon - || !getCriterion().equals(filter.getCriterion()) + || !CriterionInstance.serialize(criteria).equals(filter.getCriterion()) || !getValues().equals(filter.valuesForNewTasks) || !getSql().equals(filter.getOriginalSqlQuery()); } @@ -430,10 +435,6 @@ public class FilterSettingsActivity extends BaseListSettingsActivity { return sql.toString(); } - public String getCriterion() { - return Joiner.on("\n").join(transform(criteria, CriterionInstance::serialize)); - } - public Map getValues() { Map values = new HashMap<>(); for (CriterionInstance instance : criteria) { diff --git a/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt b/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt new file mode 100644 index 000000000..99ee34773 --- /dev/null +++ b/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt @@ -0,0 +1,137 @@ +package org.tasks.dialogs + +import android.app.Dialog +import android.content.Intent +import android.os.Bundle +import com.todoroo.astrid.api.CustomFilterCriterion +import com.todoroo.astrid.core.CriterionInstance +import com.todoroo.astrid.core.CriterionInstance.* +import org.tasks.R +import org.tasks.activities.FilterSettingsActivity +import org.tasks.filters.FilterCriteriaProvider +import org.tasks.injection.DialogFragmentComponent +import org.tasks.injection.InjectingDialogFragment +import org.tasks.ui.NavigationDrawerFragment +import javax.inject.Inject + +class NewFilterDialog : InjectingDialogFragment() { + + @Inject + lateinit var dialogBuilder: DialogBuilder + @Inject + lateinit var provider: FilterCriteriaProvider + + companion object { + fun newFilterDialog(): NewFilterDialog = NewFilterDialog() + + private val options = arrayOf( + R.string.repeat_option_custom, + R.string.filter_overdue, + R.string.filter_today_only, + R.string.tomorrow, + R.string.filter_after_today, + R.string.filter_any_due_date, + R.string.no_due_date, + R.string.filter_no_tags, + R.string.filter_high_priority, + R.string.filter_medium_priority, + R.string.filter_low_priority, + R.string.filter_no_priority, + R.string.filter_eisenhower_box_1, + R.string.filter_eisenhower_box_2, + R.string.filter_eisenhower_box_3, + R.string.filter_eisenhower_box_4 + ) + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return dialogBuilder.newDialog() + .setItems(options.map { getString(it) }) { _, which -> + newCustomFilter(options[which]) + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + + private fun newCustomFilter(title: Int) { + val list = ArrayList() + when (title) { + R.string.filter_overdue -> + list.add(newMultiSelect(provider.dueDateFilter, 1, TYPE_INTERSECT)) + R.string.filter_today_only -> { + list.add(newMultiSelect(provider.dueDateFilter, 1, TYPE_SUBTRACT)) + list.add(newMultiSelect(provider.dueDateFilter, 2, TYPE_INTERSECT)) + } + R.string.tomorrow -> { + list.add(newMultiSelect(provider.dueDateFilter, 2, TYPE_SUBTRACT)) + list.add(newMultiSelect(provider.dueDateFilter, 3, TYPE_INTERSECT)) + } + R.string.filter_after_today -> { + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_SUBTRACT)) + list.add(newMultiSelect(provider.dueDateFilter, 2, TYPE_SUBTRACT)) + } + R.string.no_due_date -> + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_INTERSECT)) + R.string.filter_any_due_date -> { + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_SUBTRACT)) + } + R.string.filter_no_tags -> + list.add(newText(provider.tagNameContainsFilter, "", TYPE_SUBTRACT)) + R.string.filter_high_priority -> + list.add(newMultiSelect(provider.priorityFilter, 0, TYPE_INTERSECT)) + R.string.filter_medium_priority -> { + list.add(newMultiSelect(provider.priorityFilter, 1, TYPE_INTERSECT)) + list.add(newMultiSelect(provider.priorityFilter, 0, TYPE_SUBTRACT)) + } + R.string.filter_low_priority -> { + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_INTERSECT)) + list.add(newMultiSelect(provider.priorityFilter, 1, TYPE_SUBTRACT)) + } + R.string.filter_no_priority -> + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_SUBTRACT)) + R.string.filter_eisenhower_box_1 -> { + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_INTERSECT)) + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_SUBTRACT)) + } + R.string.filter_eisenhower_box_2 -> { + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_INTERSECT)) + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_INTERSECT)) + } + R.string.filter_eisenhower_box_3 -> { + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_SUBTRACT)) + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_SUBTRACT)) + } + R.string.filter_eisenhower_box_4 -> { + list.add(newMultiSelect(provider.priorityFilter, 2, TYPE_SUBTRACT)) + list.add(newMultiSelect(provider.dueDateFilter, 0, TYPE_INTERSECT)) + } + + } + val intent = Intent(requireContext(), FilterSettingsActivity::class.java) + if (list.isNotEmpty()) { + list.add(0, newMultiSelect(provider.startingUniverse, -1, TYPE_UNIVERSE)) + intent.putExtra(FilterSettingsActivity.EXTRA_TITLE, title) + intent.putExtra(FilterSettingsActivity.EXTRA_CRITERIA, serialize(list)) + } + startActivityForResult(intent, NavigationDrawerFragment.REQUEST_NEW_LIST) + dismiss() + } + + private fun newMultiSelect(criteria: CustomFilterCriterion, index: Int, type: Int): CriterionInstance { + val criterion = CriterionInstance() + criterion.criterion = criteria + criterion.selectedIndex = index + criterion.type = type + return criterion + } + + private fun newText(criteria: CustomFilterCriterion, text: String, type: Int): CriterionInstance { + val criterion = CriterionInstance() + criterion.criterion = criteria + criterion.selectedText = text + criterion.type = type + return criterion + } + + override fun inject(component: DialogFragmentComponent) = component.inject(this) +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java index 3bb186079..4447e4b13 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java @@ -137,7 +137,7 @@ public class FilterCriteriaProvider { context.getString(R.string.CFC_tag_name)); } - private CustomFilterCriterion getTagNameContainsFilter() { + public CustomFilterCriterion getTagNameContainsFilter() { return new TextInputCriterion( IDENTIFIER_TAG_CONTAINS, context.getString(R.string.CFC_tag_contains_text), @@ -153,7 +153,7 @@ public class FilterCriteriaProvider { context.getString(R.string.CFC_tag_contains_name)); } - private CustomFilterCriterion getDueDateFilter() { + public CustomFilterCriterion getDueDateFilter() { String[] entryValues = new String[] { "0", @@ -183,7 +183,7 @@ public class FilterCriteriaProvider { r.getString(R.string.CFC_dueBefore_name)); } - private CustomFilterCriterion getPriorityFilter() { + public CustomFilterCriterion getPriorityFilter() { String[] entryValues = new String[] { Integer.toString(Priority.HIGH), diff --git a/app/src/main/java/org/tasks/filters/FilterProvider.java b/app/src/main/java/org/tasks/filters/FilterProvider.java index a996d9e24..b1c6e53c8 100644 --- a/app/src/main/java/org/tasks/filters/FilterProvider.java +++ b/app/src/main/java/org/tasks/filters/FilterProvider.java @@ -33,7 +33,6 @@ import javax.inject.Inject; import org.tasks.BuildConfig; import org.tasks.Function; import org.tasks.R; -import org.tasks.activities.FilterSettingsActivity; import org.tasks.activities.GoogleTaskListSettingsActivity; import org.tasks.activities.TagSettingsActivity; import org.tasks.billing.Inventory; @@ -138,10 +137,9 @@ public class FilterProvider { if (navigationDrawer && !preferences.getBoolean(R.string.p_collapse_filters, false)) { items.add( new NavigationDrawerAction( - context.getString(R.string.FLA_new_filter), + context.getString(R.string.add_filter), R.drawable.ic_outline_add_24px, - new Intent(context, FilterSettingsActivity.class), - NavigationDrawerFragment.REQUEST_NEW_LIST)); + NavigationDrawerFragment.REQUEST_NEW_FILTER)); } } diff --git a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java index a02aaab36..2e6cb29ea 100644 --- a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java +++ b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java @@ -11,6 +11,7 @@ import org.tasks.dialogs.ExportTasksDialog; import org.tasks.dialogs.GeofenceDialog; import org.tasks.dialogs.IconPickerDialog; import org.tasks.dialogs.ImportTasksDialog; +import org.tasks.dialogs.NewFilterDialog; import org.tasks.dialogs.RecordAudioDialog; import org.tasks.dialogs.SortDialog; import org.tasks.dialogs.ThemePickerDialog; @@ -58,4 +59,6 @@ public interface DialogFragmentComponent { void inject(ColorPalettePicker colorPalettePicker); void inject(DateTimePicker dateTimePicker); + + void inject(NewFilterDialog newFilterDialog); } diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.java b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.java index fd5bcb5be..64f6dd09a 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.java +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.java @@ -4,10 +4,8 @@ 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; import android.content.Context; import android.content.res.Resources; @@ -203,10 +201,10 @@ public class DefaultFilterProvider { switch (id) { case FILTER_TODAY: return getTodayFilter(resources); - case FILTER_UNCATEGORIZED: - return getUncategorizedFilter(resources); case FILTER_RECENTLY_MODIFIED: return getRecentlyModifiedFilter(resources); + case FILTER_UNCATEGORIZED: + break; } return getMyTasksFilter(resources); } @@ -214,8 +212,6 @@ public class DefaultFilterProvider { 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; } diff --git a/app/src/main/java/org/tasks/themes/CustomIcons.kt b/app/src/main/java/org/tasks/themes/CustomIcons.kt index 066e89ab8..d459f2045 100644 --- a/app/src/main/java/org/tasks/themes/CustomIcons.kt +++ b/app/src/main/java/org/tasks/themes/CustomIcons.kt @@ -16,9 +16,6 @@ object CustomIcons { @kotlin.jvm.JvmStatic val ALL_INBOX = 4 - @kotlin.jvm.JvmStatic - val LABEL_OFF = 5 - @kotlin.jvm.JvmStatic val HISTORY = 6 @@ -34,7 +31,7 @@ object CustomIcons { FILTER to R.drawable.ic_outline_filter_list_24px, CLOUD to R.drawable.ic_outline_cloud_24px, ALL_INBOX to R.drawable.ic_outline_all_inbox_24px, - LABEL_OFF to R.drawable.ic_outline_label_off_24px, + 5 to R.drawable.ic_outline_label_off_24px, HISTORY to R.drawable.ic_outline_history_24px, TODAY to R.drawable.ic_outline_today_24px, 1000 to R.drawable.ic_outline_flag_24px, diff --git a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java index 7f990fca3..1479e2468 100644 --- a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java +++ b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java @@ -38,6 +38,7 @@ import javax.inject.Inject; import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.billing.PurchaseActivity; +import org.tasks.dialogs.NewFilterDialog; import org.tasks.filters.FilterProvider; import org.tasks.filters.NavigationDrawerAction; import org.tasks.injection.FragmentComponent; @@ -52,6 +53,8 @@ public class NavigationDrawerFragment extends InjectingFragment { public static final int REQUEST_PURCHASE = 10102; public static final int REQUEST_DONATE = 10103; public static final int REQUEST_NEW_PLACE = 10104; + public static final int REQUEST_NEW_FILTER = 101015; + private static final String FRAG_TAG_NEW_FILTER = "frag_tag_new_filter"; private final RefreshReceiver refreshReceiver = new RefreshReceiver(); @Inject LocalBroadcastManager localBroadcastManager; @@ -118,6 +121,9 @@ public class NavigationDrawerFragment extends InjectingFragment { startActivity(new Intent(getContext(), PurchaseActivity.class)); } else if (action.requestCode == REQUEST_DONATE) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://tasks.org/donate"))); + } else if (action.requestCode == REQUEST_NEW_FILTER) { + NewFilterDialog.Companion.newFilterDialog() + .show(getParentFragmentManager(), FRAG_TAG_NEW_FILTER); } else { getActivity().startActivityForResult(action.intent, action.requestCode); } diff --git a/app/src/main/res/layout/control_set_tags.xml b/app/src/main/res/layout/control_set_tags.xml index ed7d6082f..40d4ae108 100644 --- a/app/src/main/res/layout/control_set_tags.xml +++ b/app/src/main/res/layout/control_set_tags.xml @@ -15,7 +15,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="start" - android:hint="@string/tag_FEx_untagged" + android:hint="@string/add_tags" android:textAlignment="viewStart"/> شهري مرتين في الشهر تكرار دائم - غير مصنف مؤقت بدء هذه المهمة: الوقت المنقضي diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index c4aa1865a..a22b1f75f 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -261,7 +261,6 @@ %1$s е насрочено за %2$s Нов таг Създаване на нов списък - Без категория Изтрий %s? Таймерите са Активни за %s! Tasks за отмерване на време diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index c3bb2364d..4d4edb180 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -76,7 +76,6 @@ Notificacions al Atzar Repeteix indefinidament Repeteix fins %s - A cap llista Temporitzadors actius per %s! Tasques sent cronometrades inici d\'aquesta tasca: diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 5c4c86caa..722711bfd 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -155,7 +155,6 @@ Opakovat stále Opakovat až do %s Vytvořit nový štítek - Nezařazené Smazat %s? Aktivní časovače pro %s! Termínované úkoly diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d053f2534..b664d0892 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -257,7 +257,6 @@ %1$s neu geplant für %2$s Neues Schlagwort erstellen Neue Liste erstellen - Nicht kategorisiert %s löschen? Timer ist aktiv für %s! Zeitlich festgelegte Aufgaben diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 70dee4823..0e2b24664 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -140,7 +140,6 @@ διμηνιαία Επανάληψη επ\'αορίστου Επανάληψη μέχρι %s - Μη κατηγοριοποιημένο Χρονοδιακόπτες ενεργοί για %s! Καθήκοντα με χρονικό όριο Χρονοδιακόπτης diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e5952c21d..9f20f98ee 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -262,7 +262,6 @@ %1$s He reprogramado esta tarea recurrente para %2$s Crear nueva etiqueta Crea una nueva lista - Sin Categoría ¿Eliminar %s? Temporizadores activos para %s! Tareas que se están cronometrando diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 38b084529..dc0837879 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -146,7 +146,6 @@ Korda kuni %s Korda määratud arv kordi Loo uus nimekiri - Liigitamata Taimer Kustuta ülesanne Lisatud ülesanne diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 267f0ec8a..9d9ce835c 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -266,7 +266,6 @@ "%1$s %2$s-rako programatuta" Sortu etiketa berria Sortu zerrenda berria - Kategoria gabe Ezabatu %s\? Kronometro aktiboak: %s ! Kronometratutako zereginak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 272e21686..9c854547c 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -152,7 +152,6 @@ تکرار تا %s ایجاد تگ جدید ایجاد لیست جدید - دسته بندی نشده وظایف زمانبندی شده تایمر این وظیفه شروع شده: diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index f870bf83a..4851f6080 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -248,7 +248,6 @@ %1$s uudelleenajastettu %2$s Luo uusi tunniste Luo uusi lista - Määrittelemätön Poista %s? Ajastus aktiivinen %s! Tehtävät ajoitettu diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 449faa48d..4f32488e4 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -247,7 +247,6 @@ %1$s replanifiée à %2$s Créer un nouveau tag Créer une nouvelle liste - Non classé Supprimer %s \? Chronomètre actif pour %s ! Tâches chronométrées diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index ac8bfcbdf..3bf71db76 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -170,7 +170,6 @@ %1$s He reprogramado esta tarea recurrente para %2$s Crear nueva etiqueta Crea una nueva lista - Sin Categoría ¿Eliminar %s? Temporizadores activos para %s! Tareas que se están cronometrando diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 4141f4fed..310747c1b 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -261,7 +261,6 @@ %1$s újraütemezve ekkorra: %2$s Új címke létrehozása Új lista létrehozása - Kategória nélküli %s törlése? Időzítők aktiválva eddig: %s! Időzített Feladatok diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 1f98b7c76..3e407bb37 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -197,7 +197,6 @@ Ulangi beberapa kali Buat tag baru Buat daftar baru - Tak berkategori Hapus %s\? Hapus tugas diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 4b3b852ab..d3689f4e2 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -261,7 +261,6 @@ %1$s ripianificata per %2$s Crea nuova etichetta Crea nuova lista - Non classificate Elimino %s? Timer attivi per %s! Attività cronometrate diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 8112bd2ad..5766f4666 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -294,7 +294,6 @@ %1$s תזמן מחדש משימה חוזרת זו ל־%2$s יצירת תגית חדשה יצירת רשימה חדשה - ללא קיטלוג מחק %s? הופעל קוצב זמן עבור %s משימות! משימות עם הערכת זמן diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index c9b424218..857e8e504 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -259,7 +259,6 @@ %1$s を %2$s にスケジュール変更しました 新しいタグを作成 新しいリストを作成 - 未分類 %s を削除しますか? %s のタイマーがアクティブです タスクの予定時間です diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 9299df389..2504d3f06 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -263,7 +263,6 @@ %1$s 이 %2$s 로 변경되었습니다 새 태그 만들기 새 목록 만들기 - 미분류 할일 %s 삭제할까요? %s 동안 타이머 작동함! 기한이 정해진 할일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index bc45001d0..b5f796653 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -258,7 +258,6 @@ %1$s perplanuotas šiai datai: %2$s Sukurti naują etiketę Sukurti naują sąrašą - Nekategorizuotos Ištrinti %s? Laikmatis yra aktyvus: %s! Tasks jau veikia diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index dde0de7c5..f1ddf55c6 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -103,7 +103,6 @@ Gjenta for alltid Gjenta til %s - Ukategorisert Aktive tidtakere for %s. Oppgaver med tidtaker Nedtelling diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 01b36cc57..d483aa021 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -258,7 +258,6 @@ %1$s opnieuw ingepland op %2$s Nieuw label aanmaken Nieuwe lijst aanmaken - Niet gecategoriseerd Verwijder %s? Timers ingeschakeld voor %s! Taken met timer diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1842ad07c..6542aceab 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -272,7 +272,6 @@ %1$s przełożone na %2$s Stwórz nowy tag Utwórz nową listę - Na żadnej liście Usunąć %s? Minutnkiki aktywne przez %s! Zadania z minutnikiem diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8a4951c55..b191c3a6e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -259,7 +259,6 @@ %1$s remarcada para %2$s Criar nova etiqueta Criar nova lista - Sem categoria Excluir %s? Temporizador ativado para %s! Tarefas com contagem de tempo diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index ab4e71080..256d32ee4 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -245,7 +245,6 @@ %1$s agendada para %2$s Criar nova etiqueta Criar nova lista - Sem categoria Apagar %s? Temporizador ativo para %s! Tarefas monitorizadas diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index dd9dc8d60..09bb51543 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -6,6 +6,5 @@ Fisiere sau Sterge linia - Fara categorie Filtre \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a813fdfa3..0d919d47e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -278,7 +278,6 @@ «%1$s» перенесено на %2$s Создать новый тег Создать новый список - Без тега Удалить %s? Для %s действуют таймеры! Задачи с таймером diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ffd9c5307..e6d87d844 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -259,7 +259,6 @@ %1$s preložené na %2$s Vytvoriť nový štítok Vytvoriť nový zoznam - Nezaradené Zmazať %s? Stopky aktívne pre %s! Naplánované Úlohy diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index d8acecd46..61e75575f 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -142,7 +142,6 @@ vsake dva meseca Ponavljaj do preklica Ponavljaj do %s - Nerazvrščen Merilniki časa aktivni za %s! Opravki katerim se meri čas Merilnik časa diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index c4e661afd..f5cfecdce 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -171,7 +171,6 @@ %1$s omplanerat till %2$s Skapa en ny ettikett Skapa en ny lista - Ingen ettikett Ta bort %s? Tidtagarur aktivt för %s! Uppgifter med tidtagning diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 322815d19..dd45f1692 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -264,7 +264,6 @@ %1$s, %2$s için yeniden zamanlandı Yeni etiket oluştur Yeni liste oluştur - Kategorilendirilmemiş %s silinsin mi? %s için kronometre etkin! Zaman Ölçümü Olan Görevler diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index eb20148e8..4f6194a38 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -275,7 +275,6 @@ %1$s перенесено на %2$s Створити новий тег Новий список - Без категорії Видалити %s? Таймери діють протягом %s! Завдання з таймером diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1ddcba0d0..e6925ab5f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -248,7 +248,6 @@ %1$s 重新安排在 %2$s 新建标签 新建列表 - 未分类 删除 %s? 秒表启动了 %s! 任务已开始计时 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9e8ba99c9..8e9349591 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -152,7 +152,6 @@ 重複到 %s 新增標籤 新增清單 - 未分類 秒錶啟動了 %s! 任務工作已開始計時 定時器 diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index dd54f916d..a75ceaf65 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -57,7 +57,6 @@ drawer_filters_enabled p_show_today_f p_show_recently_modified_f - p_show_no_list_f drawer_tags_enabled drawer_tags_hide_unused diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6afa976cd..7f5b567b9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -275,7 +275,6 @@ File %1$s contained %2$s.\n\n %1$s rescheduled for %2$s Create new tag Create new list - Uncategorized Delete %s? Timers Active for %s! Tasks Being Timed @@ -606,4 +605,19 @@ File %1$s contained %2$s.\n\n AND OR NOT + Overdue + Today only + Any due date + After today + No tags + Add tags + Add filter + High priority + Medium priority + Low priority + No priority + Eisenhower box 1 + Eisenhower box 2 + Eisenhower box 3 + Eisenhower box 4 diff --git a/app/src/main/res/xml/preferences_navigation_drawer.xml b/app/src/main/res/xml/preferences_navigation_drawer.xml index 09b63bc8c..d7ceffe40 100644 --- a/app/src/main/res/xml/preferences_navigation_drawer.xml +++ b/app/src/main/res/xml/preferences_navigation_drawer.xml @@ -21,12 +21,6 @@ android:key="@string/p_show_recently_modified_filter" android:title="@string/BFE_Recent" /> - -