Add FilterSettingsActivity

Removed remaining nav drawer context item
pull/281/head
Alex Baker 9 years ago
parent 9ef29ae303
commit f99bea58a9

@ -347,10 +347,6 @@
android:name="com.todoroo.astrid.core.CustomFilterActivity"
android:theme="@style/Tasks.Dialog"/>
<activity
android:name="com.todoroo.astrid.core.DeleteFilterActivity"
android:theme="@style/Tasks.Dialog" />
<!-- alarms -->
<receiver android:name="com.todoroo.astrid.alarms.AlarmTaskRepeatListener">
<intent-filter>
@ -369,6 +365,10 @@
android:name="com.todoroo.astrid.actfm.TagSettingsActivity"
android:windowSoftInputMode="stateHidden" />
<activity
android:name="com.todoroo.astrid.actfm.FilterSettingsActivity"
android:windowSoftInputMode="stateHidden" />
<!-- gtasks -->
<activity
android:name="com.todoroo.astrid.gtasks.auth.GtasksLoginActivity"

@ -0,0 +1,162 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.actfm;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.dao.StoreObjectDao;
import org.tasks.R;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject;
import butterknife.ButterKnife;
import butterknife.InjectView;
import static android.text.TextUtils.isEmpty;
public class FilterSettingsActivity extends InjectingAppCompatActivity {
public static final String TOKEN_FILTER = "token_filter";
private CustomFilter filter;
@Inject ActivityPreferences preferences;
@Inject StoreObjectDao storeObjectDao;
@InjectView(R.id.tag_name) EditText filterName;
@InjectView(R.id.toolbar) Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences.applyThemeAndStatusBarColor();
setContentView(R.layout.tag_settings_activity);
ButterKnife.inject(this);
filter = getIntent().getParcelableExtra(TOKEN_FILTER);
setSupportActionBar(toolbar);
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
supportActionBar.setTitle(filter.listingTitle);
}
filterName.setText(filter.listingTitle);
}
private void save() {
String oldName = filter.listingTitle;
String newName = filterName.getText().toString().trim();
if (isEmpty(newName)) {
return;
}
boolean nameChanged = !oldName.equals(newName);
if (nameChanged) {
filter.listingTitle = newName;
storeObjectDao.update(filter.toStoreObject());
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_RENAMED).putExtra(TOKEN_FILTER, filter));
}
finish();
}
@Override
public void finish() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(filterName.getWindowToken(), 0);
super.finish();
AndroidUtilities.callOverridePendingTransition(this, R.anim.slide_right_in, R.anim.slide_right_out);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.tag_settings_activity, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onBackPressed() {
discard();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
discard();
break;
case R.id.menu_save:
save();
break;
case R.id.delete:
deleteTag();
break;
}
return super.onOptionsItemSelected(item);
}
private void deleteTag() {
new AlertDialog.Builder(this, R.style.Tasks_Dialog)
.setMessage(getString(R.string.delete_tag_confirmation, filter.listingTitle))
.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
storeObjectDao.delete(filter.getId());
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED).putExtra(TOKEN_FILTER, filter));
finish();
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
private void discard() {
String tagName = this.filterName.getText().toString().trim();
if (filter.listingTitle.equals(tagName)) {
finish();
} else {
new AlertDialog.Builder(this, R.style.Tasks_Dialog)
.setMessage(R.string.discard_changes)
.setPositiveButton(R.string.discard, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
}
}

@ -135,7 +135,7 @@ public class TagViewFragment extends TaskListFragment {
extras.putParcelable(TOKEN_FILTER, filter);
Activity activity = getActivity();
if (activity instanceof TaskListActivity) {
((TaskListActivity) activity).setListsTitle(filter.title);
((TaskListActivity) activity).setListsTitle(filter.listingTitle);
NavigationDrawerFragment navigationDrawer = ((TaskListActivity) activity).getNavigationDrawerFragment();
if (navigationDrawer != null) {
navigationDrawer.clear();

@ -67,7 +67,7 @@ public class FilterShortcutActivity extends InjectingListActivity {
Bitmap bitmap = superImposeListIcon(FilterShortcutActivity.this);
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, filter.title);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, filter.listingTitle);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
setResult(RESULT_OK, intent);

@ -123,7 +123,7 @@ public class ShortcutActivity extends Activity {
Filter filter;
if (extras.containsKey(TOKEN_CUSTOM_CLASS)) {
filter = new FilterWithCustomIntent(title, title, sql, values);
filter = new FilterWithCustomIntent(title, sql, values);
Bundle customExtras = new Bundle();
Set<String> keys = extras.keySet();
for (String key : keys) {
@ -135,11 +135,11 @@ public class ShortcutActivity extends Activity {
((FilterWithCustomIntent) filter).customExtras = customExtras; // Something
((FilterWithCustomIntent) filter).customTaskList = ComponentName.unflattenFromString(extras.getString(TOKEN_CUSTOM_CLASS));
} else {
filter = new Filter(title, title, sql, values);
filter = new Filter(title, sql, values);
}
taskListIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter);
} else if(extras != null && extras.containsKey(TOKEN_SINGLE_TASK)) {
Filter filter = new Filter(getString(R.string.TLA_custom), getString(R.string.TLA_custom),
Filter filter = new Filter(getString(R.string.TLA_custom),
new QueryTemplate().where(Task.ID.eq(extras.getLong(TOKEN_SINGLE_TASK, -1))), null);
taskListIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
@ -164,7 +164,7 @@ public class ShortcutActivity extends Activity {
shortcutIntent.setAction(Intent.ACTION_VIEW);
shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_TITLE,
filter.title);
filter.listingTitle);
shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_SQL,
filter.getSqlQuery());
if (filter.valuesForNewTasks != null) {

@ -24,17 +24,16 @@ import android.view.View;
import com.todoroo.andlib.data.Callback;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.actfm.FilterSettingsActivity;
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.DeleteFilterActivity;
import com.todoroo.astrid.core.SavedFilter;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksListFragment;
@ -61,6 +60,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
@Inject VoiceInputAssistant voiceInputAssistant;
private static final int REQUEST_EDIT_TAG = 11543;
private static final int REQUEST_EDIT_FILTER = 11544;
private final RepeatConfirmationReceiver repeatConfirmationReceiver = new RepeatConfirmationReceiver(this);
private NavigationDrawerFragment navigationDrawer;
@ -123,7 +123,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
setupTasklistFragmentWithFilter(savedFilter, extras);
if (savedFilter != null) {
setListsTitle(savedFilter.title);
setListsTitle(savedFilter.listingTitle);
}
}
@ -158,6 +158,8 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
menu.findItem(R.id.menu_sort).setVisible(false);
} else if(tlf instanceof TagViewFragment) {
menu.findItem(R.id.menu_tag_settings).setVisible(true);
} else if(tlf.getFilter() instanceof CustomFilter && ((CustomFilter) tlf.getFilter()).getId() > 0) {
menu.findItem(R.id.menu_filter_settings).setVisible(true);
}
menu.findItem(R.id.menu_voice_add).setVisible(voiceInputAvailable(this));
final MenuItem item = menu.findItem(R.id.menu_search);
@ -167,7 +169,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
public boolean onQueryTextSubmit(String query) {
query = query.trim();
String title = getString(R.string.FLA_search_filter, query);
Filter savedFilter = new Filter(title, title,
Filter savedFilter = new Filter(title,
new QueryTemplate().where(Task.TITLE.like(
"%" + //$NON-NLS-1$
query + "%")), //$NON-NLS-1$
@ -282,7 +284,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
}
public void setSelectedItem(Filter item) {
getSupportActionBar().setTitle(item.title);
getSupportActionBar().setTitle(item.listingTitle);
}
@Override
@ -342,6 +344,8 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, newList); // Handle in onPostResume()
navigationDrawer.clear();
}
navigationDrawer.refresh();
} else if (requestCode == TaskListFragment.ACTIVITY_EDIT_TASK && resultCode != Activity.RESULT_CANCELED) {
// Handle switch to assigned filter when it comes from TaskEditActivity finishing
// For cases when we're in a multi-frame layout, the TaskEditFragment will notify us here directly
@ -390,16 +394,16 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
navigationDrawer.refresh();
}
} else if (requestCode == NavigationDrawerFragment.REQUEST_CUSTOM_INTENT && resultCode == RESULT_OK && data != null) {
String action = data.getAction();
TaskListFragment tlf = getTaskListFragment();
if (AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED.equals(action)) {
StoreObject storeObject = (StoreObject) data.getExtras().get(DeleteFilterActivity.TOKEN_STORE_OBJECT);
Filter filter = SavedFilter.load(storeObject);
if (tlf.getFilter().equals(filter)) {
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, BuiltInFilterExposer.getMyTasksFilter(getResources())); // Handle in onPostResume()
} else if (requestCode == REQUEST_EDIT_FILTER) {
if (resultCode == RESULT_OK) {
String action = data.getAction();
if (AstridApiConstants.BROADCAST_EVENT_FILTER_RENAMED.equals(action)) {
CustomFilter customFilter = data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER);
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, customFilter);
} else if(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED.equals(action)) {
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, BuiltInFilterExposer.getMyTasksFilter(getResources()));
}
navigationDrawer.refresh();
}
}
@ -432,7 +436,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
@Override
public boolean onOptionsItemSelected(MenuItem item) {
TaskListFragment tlf = getTaskListFragment();
final TaskListFragment tlf = getTaskListFragment();
switch(item.getItemId()) {
case R.id.menu_voice_add:
voiceInputAssistant.startVoiceRecognitionActivity(R.string.voice_create_prompt);
@ -447,6 +451,10 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
putExtra(TagViewFragment.EXTRA_TAG_DATA, getTaskListFragment().getActiveTagData());
}}, REQUEST_EDIT_TAG);
return true;
case R.id.menu_filter_settings:
startActivityForResult(new Intent(this, FilterSettingsActivity.class) {{
putExtra(FilterSettingsActivity.TOKEN_FILTER, tlf.getFilter());
}}, REQUEST_EDIT_FILTER);
default:
return super.onOptionsItemSelected(item);
}

@ -108,4 +108,5 @@ public class AstridApiConstants {
public static final String BROADCAST_EVENT_FILTER_DELETED = BuildConfig.APPLICATION_ID + ".FILTER_DELETED";
public static final String BROADCAST_EVENT_FILTER_RENAMED = BuildConfig.APPLICATION_ID + ".FILTER_RENAMED";
}

@ -0,0 +1,76 @@
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.core.SavedFilter;
import com.todoroo.astrid.data.StoreObject;
public class CustomFilter extends Filter {
private long id;
private CustomFilter() {
}
public CustomFilter(String listingTitle, String sql, ContentValues contentValues, long id) {
super(listingTitle, sql, contentValues);
this.id = id;
}
public StoreObject toStoreObject() {
return new StoreObject() {{
setId(id);
setValue(SavedFilter.NAME, listingTitle);
setValue(SavedFilter.SQL, sqlQuery);
if (valuesForNewTasks != null && valuesForNewTasks.size() > 0) {
setValue(SavedFilter.VALUES, AndroidUtilities.contentValuesToSerializedString(valuesForNewTasks));
}
}};
}
public long getId() {
return id;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeLong(id);
}
@Override
public void readFromParcel(Parcel source) {
super.readFromParcel(source);
id = source.readLong();
}
/**
* Parcelable Creator Object
*/
public static final Parcelable.Creator<CustomFilter> CREATOR = new Parcelable.Creator<CustomFilter>() {
/**
* {@inheritDoc}
*/
@Override
public CustomFilter createFromParcel(Parcel source) {
CustomFilter item = new CustomFilter();
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
@Override
public CustomFilter[] newArray(int size) {
return new CustomFilter[size];
}
};
}

@ -32,14 +32,6 @@ public class Filter extends FilterListItem {
// --- instance variables
/**
* Expanded title of this filter. This is displayed at the top
* of the screen when user is viewing this filter.
* <p>
* e.g "Tasks With Notes"
*/
public String title;
/**
* {@link PermaSql} query for this filter. The query will be appended to the select
* statement after "<code>SELECT fields FROM table %s</code>". It is
@ -75,15 +67,11 @@ public class Filter extends FilterListItem {
* Utility constructor for creating a Filter object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param title
* Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery
* SQL query for this list (see {@link #sqlQuery} for examples).
*/
public Filter(String listingTitle, String title,
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
this(listingTitle, title, sqlQuery == null ? null : sqlQuery.toString(),
public Filter(String listingTitle, QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
this(listingTitle, sqlQuery == null ? null : sqlQuery.toString(),
valuesForNewTasks);
}
@ -91,16 +79,11 @@ public class Filter extends FilterListItem {
* Utility constructor for creating a Filter object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param title
* Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery
* SQL query for this list (see {@link #sqlQuery} for examples).
*/
public Filter(String listingTitle, String title,
String sqlQuery, ContentValues valuesForNewTasks) {
public Filter(String listingTitle, String sqlQuery, ContentValues valuesForNewTasks) {
this.listingTitle = listingTitle;
this.title = title;
this.sqlQuery = sqlQuery;
this.filterOverride = null;
this.valuesForNewTasks = valuesForNewTasks;
@ -136,7 +119,7 @@ public class Filter extends FilterListItem {
int result = 1;
result = prime * result
+ ((sqlQuery == null) ? 0 : sqlQuery.hashCode());
result = prime * result + ((title == null) ? 0 : title.hashCode());
result = prime * result + ((listingTitle == null) ? 0 : listingTitle.hashCode());
return result;
}
@ -159,11 +142,11 @@ public class Filter extends FilterListItem {
} else if (!sqlQuery.equals(other.sqlQuery)) {
return false;
}
if (title == null) {
if (other.title != null) {
if (listingTitle == null) {
if (other.listingTitle != null) {
return false;
}
} else if (!title.equals(other.title)) {
} else if (!listingTitle.equals(other.listingTitle)) {
return false;
}
return true;
@ -180,7 +163,6 @@ public class Filter extends FilterListItem {
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(title);
dest.writeString(sqlQuery);
dest.writeParcelable(valuesForNewTasks, 0);
}
@ -188,7 +170,6 @@ public class Filter extends FilterListItem {
@Override
public void readFromParcel(Parcel source) {
super.readFromParcel(source);
title = source.readString();
sqlQuery = source.readString();
valuesForNewTasks = source.readParcelable(ContentValues.class.getClassLoader());
}
@ -223,6 +204,6 @@ public class Filter extends FilterListItem {
@Override
public String toString() {
return title;
return listingTitle;
}
}

@ -5,7 +5,6 @@
*/
package com.todoroo.astrid.api;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
@ -18,19 +17,9 @@ import android.os.Parcelable;
abstract public class FilterListItem implements Parcelable {
public enum Type {
ITEM(0),
SUBHEADER(1),
SEPARATOR(2);
private int viewType;
Type(int viewType) {
this.viewType = viewType;
}
public int getViewType() {
return viewType;
}
ITEM,
SUBHEADER,
SEPARATOR
}
public abstract Type getItemType();
@ -42,19 +31,6 @@ abstract public class FilterListItem implements Parcelable {
public int icon = 0;
/**
* Context Menu labels. The context menu will be displayed when users
* long-press on this filter list item.
*/
public String contextMenuLabels[] = new String[0];
/**
* Context menu intents. This intent will be started when the corresponding
* content menu label is invoked. This array must be the same size as
* the contextMenuLabels array.
*/
public Intent contextMenuIntents[] = new Intent[0];
@Override
public int describeContents() {
return 0;
@ -69,10 +45,6 @@ abstract public class FilterListItem implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(listingTitle);
dest.writeInt(icon);
// write array lengths before arrays
dest.writeStringArray(contextMenuLabels);
dest.writeTypedArray(contextMenuIntents, 0);
}
/**
@ -81,8 +53,5 @@ abstract public class FilterListItem implements Parcelable {
public void readFromParcel(Parcel source) {
listingTitle = source.readString();
icon = source.readInt();
contextMenuLabels = source.createStringArray();
contextMenuIntents = source.createTypedArray(Intent.CREATOR);
}
}

@ -35,14 +35,12 @@ public class FilterWithCustomIntent extends Filter {
super();
}
public FilterWithCustomIntent(String listingTitle, String title,
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
public FilterWithCustomIntent(String listingTitle, QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, sqlQuery, valuesForNewTasks);
}
public FilterWithCustomIntent(String listingTitle, String title,
String sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
public FilterWithCustomIntent(String listingTitle, String sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, sqlQuery, valuesForNewTasks);
}
public Intent getCustomIntent() {

@ -86,7 +86,7 @@ public final class BuiltInFilterExposer {
* Build inbox filter
*/
public static Filter getMyTasksFilter(Resources r) {
return new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active),
return new Filter(r.getString(R.string.BFE_Active),
new QueryTemplate().where(
Criterion.and(TaskCriteria.activeAndVisible(),
Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where(
@ -100,7 +100,6 @@ public final class BuiltInFilterExposer {
ContentValues todayValues = new ContentValues();
todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON);
return new Filter(todayTitle,
todayTitle,
new QueryTemplate().where(
Criterion.and(TaskCriteria.activeAndVisible(),
Task.DUE_DATE.gt(0),
@ -110,7 +109,6 @@ public final class BuiltInFilterExposer {
private static Filter getRecentlyModifiedFilter(Resources r) {
return new Filter(r.getString(R.string.BFE_Recent),
r.getString(R.string.BFE_Recent),
new QueryTemplate().where(
Criterion.all).orderBy(
Order.desc(Task.MODIFICATION_DATE)).limit(15),
@ -119,7 +117,6 @@ public final class BuiltInFilterExposer {
private static Filter getUncategorizedFilter(Resources r) {
return new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE)
.where(Criterion.and(MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0))))),

@ -35,6 +35,7 @@ import com.todoroo.andlib.sql.UnaryCriterion;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.CustomFilterCriterion;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.MultipleSelectCriterion;
@ -43,6 +44,7 @@ import com.todoroo.astrid.api.TextInputCriterion;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import org.slf4j.Logger;
@ -417,17 +419,18 @@ public class CustomFilterActivity extends InjectingAppCompatActivity {
}
String title;
StoreObject storeObject = null;
if(filterName.getText().length() > 0) {
// persist saved filter
title = filterName.getText().toString().trim();
SavedFilter.persist(storeObjectDao, adapter, title, sql.toString(), values);
storeObject = SavedFilter.persist(storeObjectDao, adapter, title, sql.toString(), values);
} else {
// temporary
title = suggestedTitle.toString();
}
// view
Filter filter = new Filter(title, title, sql.toString(), values);
Filter filter = new CustomFilter(title, sql.toString(), values, storeObject == null ? -1L : storeObject.getId());
setResult(RESULT_OK, new Intent().putExtra(TagSettingsActivity.TOKEN_NEW_FILTER, filter));
finish();
}

@ -5,16 +5,13 @@
*/
package com.todoroo.astrid.core;
import android.content.Context;
import android.content.Intent;
import com.todoroo.andlib.data.Callback;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.ResourceResolver;
import java.util.ArrayList;
@ -22,24 +19,14 @@ import java.util.List;
import javax.inject.Inject;
/**
* Exposes Astrid's built in filters to the NavigationDrawerFragment
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class CustomFilterExposer {
static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$
private final StoreObjectDao storeObjectDao;
private ResourceResolver resourceResolver;
private final Context context;
@Inject
public CustomFilterExposer(ResourceResolver resourceResolver, @ForApplication Context context, StoreObjectDao storeObjectDao) {
public CustomFilterExposer(ResourceResolver resourceResolver, StoreObjectDao storeObjectDao) {
this.resourceResolver = resourceResolver;
this.context = context;
this.storeObjectDao = storeObjectDao;
}
@ -51,14 +38,9 @@ public final class CustomFilterExposer {
storeObjectDao.getSavedFilters(new Callback<StoreObject>() {
@Override
public void apply(StoreObject savedFilter) {
Filter f = SavedFilter.load(savedFilter);
CustomFilter f = SavedFilter.load(savedFilter);
f.icon = filter;
Intent deleteIntent = new Intent(context, DeleteFilterActivity.class);
deleteIntent.putExtra(TOKEN_FILTER_ID, savedFilter.getId());
f.contextMenuLabels = new String[] { context.getString(R.string.BFE_Saved_delete) };
f.contextMenuIntents = new Intent[] { deleteIntent };
list.add(f);
}
});

@ -1,63 +0,0 @@
package com.todoroo.astrid.core;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject;
import org.tasks.R;
import org.tasks.injection.InjectingActivity;
import javax.inject.Inject;
/**
* Simple activity for deleting stuff
*
* @author Tim Su <tim@todoroo.com>
*/
public class DeleteFilterActivity extends InjectingActivity {
public static final String TOKEN_STORE_OBJECT = "store_object";
@Inject StoreObjectDao storeObjectDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final long id = getIntent().getLongExtra(CustomFilterExposer.TOKEN_FILTER_ID, -1);
if (id == -1) {
finish();
return;
}
final StoreObject storeObject = storeObjectDao.getById(id);
final Filter filter = SavedFilter.load(storeObject);
final String name = filter.title;
DialogUtilities.okCancelDialog(this,
getString(R.string.DLG_delete_this_item_question, name),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
storeObjectDao.delete(id);
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED) {{
putExtra(TOKEN_STORE_OBJECT, storeObject);
}});
finish();
}
},
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(RESULT_CANCELED);
finish();
}
});
}
}

@ -10,6 +10,7 @@ import android.text.TextUtils;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.CustomFilterActivity.CriterionInstance;
import com.todoroo.astrid.dao.StoreObjectDao;
@ -47,11 +48,11 @@ public class SavedFilter {
/**
* Save a filter
*/
public static void persist(StoreObjectDao dao, CustomFilterAdapter adapter, String title,
public static StoreObject persist(StoreObjectDao dao, CustomFilterAdapter adapter, String title,
String sql, ContentValues values) {
if(title == null || title.length() == 0) {
return;
return null;
}
// if filter of this name exists, edit it
@ -74,7 +75,11 @@ public class SavedFilter {
String filters = serializeFilters(adapter);
storeObject.setValue(FILTERS, filters);
dao.persist(storeObject);
if (dao.persist(storeObject)) {
return storeObject;
}
return null;
}
/**
@ -110,7 +115,7 @@ public class SavedFilter {
/**
* Read filter from store
*/
public static Filter load(StoreObject savedFilter) {
public static CustomFilter load(StoreObject savedFilter) {
String title = savedFilter.getValue(NAME);
String sql = savedFilter.getValue(SQL);
String values = savedFilter.getValue(VALUES);
@ -122,7 +127,7 @@ public class SavedFilter {
sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column
return new Filter(title, title, sql, contentValues);
return new CustomFilter(title, sql, contentValues, savedFilter.getId());
}
}

@ -57,14 +57,18 @@ public class StoreObjectDao {
}));
}
public void persist(StoreObject storeObject) {
dao.persist(storeObject);
public boolean persist(StoreObject storeObject) {
return dao.persist(storeObject);
}
public void persist(GtasksList list) {
persist(list.getStoreObject());
}
public void update(StoreObject storeObject) {
dao.saveExisting(storeObject);
}
public List<StoreObject> getByType(String type) {
return dao.toList(select(StoreObject.PROPERTIES)
.where(StoreObject.TYPE.eq(type)));

@ -84,7 +84,7 @@ public class GtasksFilterExposer {
values.put(GtasksMetadata.LIST_ID.name, list.getRemoteId());
values.put(GtasksMetadata.ORDER.name, PermaSql.VALUE_NOW);
FilterWithCustomIntent filter = new FilterWithCustomIntent(listName,
listName, new QueryTemplate().join(
new QueryTemplate().join(
Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskCriteria.notDeleted(),

@ -74,9 +74,7 @@ public class TagFilterExposer {
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.getName());
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.getUuid());
FilterWithCustomIntent filter = new FilterWithCustomIntent(tag.getName(),
title, tagTemplate,
contentValues);
FilterWithCustomIntent filter = new FilterWithCustomIntent(title, tagTemplate, contentValues);
filter.customTaskList = new ComponentName(context, TagViewFragment.class);
Bundle extras = new Bundle();

@ -55,7 +55,6 @@ public final class TimerFilterExposer {
ContentValues values = new ContentValues();
values.put(Task.TIMER_START.name, Filter.VALUE_NOW);
return new Filter(r.getString(R.string.TFE_workingOn),
r.getString(R.string.TFE_workingOn),
new QueryTemplate().where(Task.TIMER_START.gt(0)),
values);
}

@ -158,7 +158,7 @@ public class WidgetConfigActivity extends InjectingListActivity {
if(values != null) {
contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);
}
title = ((Filter)filterListItem).title;
title = ((Filter)filterListItem).listingTitle;
}
preferences.setString(WidgetConfigActivity.PREF_TITLE + mAppWidgetId, title);

@ -119,7 +119,7 @@ public class WidgetUpdateService extends InjectingService {
if (filter.isTagFilter()) {
((FilterWithCustomIntent) filter).customTaskList = new ComponentName(context, TagViewFragment.class); // In case legacy widget was created with subtasks fragment
}
views.setTextViewText(R.id.widget_title, filter.title);
views.setTextViewText(R.id.widget_title, filter.listingTitle);
views.removeAllViews(R.id.taskbody);
int flags = preferences.getSortFlags();

@ -2,6 +2,7 @@ package org.tasks.injection;
import android.app.Activity;
import com.todoroo.astrid.actfm.FilterSettingsActivity;
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.activity.BeastModePreferences;
import com.todoroo.astrid.activity.FilterShortcutActivity;
@ -11,7 +12,6 @@ import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.calls.MissedCallActivity;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.DefaultsPreferences;
import com.todoroo.astrid.core.DeleteFilterActivity;
import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.files.AACRecordingActivity;
import com.todoroo.astrid.gcal.CalendarAlarmListCreator;
@ -51,10 +51,10 @@ import dagger.Provides;
TaskEditActivity.class,
ShareLinkActivity.class,
TagSettingsActivity.class,
FilterSettingsActivity.class,
CustomFilterActivity.class,
MissedCallActivity.class,
CalendarAlarmListCreator.class,
DeleteFilterActivity.class,
CalendarReminderActivity.class,
VoiceCommandActivity.class,
GtasksLoginActivity.class,

@ -9,17 +9,13 @@ import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.FilterAdapter;
@ -51,9 +47,6 @@ public class NavigationDrawerFragment extends InjectingFragment {
public static final String TOKEN_LAST_SELECTED = "lastSelected"; //$NON-NLS-1$
private static final int CONTEXT_MENU_INTENT = Menu.FIRST + 4;
public static final int REQUEST_CUSTOM_INTENT = 10;
public static final int REQUEST_NEW_LIST = 4;
public FilterAdapter adapter = null;
@ -229,30 +222,6 @@ public class NavigationDrawerFragment extends InjectingFragment {
outState.putInt(TOKEN_LAST_SELECTED, mCurrentSelectedPosition);
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
// called when context menu appears
return onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case CONTEXT_MENU_INTENT: {
Intent intent = item.getIntent();
getActivity().startActivityForResult(intent, REQUEST_CUSTOM_INTENT);
return true;
}
default: {
TaskListFragment tasklist = (TaskListFragment) getActivity().getSupportFragmentManager().findFragmentByTag(TaskListFragment.TAG_TASKLIST_FRAGMENT);
if (tasklist != null && tasklist.isInLayout()) {
return tasklist.onOptionsItemSelected(item);
}
}
}
return false;
}
public void closeMenu() {
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
@ -281,27 +250,6 @@ public class NavigationDrawerFragment extends InjectingFragment {
adapter.populateList();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
FilterListItem item = adapter.getItem(info.position);
if (item instanceof Filter) {
for (int i = 0; i < item.contextMenuLabels.length; i++) {
if (item.contextMenuIntents.length <= i) {
break;
}
MenuItem menuItem = menu.add(0, CONTEXT_MENU_INTENT, 0, item.contextMenuLabels[i]);
menuItem.setIntent(item.contextMenuIntents[i]);
}
if (menu.size() > 0) {
menu.setHeaderTitle(item.listingTitle);
}
}
}
@Override
public void onResume() {
super.onResume();

@ -77,7 +77,7 @@ public class WidgetHelper {
remoteViews.setInt(R.id.list_view, "setBackgroundColor", android.R.color.transparent);
remoteViews.setInt(R.id.empty_view, "setBackgroundColor", android.R.color.transparent);
}
remoteViews.setTextViewText(R.id.widget_title, filter.title);
remoteViews.setTextViewText(R.id.widget_title, filter.listingTitle);
remoteViews.setRemoteAdapter(R.id.list_view, rvIntent);
remoteViews.setEmptyView(R.id.list_view, R.id.empty_view);
PendingIntent listIntent = getListIntent(context, filter, id);
@ -148,7 +148,7 @@ public class WidgetHelper {
}
String title = preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId);
if (title != null) {
filter.title = title;
filter.listingTitle = title;
}
String contentValues = preferences.getStringValue(WidgetConfigActivity.PREF_VALUES + widgetId);
if (contentValues != null) {
@ -159,7 +159,7 @@ public class WidgetHelper {
+ widgetId);
if (customComponent != null) {
ComponentName component = ComponentName.unflattenFromString(customComponent);
filter = new FilterWithCustomIntent(filter.title, filter.title, filter.getSqlQuery(), filter.valuesForNewTasks);
filter = new FilterWithCustomIntent(filter.listingTitle, filter.getSqlQuery(), filter.valuesForNewTasks);
((FilterWithCustomIntent) filter).customTaskList = component;
String serializedExtras = preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_EXTRAS
+ widgetId);
@ -171,10 +171,10 @@ public class WidgetHelper {
TagData tagData;
if (id > 0) {
tagData = tagDataDao.fetch(id, TagData.ID, TagData.NAME, TagData.UUID);
if (tagData != null && !tagData.getName().equals(filter.title)) { // Tag has been renamed; rebuild filter
if (tagData != null && !tagData.getName().equals(filter.listingTitle)) { // Tag has been renamed; rebuild filter
filter = TagFilterExposer.filterFromTagData(context, tagData);
preferences.setString(WidgetConfigActivity.PREF_SQL + widgetId, filter.getSqlQuery());
preferences.setString(WidgetConfigActivity.PREF_TITLE + widgetId, filter.title);
preferences.setString(WidgetConfigActivity.PREF_TITLE + widgetId, filter.listingTitle);
ContentValues newTaskValues = filter.valuesForNewTasks;
String contentValuesString = null;
if (newTaskValues != null) {
@ -190,7 +190,7 @@ public class WidgetHelper {
}
}
} else {
tagData = tagDataDao.getTagByName(filter.title, TagData.ID);
tagData = tagDataDao.getTagByName(filter.listingTitle, TagData.ID);
if (tagData != null) {
preferences.setLong(WidgetConfigActivity.PREF_TAG_ID + widgetId, tagData.getId());
}

@ -1,32 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tasks="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_voice_add"
android:title="@string/EPr_voiceInputEnabled_title"
android:icon="@drawable/ic_mic_white_24dp"
tasks:showAsAction="ifRoom"/>
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_search"
android:title="@string/TLA_menu_search"
android:icon="@drawable/ic_search_white_24dp"
tasks:showAsAction="ifRoom|collapseActionView"
tasks:actionViewClass="android.support.v7.widget.SearchView"/>
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
<item
android:id="@+id/menu_sort"
android:title="@string/TLA_menu_sort"
android:icon="@drawable/ic_sort_white_24dp"
tasks:showAsAction="ifRoom" />
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_clear_completed"
android:title="@string/gtasks_GTA_clear_completed"
android:visible="false"
tasks:showAsAction="never" />
app:showAsAction="never" />
<item
android:id="@+id/menu_tag_settings"
android:title="@string/tag_settings"
android:visible="false"
tasks:showAsAction="never" />
app:showAsAction="never" />
<item
android:id="@+id/menu_filter_settings"
android:title="@string/filter_settings"
android:visible="false"
app:showAsAction="never" />
</menu>

@ -145,7 +145,6 @@
</string-array>
<string name="BFE_Active">مهامي</string>
<string name="BFE_Recent">ما تم تعديله مؤخرا</string>
<string name="BFE_Saved_delete">حذف الفلتر</string>
<string name="CFA_universe_all">مهام نشطة</string>
<string name="CFA_type_add">أو</string>
<string name="CFA_type_subtract">ليس</string>

@ -31,7 +31,6 @@
<string name="write_permission_label">Tasks Разрешение</string>
<string name="write_permission_desc">създаване на нови задачи, редактиране на съществуващи задачи</string>
<string name="DLG_delete_this_task_question">Изтриване на тази задача?</string>
<string name="DLG_delete_this_item_question">Изтриване на този елемент: %s?</string>
<string name="DLG_upgrading">Обновяване на твоите задачи...</string>
<string name="DLG_hour_minutes">Време (часове: минути)</string>
<string name="DLG_undo">Върни</string>
@ -221,7 +220,6 @@
</string-array>
<string name="BFE_Active">Моите задачи</string>
<string name="BFE_Recent">Наскоро променени</string>
<string name="BFE_Saved_delete">Изтрий филътр</string>
<string name="CFA_filterName_hint">Именувайте този филтър, за да го запазите...</string>
<string name="CFA_universe_all">Активни Задачи</string>
<string name="CFA_type_add">или</string>

@ -26,7 +26,6 @@
<string name="write_permission_label">Permís de l\'Tasks</string>
<string name="write_permission_desc">crear noves tasques, editar tasques existents</string>
<string name="DLG_delete_this_task_question">Voleu suprimir aquesta tasca?</string>
<string name="DLG_delete_this_item_question">Voleu suprimir aquest element: %s?</string>
<string name="DLG_upgrading">S\'estan actualitzant les vostres tasques...</string>
<string name="DLG_hour_minutes">Temps (hores : minuts)</string>
<string name="DLG_undo">Desfés</string>
@ -131,7 +130,6 @@
</string-array>
<string name="BFE_Active">Tasques actives</string>
<string name="BFE_Recent">Modificades fa poc</string>
<string name="BFE_Saved_delete">Esborra el filtre</string>
<string name="CFA_filterName_hint">Dona nom al filtre per desar-lo...</string>
<string name="CFA_universe_all">Tasques actives</string>
<string name="CFA_type_add">o</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks Práva</string>
<string name="write_permission_desc">vytvořit nové úkoly, upravit existující úkoly</string>
<string name="DLG_delete_this_task_question">Smazat tento úkol?</string>
<string name="DLG_delete_this_item_question">Smazat tuto položku: %s?</string>
<string name="DLG_upgrading">Obnovování vašich úkolů...</string>
<string name="DLG_hour_minutes">Čas (hodin : minut)</string>
<string name="DLG_undo">Vrátit změny</string>
@ -208,7 +207,6 @@
</string-array>
<string name="BFE_Active">Aktivní úkoly</string>
<string name="BFE_Recent">Nedávno upravené</string>
<string name="BFE_Saved_delete">Smazat filtr</string>
<string name="CFA_filterName_hint">Pojmenujte tento filtr pro jeho uložení</string>
<string name="CFA_universe_all">Aktivní úkoly</string>
<string name="CFA_type_add">nebo</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks Tilladelser</string>
<string name="write_permission_desc">opret nye opgaver, rediger eksisterende opgaver</string>
<string name="DLG_delete_this_task_question">Slet denne opgave?</string>
<string name="DLG_delete_this_item_question">Slet dette element: %s?</string>
<string name="DLG_upgrading">Opgraderer dine opgaver...</string>
<string name="DLG_hour_minutes">Tid (timer : minutter)</string>
<string name="WID_dateButtonUnset">Tryk for at indstille</string>
@ -110,7 +109,6 @@
</string-array>
<string name="BFE_Active">Aktive opgaver</string>
<string name="BFE_Recent">Senest ændrede</string>
<string name="BFE_Saved_delete">Slet filter</string>
<string name="CFA_filterName_hint">Navngiv dette filter for at gemme det...</string>
<string name="CFA_universe_all">Aktive opgaver</string>
<string name="CFA_type_add">eller</string>

@ -27,7 +27,6 @@
<string name="write_permission_label">Tasks Zugriffsrechte</string>
<string name="write_permission_desc">Aufgaben erstellen, existierende Aufgaben bearbeiten</string>
<string name="DLG_delete_this_task_question">Diese Aufgabe löschen?</string>
<string name="DLG_delete_this_item_question">Dieses Element löschen: %s?</string>
<string name="DLG_upgrading">Ihre Aufgaben werden aktualisiert …</string>
<string name="DLG_hour_minutes">Zeit (Stunden : Minuten)</string>
<string name="DLG_undo">Rückgängig</string>
@ -215,7 +214,6 @@
</string-array>
<string name="BFE_Active">Meine Aufgaben</string>
<string name="BFE_Recent">Kürzlich bearbeitet</string>
<string name="BFE_Saved_delete">Filter löschen</string>
<string name="CFA_filterName_hint">Benennen Sie den Filter, um ihn zu speichern …</string>
<string name="CFA_universe_all">Aktuelle Aufgaben</string>
<string name="CFA_type_add">oder</string>

@ -30,7 +30,6 @@
<string name="write_permission_label">Άδεια Εργασιών</string>
<string name="write_permission_desc">δημιουργία νέων εργασιών, επεξεργασία εργασιών</string>
<string name="DLG_delete_this_task_question">Διαγραφή εργασίας;</string>
<string name="DLG_delete_this_item_question">Διαγραφή του αντικειμένου: %s?</string>
<string name="DLG_upgrading">Αναβάθμιση των εργασιών σας...</string>
<string name="DLG_hour_minutes">Ώρα (ώρες : λεπτά)</string>
<string name="DLG_undo">Αναίρεση</string>
@ -211,7 +210,6 @@
<item>Όταν λήξει</item>
<item>Στην λήξη η και μετά</item>
</string-array>
<string name="BFE_Saved_delete">Διαγραφή φίλτρου</string>
<string name="CFA_type_add">ή</string>
<string name="CFA_type_subtract">μή</string>
<string name="CFA_type_intersect">επίσης</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Permisos de Tasks</string>
<string name="write_permission_desc">crear nuevas tareas, editar tareas existentes</string>
<string name="DLG_delete_this_task_question">¿Borrar esta tarea?</string>
<string name="DLG_delete_this_item_question">¿Eliminar este elemento: %s?</string>
<string name="DLG_upgrading">Actualizando sus tareas....</string>
<string name="DLG_hour_minutes">Tiempo (horas : minutos)</string>
<string name="DLG_undo">Deshacer</string>
@ -215,7 +214,6 @@
</string-array>
<string name="BFE_Active">Mis Tareas</string>
<string name="BFE_Recent">Recién modificadas</string>
<string name="BFE_Saved_delete">Borrar filtro</string>
<string name="CFA_filterName_hint">Da nombre al filtro para grabarlo...</string>
<string name="CFA_universe_all">Tareas activas</string>
<string name="CFA_type_add">o</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Permission d\'Tasks</string>
<string name="write_permission_desc">créer de nouvelles tâches, modifier les tâches existantes</string>
<string name="DLG_delete_this_task_question">Supprimer cette tâche ?</string>
<string name="DLG_delete_this_item_question">Effacer cet élément: %s</string>
<string name="DLG_upgrading">Mise à jour de vos tâches…</string>
<string name="DLG_hour_minutes">Temps (heures : minutes)</string>
<string name="DLG_undo">Annuler Action</string>
@ -212,7 +211,6 @@
</string-array>
<string name="BFE_Active">Mes tâches</string>
<string name="BFE_Recent">Récemment modifié</string>
<string name="BFE_Saved_delete">Supprimer le filtre</string>
<string name="CFA_filterName_hint">Donnez un nom à ce filtre pour le sauver...</string>
<string name="CFA_universe_all">Tâches actives</string>
<string name="CFA_type_add">ou</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Permessi Tasks</string>
<string name="write_permission_desc">crea nuove attività, modifica le attività esistenti</string>
<string name="DLG_delete_this_task_question">Eliminare questa attività?</string>
<string name="DLG_delete_this_item_question">Cancella questo articolo: %s?</string>
<string name="DLG_upgrading">Aggiornare le attività ...</string>
<string name="DLG_hour_minutes">Tempo (ore : minuti)</string>
<string name="DLG_undo">Annulla l\'ultima azione</string>
@ -191,7 +190,6 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat
</string-array>
<string name="BFE_Active">Le mie attività</string>
<string name="BFE_Recent">Modificate di recente</string>
<string name="BFE_Saved_delete">Cancella Filtro</string>
<string name="CFA_filterName_hint">Dai un nome al filtro per salvarlo...</string>
<string name="CFA_universe_all">Attività in corso</string>
<string name="CFA_type_add">o</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">הרשאות אסטריד</string>
<string name="write_permission_desc">יצירת משימות חדשות, עריכת משימות קיימות.</string>
<string name="DLG_delete_this_task_question">למחוק משימה זו?</string>
<string name="DLG_delete_this_item_question">למחוק את %s?</string>
<string name="DLG_upgrading">משדרגת את משימותיך...</string>
<string name="DLG_hour_minutes">זמן (שעות : דקות)</string>
<string name="DLG_undo">בטל פעולה אחרונה</string>
@ -211,7 +210,6 @@
</string-array>
<string name="BFE_Active">המשימות שלי</string>
<string name="BFE_Recent">עודכנו לאחרונה</string>
<string name="BFE_Saved_delete">מַחֲקִי מַסְנֵן</string>
<string name="CFA_filterName_hint">בחר שם לַמַּסְנֵן כדי לשמור אותו...</string>
<string name="CFA_universe_all">משימות פעילות</string>
<string name="CFA_type_add">או</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">タスクの読み込み</string>
<string name="write_permission_desc">タスクの作成、編集</string>
<string name="DLG_delete_this_task_question">このタスクを削除しますか?</string>
<string name="DLG_delete_this_item_question">項目 %s を削除しますか?</string>
<string name="DLG_upgrading">タスクを更新しています</string>
<string name="DLG_hour_minutes">時間 (時:分)</string>
<string name="DLG_undo">動作を取り消す</string>
@ -219,7 +218,6 @@
</string-array>
<string name="BFE_Active">私のタスク</string>
<string name="BFE_Recent">最近編集したタスク</string>
<string name="BFE_Saved_delete">フィルタの削除</string>
<string name="CFA_filterName_hint">フィルタの名称</string>
<string name="CFA_universe_all">進行中のタスク</string>
<string name="CFA_type_add">または</string>

@ -31,7 +31,6 @@
<string name="write_permission_label">Tasks 권한</string>
<string name="write_permission_desc">새 일정 생성하기, 기존 일정 편집하기</string>
<string name="DLG_delete_this_task_question">이 일정을 삭제할까요?</string>
<string name="DLG_delete_this_item_question">이 항목을 삭제할까요: %s?</string>
<string name="DLG_upgrading">일정 업그레이드 중...</string>
<string name="DLG_hour_minutes">시간 (시 : 분)</string>
<string name="DLG_undo">실행 취소</string>
@ -222,7 +221,6 @@ Tasks의 백업에서 당신의 일정을 복구하시기 바랍니다.
</string-array>
<string name="BFE_Active">나의 일정</string>
<string name="BFE_Recent">최근에 수정한 일정</string>
<string name="BFE_Saved_delete">필터 삭제</string>
<string name="CFA_filterName_hint">저장할 필터 이름을 정하세요...</string>
<string name="CFA_universe_all">실행중인 일정</string>
<string name="CFA_type_add">또는</string>

@ -23,7 +23,6 @@
<string name="write_permission_label">Tasks Tillatelse</string>
<string name="write_permission_desc">opprett nye oppgaver, rediger eksisterende oppgaver</string>
<string name="DLG_delete_this_task_question">Slett denne oppgaven?</string>
<string name="DLG_delete_this_item_question">Slett følgende: %s?</string>
<string name="DLG_upgrading">Oppgraderer oppgavene dine...</string>
<string name="DLG_hour_minutes">Tid (timer : minutter)</string>
<string name="WID_dateButtonUnset">Klikk for å sette</string>
@ -104,7 +103,6 @@
</string-array>
<string name="BFE_Active">Aktive oppgaver</string>
<string name="BFE_Recent">Nylig endret</string>
<string name="BFE_Saved_delete">Slett filter</string>
<string name="CFA_filterName_hint">Lagre dette filteret ved å gi det et navn...</string>
<string name="CFA_universe_all">Aktive oppgaver</string>
<string name="CFA_type_add">eller</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Taak toestemmingen</string>
<string name="write_permission_desc">nieuwe taken maken, bestaande wijzigen</string>
<string name="DLG_delete_this_task_question">Taak verwijderen?</string>
<string name="DLG_delete_this_item_question">Dit item verwijderen: %s?</string>
<string name="DLG_upgrading">Taken bijwerken...</string>
<string name="DLG_hour_minutes">Tijd (uren : minuten)</string>
<string name="DLG_undo">Ongedaan Maken</string>
@ -212,7 +211,6 @@
</string-array>
<string name="BFE_Active">Mijn taken</string>
<string name="BFE_Recent">Onlangs aangepast</string>
<string name="BFE_Saved_delete">Filter verwijderen</string>
<string name="CFA_filterName_hint">Naam geven om op te slaan...</string>
<string name="CFA_universe_all">Actieve taken</string>
<string name="CFA_type_add">of</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Zezwolenia Tasks</string>
<string name="write_permission_desc">twórz nowe zadania, edytuj bieżące zadania</string>
<string name="DLG_delete_this_task_question">Usunąć to zadanie?</string>
<string name="DLG_delete_this_item_question">Usunąć element: %s?</string>
<string name="DLG_upgrading">Uaktualniam Twoje zadania...</string>
<string name="DLG_hour_minutes">Czas (godziny : minuty)</string>
<string name="DLG_undo">Cofnij</string>
@ -214,7 +213,6 @@ i odzyskanie zadań z kopi zapasowej (Settings-&gt;Sync and backup-&gt;Backup-&g
</string-array>
<string name="BFE_Active">Moje zadania</string>
<string name="BFE_Recent">Niedawno zmodyfikowane</string>
<string name="BFE_Saved_delete">Usuń filtr</string>
<string name="CFA_filterName_hint">Nazwij filtr w celu zapisania...</string>
<string name="CFA_universe_all">Aktywne zadania</string>
<string name="CFA_type_add">albo</string>

@ -27,7 +27,6 @@
<string name="write_permission_label">Permissões do Tasks</string>
<string name="write_permission_desc">criar novas tarefas, editar tarefas existentes</string>
<string name="DLG_delete_this_task_question">Excluir esta tarefa?</string>
<string name="DLG_delete_this_item_question">Excluir este item: %s?</string>
<string name="DLG_upgrading">Atualizando suas tarefas...</string>
<string name="DLG_hour_minutes">Horário (horas:minutos)</string>
<string name="DLG_undo">Desfazer</string>
@ -210,7 +209,6 @@
</string-array>
<string name="BFE_Active">Minhas Tarefas</string>
<string name="BFE_Recent">Modificadas recentemente</string>
<string name="BFE_Saved_delete">Excluir Filtro</string>
<string name="CFA_filterName_hint">Nome do filtro a salvar...</string>
<string name="CFA_universe_all">Tarefas ativas</string>
<string name="CFA_type_add">OU</string>

@ -30,7 +30,6 @@
<string name="write_permission_label">Permissões do Tasks</string>
<string name="write_permission_desc">criar novas tarefas, editar tarefas existentes</string>
<string name="DLG_delete_this_task_question">Remover esta tarefa?</string>
<string name="DLG_delete_this_item_question">Remover este item: %s?</string>
<string name="DLG_upgrading">Atualização de tarefas...</string>
<string name="DLG_hour_minutes">Tempo (horas:minutos)</string>
<string name="DLG_undo">Anular</string>
@ -220,7 +219,6 @@ das tarefas através de um backup em Definições-&gt;Sincronização e backup-&
</string-array>
<string name="BFE_Active">Minhas tarefas</string>
<string name="BFE_Recent">Alteradas recentemente</string>
<string name="BFE_Saved_delete">Eliminar filtro</string>
<string name="CFA_filterName_hint">Nome do filtro...</string>
<string name="CFA_universe_all">Tarefas ativas</string>
<string name="CFA_type_add">ou</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Право Tasks</string>
<string name="write_permission_desc">создание новых и редактирование существующих задач</string>
<string name="DLG_delete_this_task_question">Удалить эту задачу?</string>
<string name="DLG_delete_this_item_question">Удалить этот элемент: %s?</string>
<string name="DLG_upgrading">Обновление ваших задач…</string>
<string name="DLG_hour_minutes">Время (час : мин)</string>
<string name="DLG_undo">Отмена</string>
@ -219,7 +218,6 @@
</string-array>
<string name="BFE_Active">Мои задачи</string>
<string name="BFE_Recent">Недавно изменённые</string>
<string name="BFE_Saved_delete">Удалить фильтр</string>
<string name="CFA_filterName_hint">Задайте имя фильтра для его сохранения…</string>
<string name="CFA_universe_all">Активные задачи</string>
<string name="CFA_type_add">или</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks povolenia</string>
<string name="write_permission_desc">Vytvoriť nové úlohy, upraviť existujúce úlohy</string>
<string name="DLG_delete_this_task_question">Vymazať túto úlohu?</string>
<string name="DLG_delete_this_item_question">Vymazať túto položku: %s?</string>
<string name="DLG_upgrading">Aktualizácia tvojich úloh...</string>
<string name="DLG_hour_minutes">Čas (hodiny : minúty)</string>
<string name="DLG_undo">Späť</string>
@ -217,7 +216,6 @@
</string-array>
<string name="BFE_Active">Moje úlohy</string>
<string name="BFE_Recent">Naposledy upravené</string>
<string name="BFE_Saved_delete">Vymazať filter</string>
<string name="CFA_filterName_hint">Pomenuj tento filter pre uloženie</string>
<string name="CFA_universe_all">Aktívne úlohy</string>
<string name="CFA_type_add">alebo</string>

@ -31,7 +31,6 @@
<string name="write_permission_label">Dovoljenje Opravkom</string>
<string name="write_permission_desc">ustvari nove opravke, uredi obstoječe opravke</string>
<string name="DLG_delete_this_task_question">Zbrišem ta opravek?</string>
<string name="DLG_delete_this_item_question">Zbrišem ta predmet: %s?</string>
<string name="DLG_upgrading">Nadgrajujem tvoje opravke...</string>
<string name="DLG_hour_minutes">Čas (ure : minute)</string>
<string name="DLG_undo">Razveljavi</string>
@ -214,7 +213,6 @@
</string-array>
<string name="BFE_Active">Moji Opravki</string>
<string name="BFE_Recent">Nedavno spremenjeno</string>
<string name="BFE_Saved_delete">Zbriši filter</string>
<string name="CFA_filterName_hint">Poimenuj ta filter, da se shrani.</string>
<string name="CFA_universe_all">Aktivni Opravki</string>
<string name="CFA_type_add">na dan</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks Tillstånd</string>
<string name="write_permission_desc">skapa nya uppgifter, redigera existerande uppgifter</string>
<string name="DLG_delete_this_task_question">Radera denna uppgift?</string>
<string name="DLG_delete_this_item_question">Radera följande: %s?</string>
<string name="DLG_upgrading">Uppgraderar dina uppgifter...</string>
<string name="DLG_hour_minutes">Tid (timmar : minuter)</string>
<string name="DLG_undo">Ångra</string>
@ -210,7 +209,6 @@ och återställer dina aktuella uppgifter från en backup
</string-array>
<string name="BFE_Active">Mina Uppgifter</string>
<string name="BFE_Recent">Nyligen ändrade</string>
<string name="BFE_Saved_delete">Radera filter</string>
<string name="CFA_filterName_hint">Spara detta filter genom att ge det ett namn</string>
<string name="CFA_universe_all">Aktiva uppgifter</string>
<string name="CFA_type_add">eller</string>

@ -17,7 +17,6 @@
<string name="read_permission_desc">อ่านแผนงาน, แสดงตัวกรองแผนงาน</string>
<string name="write_permission_desc">สร้างแผนงานใหม่, แก้ไขแผนงานเดิม</string>
<string name="DLG_delete_this_task_question">ลบงานนี้?</string>
<string name="DLG_delete_this_item_question">ลบรายการนี้: %s?</string>
<string name="DLG_hour_minutes">เวลา (ชั่วโมง : นาที)</string>
<string name="WID_dateButtonUnset">คลิก เพื่อตั้งค่า</string>
<string name="TLA_no_items">ไม่มีแผนงานใดๆ !</string>
@ -67,7 +66,6 @@
</string-array>
<string name="BFE_Active">แผนงานตอนนี้</string>
<string name="BFE_Recent">เพิ่งถูกแก้ไข</string>
<string name="BFE_Saved_delete">ลบตัวกรอง</string>
<string name="CFA_filterName_hint">ตั้งชื่อตัวกรองเพื่อบันทึก...</string>
<string name="CFA_universe_all">แผนงานตอนนี้</string>
<string name="CFA_type_add">หรือ</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks İzni</string>
<string name="write_permission_desc">yeni görevler oluştur, mevcut görevleri düzenle</string>
<string name="DLG_delete_this_task_question">Bu görev silinsin mi?</string>
<string name="DLG_delete_this_item_question">Öğe silinsin mi: %s?</string>
<string name="DLG_upgrading">Görevleriniz güncelleniyor...</string>
<string name="DLG_hour_minutes">Zaman (saat : dakika)</string>
<string name="DLG_undo">Geri al</string>
@ -190,7 +189,6 @@
<item>Son tarihte ya da aşıldığında</item>
</string-array>
<string name="BFE_Recent">Yakında Değiştirilenler</string>
<string name="BFE_Saved_delete">Süzgeci Sil</string>
<string name="CFA_filterName_hint">Süzgeci kaydetmek için ad yazın...</string>
<string name="CFA_universe_all">Etkin Görevler</string>
<string name="CFA_type_add">ya da</string>

@ -31,7 +31,6 @@
<string name="write_permission_label">Дозволи Tasks</string>
<string name="write_permission_desc">створення нових завдань, редагування існуючих завдань</string>
<string name="DLG_delete_this_task_question">Видалити цю задачу?</string>
<string name="DLG_delete_this_item_question">Видалити цей пункт: %s?</string>
<string name="DLG_upgrading">Оновлення ваших завдань...</string>
<string name="DLG_hour_minutes">Час (години : хвилини)</string>
<string name="DLG_undo">Відмінити</string>
@ -219,7 +218,6 @@
</string-array>
<string name="BFE_Active">Мої завдання</string>
<string name="BFE_Recent">Недавно змінені</string>
<string name="BFE_Saved_delete">Видалити фільтр</string>
<string name="CFA_filterName_hint">Задайте ім\'я фільтра для його збереження ...</string>
<string name="CFA_universe_all">Активні завдання</string>
<string name="CFA_type_add">або</string>

@ -28,7 +28,6 @@
<string name="write_permission_label">清单小助理权限</string>
<string name="write_permission_desc">创建新任务,修改现有任务</string>
<string name="DLG_delete_this_task_question">确认删除?</string>
<string name="DLG_delete_this_item_question">删除此项目:%s</string>
<string name="DLG_upgrading">升级您的任务...</string>
<string name="DLG_hour_minutes">时间(小时:分钟)</string>
<string name="DLG_undo">撤消</string>
@ -170,7 +169,6 @@
<item>截止期限或过期时</item>
</string-array>
<string name="BFE_Recent">最近修改过的</string>
<string name="BFE_Saved_delete">删除筛选</string>
<string name="CFA_filterName_hint">命名筛选并保存...</string>
<string name="CFA_universe_all">进行中的任务</string>
<string name="CFA_type_add"></string>

@ -28,7 +28,6 @@
<string name="write_permission_label">Tasks 權限</string>
<string name="write_permission_desc">建立新工作, 修改現行工作</string>
<string name="DLG_delete_this_task_question">確認刪除?</string>
<string name="DLG_delete_this_item_question">刪除此項目: %s?</string>
<string name="DLG_upgrading">升級您的工作...</string>
<string name="DLG_hour_minutes">時間 (小時:分鐘)</string>
<string name="DLG_undo">撤消</string>
@ -201,7 +200,6 @@
</string-array>
<string name="BFE_Active">我的工作</string>
<string name="BFE_Recent">最近修改過</string>
<string name="BFE_Saved_delete">刪除篩選</string>
<string name="CFA_filterName_hint">命名篩選並儲存...</string>
<string name="CFA_universe_all">進行中的工作</string>
<string name="CFA_type_add"></string>

@ -20,9 +20,6 @@
<!-- question for deleting tasks -->
<string name="DLG_delete_this_task_question">Delete this task?</string>
<!-- question for deleting items (%s => item name) -->
<string name="DLG_delete_this_item_question">Delete this item: %s?</string>
<!-- Progress dialog shown when upgrading -->
<string name="DLG_upgrading">Upgrading your tasks...</string>

@ -9,9 +9,6 @@
<!-- slide 10b: Recently Modified -->
<string name="BFE_Recent">Recently Modified</string>
<!-- Saved Filters Context Menu: delete -->
<string name="BFE_Saved_delete">Delete Filter</string>
<!-- =========================================== CustomFilterActivity == -->
<!-- slide 30e: Filter Name edit box hint (if user types here, filter will be saved) -->

@ -119,6 +119,7 @@
<string name="discard">Discard</string>
<string name="tag_settings">Tag Settings</string>
<string name="delete">Delete</string>
<string name="filter_settings">Filter Settings</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->

Loading…
Cancel
Save