Offer new filter templates

pull/996/head
Alex Baker 4 years ago
parent 312cfb36ee
commit 1a4289116e

@ -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<Filter> getFilters() {
Resources r = context.getResources();
// core filters
List<Filter> 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;
}
}

@ -208,7 +208,11 @@ public class CriterionInstance {
+ '}';
}
public String serialize() {
public static String serialize(List<CriterionInstance> 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(

@ -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<String, Object> getValues() {
Map<String, Object> values = new HashMap<>();
for (CriterionInstance instance : criteria) {

@ -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<CriterionInstance>()
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)
}

@ -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),

@ -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));
}
}

@ -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);
}

@ -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;
}

@ -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,

@ -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);
}

@ -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"/>
<com.google.android.material.chip.ChipGroup

@ -97,7 +97,6 @@
<string name="default_random_reminder_monthly">شهري</string>
<string name="default_random_reminder_bi_monthly">مرتين في الشهر</string>
<string name="repeat_forever">تكرار دائم</string>
<string name="tag_FEx_untagged">غير مصنف</string>
<string name="TEA_timer_controls">مؤقت</string>
<string name="TEA_timer_comment_started">بدء هذه المهمة:</string>
<string name="TEA_timer_comment_spent">الوقت المنقضي</string>

@ -261,7 +261,6 @@
<string name="repeat_snackbar">%1$s е насрочено за %2$s</string>
<string name="new_tag">Нов таг</string>
<string name="new_list">Създаване на нов списък</string>
<string name="tag_FEx_untagged">Без категория</string>
<string name="delete_tag_confirmation">Изтрий %s?</string>
<string name="TPl_notification">Таймерите са Активни за %s!</string>
<string name="TFE_workingOn">Tasks за отмерване на време</string>

@ -76,7 +76,6 @@
<string name="rmd_EPr_defaultRemind_title">Notificacions al Atzar</string>
<string name="repeat_forever">Repeteix indefinidament</string>
<string name="repeat_until">Repeteix fins %s</string>
<string name="tag_FEx_untagged">A cap llista</string>
<string name="TPl_notification">Temporitzadors actius per %s!</string>
<string name="TFE_workingOn">Tasques sent cronometrades</string>
<string name="TEA_timer_comment_started">inici d\'aquesta tasca:</string>

@ -155,7 +155,6 @@
<string name="repeat_forever">Opakovat stále</string>
<string name="repeat_until">Opakovat až do %s</string>
<string name="new_tag">Vytvořit nový štítek</string>
<string name="tag_FEx_untagged">Nezařazené</string>
<string name="delete_tag_confirmation">Smazat %s?</string>
<string name="TPl_notification">Aktivní časovače pro %s!</string>
<string name="TFE_workingOn">Termínované úkoly</string>

@ -257,7 +257,6 @@
<string name="repeat_snackbar">%1$s neu geplant für %2$s</string>
<string name="new_tag">Neues Schlagwort erstellen</string>
<string name="new_list">Neue Liste erstellen</string>
<string name="tag_FEx_untagged">Nicht kategorisiert</string>
<string name="delete_tag_confirmation">%s löschen?</string>
<string name="TPl_notification">Timer ist aktiv für %s!</string>
<string name="TFE_workingOn">Zeitlich festgelegte Aufgaben</string>

@ -140,7 +140,6 @@
<string name="default_random_reminder_bi_monthly">διμηνιαία</string>
<string name="repeat_forever">Επανάληψη επ\'αορίστου</string>
<string name="repeat_until">Επανάληψη μέχρι %s</string>
<string name="tag_FEx_untagged">Μη κατηγοριοποιημένο</string>
<string name="TPl_notification">Χρονοδιακόπτες ενεργοί για %s!</string>
<string name="TFE_workingOn">Καθήκοντα με χρονικό όριο</string>
<string name="TEA_timer_controls">Χρονοδιακόπτης</string>

@ -262,7 +262,6 @@
<string name="repeat_snackbar">%1$s He reprogramado esta tarea recurrente para %2$s</string>
<string name="new_tag">Crear nueva etiqueta</string>
<string name="new_list">Crea una nueva lista</string>
<string name="tag_FEx_untagged">Sin Categoría</string>
<string name="delete_tag_confirmation">¿Eliminar %s?</string>
<string name="TPl_notification">Temporizadores activos para %s!</string>
<string name="TFE_workingOn">Tareas que se están cronometrando</string>

@ -146,7 +146,6 @@
<string name="repeat_until">Korda kuni %s</string>
<string name="repeat_number_of_times">Korda määratud arv kordi</string>
<string name="new_list">Loo uus nimekiri</string>
<string name="tag_FEx_untagged">Liigitamata</string>
<string name="TEA_timer_controls">Taimer</string>
<string name="delete_task">Kustuta ülesanne</string>
<string name="voice_command_added_task">Lisatud ülesanne</string>

@ -266,7 +266,6 @@
<string name="repeat_snackbar">"%1$s %2$s-rako programatuta"</string>
<string name="new_tag">Sortu etiketa berria</string>
<string name="new_list">Sortu zerrenda berria</string>
<string name="tag_FEx_untagged">Kategoria gabe</string>
<string name="delete_tag_confirmation">Ezabatu %s\?</string>
<string name="TPl_notification">Kronometro aktiboak: %s !</string>
<string name="TFE_workingOn">Kronometratutako zereginak</string>

@ -152,7 +152,6 @@
<string name="repeat_until">تکرار تا %s</string>
<string name="new_tag">ایجاد تگ جدید</string>
<string name="new_list">ایجاد لیست جدید</string>
<string name="tag_FEx_untagged">دسته بندی نشده</string>
<string name="TFE_workingOn">وظایف زمانبندی شده</string>
<string name="TEA_timer_controls">تایمر</string>
<string name="TEA_timer_comment_started">این وظیفه شروع شده:</string>

@ -248,7 +248,6 @@
<string name="repeat_snackbar">%1$s uudelleenajastettu %2$s</string>
<string name="new_tag">Luo uusi tunniste</string>
<string name="new_list">Luo uusi lista</string>
<string name="tag_FEx_untagged">Määrittelemätön</string>
<string name="delete_tag_confirmation">Poista %s?</string>
<string name="TPl_notification">Ajastus aktiivinen %s!</string>
<string name="TFE_workingOn">Tehtävät ajoitettu</string>

@ -247,7 +247,6 @@
<string name="repeat_snackbar">%1$s replanifiée à %2$s</string>
<string name="new_tag">Créer un nouveau tag</string>
<string name="new_list">Créer une nouvelle liste</string>
<string name="tag_FEx_untagged">Non classé</string>
<string name="delete_tag_confirmation">Supprimer %s\?</string>
<string name="TPl_notification">Chronomètre actif pour %s!</string>
<string name="TFE_workingOn">Tâches chronométrées</string>

@ -170,7 +170,6 @@
<string name="repeat_snackbar">%1$s He reprogramado esta tarea recurrente para %2$s</string>
<string name="new_tag">Crear nueva etiqueta</string>
<string name="new_list">Crea una nueva lista</string>
<string name="tag_FEx_untagged">Sin Categoría</string>
<string name="delete_tag_confirmation">¿Eliminar %s?</string>
<string name="TPl_notification">Temporizadores activos para %s!</string>
<string name="TFE_workingOn">Tareas que se están cronometrando</string>

@ -261,7 +261,6 @@
<string name="repeat_snackbar">%1$s újraütemezve ekkorra: %2$s</string>
<string name="new_tag">Új címke létrehozása</string>
<string name="new_list">Új lista létrehozása</string>
<string name="tag_FEx_untagged">Kategória nélküli</string>
<string name="delete_tag_confirmation">%s törlése?</string>
<string name="TPl_notification">Időzítők aktiválva eddig: %s!</string>
<string name="TFE_workingOn">Időzített Feladatok</string>

@ -197,7 +197,6 @@
<string name="repeat_number_of_times">Ulangi beberapa kali</string>
<string name="new_tag">Buat tag baru</string>
<string name="new_list">Buat daftar baru</string>
<string name="tag_FEx_untagged">Tak berkategori</string>
<string name="delete_tag_confirmation">Hapus %s\?</string>
<string name="delete_task">Hapus tugas</string>
<plurals name="Ntasks">

@ -261,7 +261,6 @@
<string name="repeat_snackbar">%1$s ripianificata per %2$s</string>
<string name="new_tag">Crea nuova etichetta</string>
<string name="new_list">Crea nuova lista</string>
<string name="tag_FEx_untagged">Non classificate</string>
<string name="delete_tag_confirmation">Elimino %s?</string>
<string name="TPl_notification">Timer attivi per %s!</string>
<string name="TFE_workingOn">Attività cronometrate</string>

@ -294,7 +294,6 @@
<string name="repeat_snackbar">%1$s תזמן מחדש משימה חוזרת זו ל־%2$s</string>
<string name="new_tag">יצירת תגית חדשה</string>
<string name="new_list">יצירת רשימה חדשה</string>
<string name="tag_FEx_untagged">ללא קיטלוג</string>
<string name="delete_tag_confirmation">מחק %s?</string>
<string name="TPl_notification">הופעל קוצב זמן עבור %s משימות!</string>
<string name="TFE_workingOn">משימות עם הערכת זמן</string>

@ -259,7 +259,6 @@
<string name="repeat_snackbar">%1$s を %2$s にスケジュール変更しました</string>
<string name="new_tag">新しいタグを作成</string>
<string name="new_list">新しいリストを作成</string>
<string name="tag_FEx_untagged">未分類</string>
<string name="delete_tag_confirmation">%s を削除しますか?</string>
<string name="TPl_notification">%s のタイマーがアクティブです</string>
<string name="TFE_workingOn">タスクの予定時間です</string>

@ -263,7 +263,6 @@
<string name="repeat_snackbar">%1$s 이 %2$s 로 변경되었습니다</string>
<string name="new_tag">새 태그 만들기</string>
<string name="new_list">새 목록 만들기</string>
<string name="tag_FEx_untagged">미분류 할일</string>
<string name="delete_tag_confirmation">%s 삭제할까요?</string>
<string name="TPl_notification">%s 동안 타이머 작동함!</string>
<string name="TFE_workingOn">기한이 정해진 할일</string>

@ -258,7 +258,6 @@
<string name="repeat_snackbar">%1$s perplanuotas šiai datai: %2$s</string>
<string name="new_tag">Sukurti naują etiketę</string>
<string name="new_list">Sukurti naują sąrašą</string>
<string name="tag_FEx_untagged">Nekategorizuotos</string>
<string name="delete_tag_confirmation">Ištrinti %s?</string>
<string name="TPl_notification">Laikmatis yra aktyvus: %s!</string>
<string name="TFE_workingOn">Tasks jau veikia</string>

@ -103,7 +103,6 @@
</plurals>
<string name="repeat_forever">Gjenta for alltid</string>
<string name="repeat_until">Gjenta til %s</string>
<string name="tag_FEx_untagged">Ukategorisert</string>
<string name="TPl_notification">Aktive tidtakere for %s.</string>
<string name="TFE_workingOn">Oppgaver med tidtaker</string>
<string name="TEA_timer_controls">Nedtelling</string>

@ -258,7 +258,6 @@
<string name="repeat_snackbar">%1$s opnieuw ingepland op %2$s</string>
<string name="new_tag">Nieuw label aanmaken</string>
<string name="new_list">Nieuwe lijst aanmaken</string>
<string name="tag_FEx_untagged">Niet gecategoriseerd</string>
<string name="delete_tag_confirmation">Verwijder %s?</string>
<string name="TPl_notification">Timers ingeschakeld voor %s!</string>
<string name="TFE_workingOn">Taken met timer</string>

@ -272,7 +272,6 @@
<string name="repeat_snackbar">%1$s przełożone na %2$s</string>
<string name="new_tag">Stwórz nowy tag</string>
<string name="new_list">Utwórz nową listę</string>
<string name="tag_FEx_untagged">Na żadnej liście</string>
<string name="delete_tag_confirmation">Usunąć %s?</string>
<string name="TPl_notification">Minutnkiki aktywne przez %s!</string>
<string name="TFE_workingOn">Zadania z minutnikiem</string>

@ -259,7 +259,6 @@
<string name="repeat_snackbar">%1$s remarcada para %2$s</string>
<string name="new_tag">Criar nova etiqueta</string>
<string name="new_list">Criar nova lista</string>
<string name="tag_FEx_untagged">Sem categoria</string>
<string name="delete_tag_confirmation">Excluir %s?</string>
<string name="TPl_notification">Temporizador ativado para %s!</string>
<string name="TFE_workingOn">Tarefas com contagem de tempo</string>

@ -245,7 +245,6 @@
<string name="repeat_snackbar">%1$s agendada para %2$s</string>
<string name="new_tag">Criar nova etiqueta</string>
<string name="new_list">Criar nova lista</string>
<string name="tag_FEx_untagged">Sem categoria</string>
<string name="delete_tag_confirmation">Apagar %s?</string>
<string name="TPl_notification">Temporizador ativo para %s!</string>
<string name="TFE_workingOn">Tarefas monitorizadas</string>

@ -6,6 +6,5 @@
<string name="TEA_control_files">Fisiere</string>
<string name="CFA_type_add">sau</string>
<string name="CFA_context_delete">Sterge linia</string>
<string name="tag_FEx_untagged">Fara categorie</string>
<string name="filters">Filtre</string>
</resources>

@ -278,7 +278,6 @@
<string name="repeat_snackbar">«%1$s» перенесено на %2$s</string>
<string name="new_tag">Создать новый тег</string>
<string name="new_list">Создать новый список</string>
<string name="tag_FEx_untagged">Без тега</string>
<string name="delete_tag_confirmation">Удалить %s?</string>
<string name="TPl_notification">Для %s действуют таймеры!</string>
<string name="TFE_workingOn">Задачи с таймером</string>

@ -259,7 +259,6 @@
<string name="repeat_snackbar">%1$s preložené na %2$s</string>
<string name="new_tag">Vytvoriť nový štítok</string>
<string name="new_list">Vytvoriť nový zoznam</string>
<string name="tag_FEx_untagged">Nezaradené</string>
<string name="delete_tag_confirmation">Zmazať %s?</string>
<string name="TPl_notification">Stopky aktívne pre %s!</string>
<string name="TFE_workingOn">Naplánované Úlohy </string>

@ -142,7 +142,6 @@
<string name="default_random_reminder_bi_monthly">vsake dva meseca</string>
<string name="repeat_forever">Ponavljaj do preklica</string>
<string name="repeat_until">Ponavljaj do %s</string>
<string name="tag_FEx_untagged">Nerazvrščen</string>
<string name="TPl_notification">Merilniki časa aktivni za %s!</string>
<string name="TFE_workingOn">Opravki katerim se meri čas</string>
<string name="TEA_timer_controls">Merilnik časa</string>

@ -171,7 +171,6 @@
<string name="repeat_snackbar">%1$s omplanerat till %2$s</string>
<string name="new_tag">Skapa en ny ettikett</string>
<string name="new_list">Skapa en ny lista</string>
<string name="tag_FEx_untagged">Ingen ettikett</string>
<string name="delete_tag_confirmation">Ta bort %s?</string>
<string name="TPl_notification">Tidtagarur aktivt för %s!</string>
<string name="TFE_workingOn">Uppgifter med tidtagning</string>

@ -264,7 +264,6 @@
<string name="repeat_snackbar">%1$s, %2$s için yeniden zamanlandı</string>
<string name="new_tag">Yeni etiket oluştur</string>
<string name="new_list">Yeni liste oluştur</string>
<string name="tag_FEx_untagged">Kategorilendirilmemiş</string>
<string name="delete_tag_confirmation">%s silinsin mi?</string>
<string name="TPl_notification">%s için kronometre etkin!</string>
<string name="TFE_workingOn">Zaman Ölçümü Olan Görevler</string>

@ -275,7 +275,6 @@
<string name="repeat_snackbar">%1$s перенесено на %2$s</string>
<string name="new_tag">Створити новий тег</string>
<string name="new_list">Новий список</string>
<string name="tag_FEx_untagged">Без категорії</string>
<string name="delete_tag_confirmation">Видалити %s?</string>
<string name="TPl_notification">Таймери діють протягом %s!</string>
<string name="TFE_workingOn">Завдання з таймером</string>

@ -248,7 +248,6 @@
<string name="repeat_snackbar">%1$s 重新安排在 %2$s</string>
<string name="new_tag">新建标签</string>
<string name="new_list">新建列表</string>
<string name="tag_FEx_untagged">未分类</string>
<string name="delete_tag_confirmation">删除 %s</string>
<string name="TPl_notification">秒表启动了 %s</string>
<string name="TFE_workingOn">任务已开始计时</string>

@ -152,7 +152,6 @@
<string name="repeat_until">重複到 %s</string>
<string name="new_tag">新增標籤</string>
<string name="new_list">新增清單</string>
<string name="tag_FEx_untagged">未分類</string>
<string name="TPl_notification">秒錶啟動了 %s</string>
<string name="TFE_workingOn">任務工作已開始計時</string>
<string name="TEA_timer_controls">定時器</string>

@ -57,7 +57,6 @@
<string name="p_filters_enabled">drawer_filters_enabled</string>
<string name="p_show_today_filter">p_show_today_f</string>
<string name="p_show_recently_modified_filter">p_show_recently_modified_f</string>
<string name="p_show_not_in_list_filter">p_show_no_list_f</string>
<string name="p_tags_enabled">drawer_tags_enabled</string>
<string name="p_tags_hide_unused">drawer_tags_hide_unused</string>

@ -275,7 +275,6 @@ File %1$s contained %2$s.\n\n
<string name="repeat_snackbar">%1$s rescheduled for %2$s</string>
<string name="new_tag">Create new tag</string>
<string name="new_list">Create new list</string>
<string name="tag_FEx_untagged">Uncategorized</string>
<string name="delete_tag_confirmation">Delete %s?</string>
<string name="TPl_notification">Timers Active for %s!</string>
<string name="TFE_workingOn">Tasks Being Timed</string>
@ -606,4 +605,19 @@ File %1$s contained %2$s.\n\n
<string name="custom_filter_and">AND</string>
<string name="custom_filter_or">OR</string>
<string name="custom_filter_not">NOT</string>
<string name="filter_overdue">Overdue</string>
<string name="filter_today_only">Today only</string>
<string name="filter_any_due_date">Any due date</string>
<string name="filter_after_today">After today</string>
<string name="filter_no_tags">No tags</string>
<string name="add_tags">Add tags</string>
<string name="add_filter">Add filter</string>
<string name="filter_high_priority">High priority</string>
<string name="filter_medium_priority">Medium priority</string>
<string name="filter_low_priority">Low priority</string>
<string name="filter_no_priority">No priority</string>
<string name="filter_eisenhower_box_1">Eisenhower box 1</string>
<string name="filter_eisenhower_box_2">Eisenhower box 2</string>
<string name="filter_eisenhower_box_3">Eisenhower box 3</string>
<string name="filter_eisenhower_box_4">Eisenhower box 4</string>
</resources>

@ -21,12 +21,6 @@
android:key="@string/p_show_recently_modified_filter"
android:title="@string/BFE_Recent" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:dependency="@string/p_filters_enabled"
android:key="@string/p_show_not_in_list_filter"
android:title="@string/tag_FEx_untagged" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/tags">

Loading…
Cancel
Save