Deleted .svn files, renamed some stuff, worked on data layer until it was good.

pull/14/head
Tim Su 15 years ago
parent f78f2c3720
commit 288a7a4bdd

@ -1,5 +0,0 @@
K 25
svn:wc:ra_dav:version-url
V 29
/svn/!svn/ver/9/trunk/src/com
END

@ -1,31 +0,0 @@
10
dir
9
http://sql-dsl.googlecode.com/svn/trunk/src/com
http://sql-dsl.googlecode.com/svn
2009-09-14T16:21:07.644789Z
9
skyairmj
425b5e3a-bc29-11dd-9cb5-179210ed59e1
thoughtworks
dir

@ -1,5 +0,0 @@
K 25
svn:wc:ra_dav:version-url
V 42
/svn/!svn/ver/9/trunk/src/com/thoughtworks
END

@ -1,31 +0,0 @@
10
dir
9
http://sql-dsl.googlecode.com/svn/trunk/src/com/thoughtworks
http://sql-dsl.googlecode.com/svn
2009-09-14T16:21:07.644789Z
9
skyairmj
425b5e3a-bc29-11dd-9cb5-179210ed59e1
sql
dir

@ -1,89 +0,0 @@
K 25
svn:wc:ra_dav:version-url
V 46
/svn/!svn/ver/9/trunk/src/com/thoughtworks/sql
END
Join.java
K 25
svn:wc:ra_dav:version-url
V 56
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/Join.java
END
JoinType.java
K 25
svn:wc:ra_dav:version-url
V 60
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/JoinType.java
END
Field.java
K 25
svn:wc:ra_dav:version-url
V 57
/svn/!svn/ver/9/trunk/src/com/thoughtworks/sql/Field.java
END
EqCriterion.java
K 25
svn:wc:ra_dav:version-url
V 63
/svn/!svn/ver/6/trunk/src/com/thoughtworks/sql/EqCriterion.java
END
Query.java
K 25
svn:wc:ra_dav:version-url
V 57
/svn/!svn/ver/9/trunk/src/com/thoughtworks/sql/Query.java
END
GroupBy.java
K 25
svn:wc:ra_dav:version-url
V 59
/svn/!svn/ver/8/trunk/src/com/thoughtworks/sql/GroupBy.java
END
Table.java
K 25
svn:wc:ra_dav:version-url
V 57
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/Table.java
END
Operator.java
K 25
svn:wc:ra_dav:version-url
V 60
/svn/!svn/ver/6/trunk/src/com/thoughtworks/sql/Operator.java
END
Order.java
K 25
svn:wc:ra_dav:version-url
V 57
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/Order.java
END
DBObject.java
K 25
svn:wc:ra_dav:version-url
V 60
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/DBObject.java
END
Constants.java
K 25
svn:wc:ra_dav:version-url
V 61
/svn/!svn/ver/6/trunk/src/com/thoughtworks/sql/Constants.java
END
UnaryCriterion.java
K 25
svn:wc:ra_dav:version-url
V 66
/svn/!svn/ver/6/trunk/src/com/thoughtworks/sql/UnaryCriterion.java
END
OrderType.java
K 25
svn:wc:ra_dav:version-url
V 61
/svn/!svn/ver/2/trunk/src/com/thoughtworks/sql/OrderType.java
END
Criterion.java
K 25
svn:wc:ra_dav:version-url
V 61
/svn/!svn/ver/9/trunk/src/com/thoughtworks/sql/Criterion.java
END

@ -1,504 +0,0 @@
10
dir
9
http://sql-dsl.googlecode.com/svn/trunk/src/com/thoughtworks/sql
http://sql-dsl.googlecode.com/svn
2009-09-14T16:21:07.644789Z
9
skyairmj
425b5e3a-bc29-11dd-9cb5-179210ed59e1
Join.java
file
2010-05-06T06:36:13.019258Z
c1e5f7f7d7d81ad72b1f07ab99820ab5
2008-11-27T02:38:24.003892Z
2
skyairmj
1443
JoinType.java
file
2010-05-06T06:36:13.019258Z
df10b08c524945571f70238293721b11
2008-11-27T02:38:24.003892Z
2
skyairmj
89
Field.java
file
2010-05-06T06:36:13.019258Z
4d4527967174e402c342b88b220dcb42
2009-09-14T16:21:07.644789Z
9
skyairmj
2649
EqCriterion.java
file
2010-05-06T06:36:13.019258Z
f5df9e0718577c4fff1f1e6c1d3aed5b
2008-11-28T15:27:46.936810Z
6
skyairmj
247
Query.java
file
2010-05-06T06:36:13.019258Z
645cd8c0ce2c6a4c718b8aae93c33c09
2009-09-14T16:21:07.644789Z
9
skyairmj
4347
GroupBy.java
file
2010-05-06T06:36:13.019258Z
207373b4f7bb84163e84a848ffe64f1c
2008-12-04T13:44:00.210147Z
8
skyairmj
335
Table.java
file
2010-05-06T06:36:13.019258Z
459da435c7835c3324e249cd05c96013
2008-11-27T02:38:24.003892Z
2
skyairmj
455
Operator.java
file
2010-05-06T06:36:13.029258Z
c7825d746fdfaf34522c6c4883de0cca
2008-11-28T15:27:46.936810Z
6
skyairmj
2137
Order.java
file
2010-05-06T06:36:13.029258Z
15d650e70ceca0ebf670feff4b7c65fb
2008-11-27T02:38:24.003892Z
2
skyairmj
740
DBObject.java
file
2010-05-06T06:36:13.029258Z
0911aae9fbf364ab5ac3286f2edcab7c
2008-11-27T02:38:24.003892Z
2
skyairmj
1456
Constants.java
file
2010-05-06T06:36:13.029258Z
1e42cd9e9b62c0ef16b66de997b7d53b
2008-11-28T15:27:46.936810Z
6
skyairmj
818
UnaryCriterion.java
file
2010-05-06T06:36:13.029258Z
2047998a7b77e8ca3b4c4bb4049025cd
2008-11-28T15:27:46.936810Z
6
skyairmj
2328
OrderType.java
file
2010-05-06T06:36:13.029258Z
07e3e9d757d9b3dfb87cfa71e2d9daac
2008-11-27T02:38:24.003892Z
2
skyairmj
76
Criterion.java
file
2010-05-06T06:36:13.029258Z
39757450b5a87a9501ab77fe3c5f9f16
2009-09-14T16:21:07.644789Z
9
skyairmj
2222

@ -1,22 +0,0 @@
package com.thoughtworks.sql;
public class Constants {
static final String SELECT = "SELECT";
static final String SPACE = " ";
static final String AS = "AS";
static final String COMMA = ",";
static final String FROM = "FROM";
static final String ON = "ON";
static final String JOIN = "JOIN";
static final String ALL = "*";
static final String LEFT_PARENTHESIS = "(";
static final String RIGHT_PARENTHESIS = ")";
static final String AND = "AND";
static final String BETWEEN = "BETWEEN";
static final String LIKE = "LIKE";
static final String OR = "OR";
static final String ORDER_BY = "ORDER BY";
static final String GROUP_BY = "GROUP BY";
static final String WHERE = "WHERE";
public static final String EXISTS = "EXISTS";
}

@ -1,69 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.AND;
import static com.thoughtworks.sql.Constants.EXISTS;
import static com.thoughtworks.sql.Constants.LEFT_PARENTHESIS;
import static com.thoughtworks.sql.Constants.OR;
import static com.thoughtworks.sql.Constants.RIGHT_PARENTHESIS;
import static com.thoughtworks.sql.Constants.SPACE;
public abstract class Criterion {
protected final Operator operator;
Criterion(Operator operator) {
this.operator = operator;
}
public static Criterion and(final Criterion criterion, final Criterion... criterions) {
return new Criterion(Operator.and) {
protected void populate(StringBuilder sb) {
sb.append(criterion);
for (Criterion criterion : criterions) {
sb.append(SPACE).append(AND).append(SPACE).append(criterion);
}
}
};
}
public static Criterion or(final Criterion criterion, final Criterion... criterions) {
return new Criterion(Operator.or) {
protected void populate(StringBuilder sb) {
sb.append(criterion);
for (Criterion criterion : criterions) {
sb.append(SPACE).append(OR).append(SPACE).append(criterion.toString());
}
}
};
}
public static Criterion exists(final Query query) {
return new Criterion(Operator.exists) {
protected void populate(StringBuilder sb) {
sb.append(EXISTS).append(SPACE).append(LEFT_PARENTHESIS).append(query).append(RIGHT_PARENTHESIS);
}
};
}
public static Criterion not(Criterion criterion) {
return new Criterion(null) {
protected void populate(StringBuilder sb) {
}
};
}
protected abstract void populate(StringBuilder sb);
@Override
public String toString() {
StringBuilder builder = new StringBuilder(LEFT_PARENTHESIS);
populate(builder);
builder.append(RIGHT_PARENTHESIS);
return builder.toString();
}
}

@ -1,51 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.SPACE;
import static com.thoughtworks.sql.Constants.AS;
public abstract class DBObject<T extends DBObject> {
protected String alias;
protected final String expression;
protected DBObject(String expression){
this.expression = expression;
}
public T as(String alias) {
this.alias = alias;
return (T) this;
}
public boolean hasAlias() {
return alias != null;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DBObject dbObject = (DBObject) o;
if (alias != null ? !alias.equals(dbObject.alias) : dbObject.alias != null) return false;
if (expression != null ? !expression.equals(dbObject.expression) : dbObject.expression != null) return false;
return true;
}
@Override
public int hashCode() {
int result = alias != null ? alias.hashCode() : 0;
result = 31 * result + (expression != null ? expression.hashCode() : 0);
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder(expression);
if (hasAlias()) {
sb.append(SPACE).append(AS).append(SPACE).append(alias);
}
return sb.toString();
}
}

@ -1,10 +0,0 @@
package com.thoughtworks.sql;
public class EqCriterion extends UnaryCriterion {
private final Object value;
EqCriterion(Field field, Object value) {
super(field, Operator.eq, value);
this.value = value;
}
}

@ -1,83 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.AND;
import static com.thoughtworks.sql.Constants.BETWEEN;
import static com.thoughtworks.sql.Constants.COMMA;
import static com.thoughtworks.sql.Constants.LEFT_PARENTHESIS;
import static com.thoughtworks.sql.Constants.RIGHT_PARENTHESIS;
import static com.thoughtworks.sql.Constants.SPACE;
public class Field extends DBObject<Field> {
protected Field(String expression) {
super(expression);
}
public static Field field(String expression) {
return new Field(expression);
}
public Criterion eq(Object value) {
return UnaryCriterion.eq(this, value);
}
public Criterion neq(Object value) {
return UnaryCriterion.neq(this, value);
}
public Criterion gt(Object value) {
return UnaryCriterion.gt(this, value);
}
public Criterion lt(final Object value) {
return UnaryCriterion.lt(this, value);
}
public Criterion isNull() {
return UnaryCriterion.isNull(this);
}
public Criterion isNotNull() {
return UnaryCriterion.isNotNull(this);
}
public Criterion between(final Object lower, final Object upper) {
final Field field = this;
return new Criterion(null) {
protected void populate(StringBuilder sb) {
sb.append(field).append(SPACE).append(BETWEEN).append(SPACE).append(lower).append(SPACE).append(AND)
.append(SPACE).append(upper);
}
};
}
public Criterion like(final String value) {
return UnaryCriterion.like(this, value);
}
public <T> Criterion in(final T... value) {
final Field field = this;
return new Criterion(Operator.in) {
protected void populate(StringBuilder sb) {
sb.append(field).append(SPACE).append(Operator.in).append(SPACE).append(LEFT_PARENTHESIS);
for (T t : value) {
sb.append(t.toString()).append(COMMA);
}
sb.deleteCharAt(sb.length() - 1).append(RIGHT_PARENTHESIS);
}
};
}
public Criterion in(final Field expression, final Query query) {
final Field field = this;
return new Criterion(Operator.in) {
protected void populate(StringBuilder sb) {
sb.append(field).append(SPACE).append(Operator.in).append(SPACE).append(LEFT_PARENTHESIS).append(query)
.append(RIGHT_PARENTHESIS);
}
};
}
}

@ -1,14 +0,0 @@
package com.thoughtworks.sql;
import java.util.List;
import java.util.ArrayList;
public class GroupBy {
private List<Field> fields = new ArrayList<Field>();
public static GroupBy groupBy(Field field) {
GroupBy groupBy = new GroupBy();
groupBy.fields.add(field);
return groupBy;
}
}

@ -1,43 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.SPACE;
import static com.thoughtworks.sql.Constants.JOIN;
import static com.thoughtworks.sql.Constants.ON;
public class Join {
private final Table joinTable;
private final JoinType joinType;
private final Criterion[] criterions;
private Join(Table table, JoinType joinType, Criterion... criterions) {
joinTable = table;
this.joinType = joinType;
this.criterions = criterions;
}
public static Join inner(Table expression, Criterion... criterions) {
return new Join(expression, JoinType.INNER, criterions);
}
public static Join left(Table table, Criterion... criterions) {
return new Join(table, JoinType.LEFT, criterions);
}
public static Join right(Table table, Criterion... criterions) {
return new Join(table, JoinType.RIGHT, criterions);
}
public static Join out(Table table, Criterion... criterions) {
return new Join(table, JoinType.OUT, criterions);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(joinType).append(SPACE).append(JOIN).append(SPACE).append(joinTable).append(SPACE).append(ON);
for (Criterion criterion : criterions) {
sb.append(SPACE).append(criterion);
}
return sb.toString();
}
}

@ -1,5 +0,0 @@
package com.thoughtworks.sql;
public enum JoinType {
INNER, LEFT, RIGHT, OUT
}

@ -1,57 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.SPACE;
import java.util.HashMap;
import java.util.Map;
public final class Operator {
private final String operator;
private static final Operator ZERO = new Operator("");
public static final Operator eq = new Operator("=");
public static final Operator neq = new Operator("<>");
public static final Operator isNull = new Operator("IS NULL");
public static final Operator isNotNull = new Operator("IS NOT NULL");
public static final Operator gt = new Operator(">");
public static final Operator lt = new Operator("<");
public static final Operator gte = new Operator(">=");
public static final Operator lte = new Operator("<=");
public static final Operator and = new Operator("AND");
public static final Operator or = new Operator("OR");
public static final Operator not = new Operator("NOT");
public static final Operator exists = new Operator("EXISTS");
public static final Operator like = new Operator("LIKE");
public static final Operator in = new Operator("IN");
private static final Map<Operator, Operator> contraryRegistry = new HashMap<Operator, Operator>();
static {
contraryRegistry.put(eq, neq);
contraryRegistry.put(neq, eq);
contraryRegistry.put(isNull, isNotNull);
contraryRegistry.put(isNotNull, isNull);
contraryRegistry.put(gt, lte);
contraryRegistry.put(lte, gt);
contraryRegistry.put(lt, gte);
contraryRegistry.put(gte, lt);
}
private Operator(String operator) {
this.operator = operator;
}
public Operator getContrary() {
if(!contraryRegistry.containsKey(this)){
Operator opposite = new Operator(not.toString() + SPACE + this.toString());
contraryRegistry.put(this, opposite);
contraryRegistry.put(opposite, this);
}
return contraryRegistry.get(this);
}
@Override
public String toString() {
return this.operator.toString();
}
}

@ -1,30 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.SPACE;
public class Order {
private final Field expression;
private final OrderType orderType;
private Order(Field expression) {
this(expression, OrderType.ASC);
}
private Order(Field expression, OrderType orderType) {
this.expression = expression;
this.orderType = orderType;
}
public static Order asc(Field expression) {
return new Order(expression);
}
public static Order desc(Field expression) {
return new Order(expression, OrderType.DESC);
}
@Override
public String toString() {
return expression + SPACE + orderType;
}
}

@ -1,5 +0,0 @@
package com.thoughtworks.sql;
public enum OrderType {
DESC, ASC
}

@ -1,153 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.*;
import static com.thoughtworks.sql.Table.table;
import java.util.ArrayList;
import static java.util.Arrays.asList;
import java.util.List;
public class Query {
private Table table;
private List<Criterion> criterions = new ArrayList<Criterion>();
private List<Field> fields = new ArrayList<Field>();
private List<Join> joins = new ArrayList<Join>();
private List<Field> groupBies = new ArrayList<Field>();
private List<Order> orders = new ArrayList<Order>();
private List<Criterion> havings = new ArrayList<Criterion>();
private Query(Field... fields) {
this.fields.addAll(asList(fields));
}
public static Query select(Field... fields) {
return new Query(fields);
}
public Query from(Table table) {
this.table = table;
return this;
}
public Query join(Join... join) {
joins.addAll(asList(join));
return this;
}
public Query where(Criterion criterion) {
criterions.add(criterion);
return this;
}
public Query groupBy(Field... groupBy) {
groupBies.addAll(asList(groupBy));
return this;
}
public Query orderBy(Order... order) {
orders.addAll(asList(order));
return this;
}
public Query appendSelectFields(Field... fields) {
this.fields.addAll(asList(fields));
return this;
}
@Override
public boolean equals(Object o) {
return this == o || !(o == null || getClass() != o.getClass()) && this.toString().equals(o.toString());
}
@Override
public int hashCode() {
return toString().hashCode();
}
@Override
public String toString() {
StringBuilder sql = new StringBuilder();
visitSelectClause(sql);
visitFromClause(sql);
visitJoinClause(sql);
visitWhereClause(sql);
visitGroupByClause(sql);
visitOrderByClause(sql);
return sql.toString();
}
private void visitOrderByClause(StringBuilder sql) {
if (orders.isEmpty()) {
return;
}
sql.append(ORDER_BY);
for (Order order : orders) {
sql.append(SPACE).append(order).append(COMMA);
}
sql.deleteCharAt(sql.length() - 1).append(SPACE);
}
private void visitGroupByClause(StringBuilder sql) {
if (groupBies.isEmpty()) {
return;
}
sql.append(GROUP_BY);
for (Field groupBy : groupBies) {
sql.append(SPACE).append(groupBy).append(COMMA);
}
sql.deleteCharAt(sql.length() - 1).append(SPACE);
if (havings.isEmpty()) {
return;
}
sql.append("HAVING");
for (Criterion havingCriterion : havings) {
sql.append(SPACE).append(havingCriterion).append(COMMA);
}
sql.deleteCharAt(sql.length() - 1).append(SPACE);
}
private void visitWhereClause(StringBuilder sql) {
if (criterions.isEmpty()) {
return;
}
sql.append(WHERE);
for (Criterion criterion : criterions) {
sql.append(SPACE).append(criterion).append(SPACE);
}
}
private void visitJoinClause(StringBuilder sql) {
for (Join join : joins) {
sql.append(join).append(SPACE);
}
}
private void visitFromClause(StringBuilder sql) {
if (table == null) {
return;
}
sql.append(FROM).append(SPACE).append(table).append(SPACE);
}
private void visitSelectClause(StringBuilder sql) {
sql.append(SELECT).append(SPACE);
if (fields.isEmpty()) {
sql.append(ALL).append(SPACE);
return;
}
for (Field field : fields) {
sql.append(field).append(COMMA);
}
sql.deleteCharAt(sql.length() - 1).append(SPACE);
}
public Table as(String alias) {
return table(LEFT_PARENTHESIS + this.toString() + RIGHT_PARENTHESIS).as(alias);
}
public Query having(Criterion criterion) {
this.havings.add(criterion);
return this;
}
}

@ -1,19 +0,0 @@
package com.thoughtworks.sql;
public class Table extends DBObject<Table> {
protected Table(String expression) {
super(expression);
}
public static Table table(String table) {
return new Table(table);
}
public Field field(String fieldName) {
if (hasAlias()) {
return Field.field(alias + "." + fieldName);
}
return Field.field(expression+"."+fieldName);
}
}

@ -1,75 +0,0 @@
package com.thoughtworks.sql;
import static com.thoughtworks.sql.Constants.SPACE;
public class UnaryCriterion extends Criterion {
protected final Field expression;
protected final Object value;
UnaryCriterion(Field expression, Operator operator, Object value) {
super(operator);
this.expression = expression;
this.value = value;
}
protected void populate(StringBuilder sb) {
beforePopulateOperator(sb);
populateOperator(sb);
afterPopulateOperator(sb);
}
public static Criterion eq(Field expression, Object value) {
return new UnaryCriterion(expression, Operator.eq, value);
}
protected void beforePopulateOperator(StringBuilder sb) {
sb.append(expression);
}
protected void populateOperator(StringBuilder sb) {
sb.append(operator);
}
protected void afterPopulateOperator(StringBuilder sb) {
sb.append(value == null ? "" : value);
}
public static Criterion neq(Field field, Object value) {
return new UnaryCriterion(field, Operator.neq, value);
}
public static Criterion gt(Field field, Object value) {
return new UnaryCriterion(field, Operator.gt, value);
}
public static Criterion lt(Field field, Object value) {
return new UnaryCriterion(field, Operator.lt, value);
}
public static Criterion isNull(Field field) {
return new UnaryCriterion(field, Operator.isNull, null) {
@Override
protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator);
}
};
}
public static Criterion isNotNull(Field field) {
return new UnaryCriterion(field, Operator.isNotNull, null) {
@Override
protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator);
}
};
}
public static Criterion like(Field field, String value) {
return new UnaryCriterion(field, Operator.like, value) {
@Override
protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator).append(SPACE);
}
};
}
}

@ -0,0 +1,514 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
ASTRID: Android's Simple Task Recording Dashboard
Copyright (c) 2009 Tim Su
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- General String Constants -->
<skip />
<!-- Importance Labels -->
<string name="importance_1">!!!!</string>
<string name="importance_2">!!!</string>
<string name="importance_3">!!</string>
<string name="importance_4">!</string>
<!-- Repeat Interval Labels -->
<string name="repeat_days">Day(s)</string>
<string name="repeat_weeks">Week(s)</string>
<string name="repeat_months">Month(s)</string>
<string name="repeat_hours">Hour(s)</string>
<!-- Plurals -->
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 Task</item>
<item quantity="other">%d Tasks</item>
</plurals>
<plurals name="NactiveTasks">
<!-- plurals: active tasks vs total tasks -->
<item quantity="one">%d / %d Active</item>
<item quantity="other">%d / %d Active</item>
</plurals>
<plurals name="Nalarms">
<!-- plurals: alarms -->
<item quantity="one">One Alarm</item>
<item quantity="two">Two Alarms</item>
<item quantity="other">%d Alarms</item>
</plurals>
<plurals name="Ntags">
<!-- plurals: tags -->
<item quantity="one">1 Tag</item>
<item quantity="other">%d Tags</item>
</plurals>
<!-- Time Constants -->
<!-- used for long due dates. c.f. Java's SimpleDateFormat -->
<string name="dateFormatter">MMM d</string>
<!-- used for alarms -->
<string name="alarmDateFormatter">M/dd HH:mm</string>
<!-- vertical labels are used in dialog boxes -->
<string name="daysVertical">D\na\ny\ns</string>
<string name="hoursVertical">H\no\nu\nr\ns</string>
<plurals name="Ndays">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
<item quantity="other">%d Days</item>
</plurals>
<plurals name="NdaysPreposition">
<!-- plurals: days (used after a preopsition, i.e. due in 5 days) -->
<item quantity="one">1 Day</item>
<item quantity="other">%d Days</item>
</plurals>
<plurals name="Nhours">
<!-- plurals: hours -->
<item quantity="one">1 Hour</item>
<item quantity="other">%d Hours</item>
</plurals>
<plurals name="Nminutes">
<!-- plurals: minutes -->
<item quantity="one">1 Minute</item>
<item quantity="other">%d Minutes</item>
</plurals>
<plurals name="Nseconds">
<!-- plurals: seconds -->
<item quantity="one">1 Second</item>
<item quantity="other">%d Seconds</item>
</plurals>
<plurals name="NhoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Hr</item>
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="NminutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<item quantity="other">%d Min</item>
</plurals>
<plurals name="NsecondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sec</item>
<item quantity="other">%d Sec</item>
</plurals>
<!-- indicates time in past. %s is replaced by time unit i.e. 1 minute -->
<string name="ago_string">%s Ago</string>
<!-- TaskList -->
<skip />
<!-- title bar -->
<string name="taskList_titlePrefix">Astrid: </string>
<string name="taskList_titleTagPrefix">Tagged \"%s\":</string>
<string name="taskList_titleUntagged">Untagged Tasks:</string>
<string name="taskList_hiddenSuffix"> hidden</string>
<string name="addtask_label">New Task</string>
<string name="missing_tag">Could Not Find Requested Tag!</string>
<!-- text displayed in task list item -->
<!-- prefix to show that a task is hidden -->
<string name="taskList_hiddenPrefix">H</string>
<!-- i.e. Due in 4 days -->
<string name="taskList_dueRelativeTime">Due in</string>
<!-- i.e. Due on Jan 2 -->
<string name="taskList_dueAbsoluteDate">Due on</string>
<!-- prefix to deadline -->
<string name="taskList_goalPrefix">Goal</string>
<string name="taskList_overdueBy">Overdue by</string>
<!-- i.e. Finished 4 days ago -->
<string name="taskList_completedPrefix">Finished %s</string>
<!-- i.e. Estimated: 4 hours -->
<string name="taskList_estimatedTimePrefix">Estimated:</string>
<!-- i.e. Spent: 88 minutes. used to indicate time spent on task -->
<string name="taskList_elapsedTimePrefix">Spent:</string>
<!-- time interval to set frequency to remind user -->
<string name="taskList_periodicReminderPrefix">Poke Every</string>
<!-- time interval to set repeated tasks-->
<string name="taskList_repeatPrefix">Repeats Every</string>
<!-- displayed when repeat is on remote server-->
<string name="taskList_repeatsRemotely">Repeats On Remote Server</string>
<string name="taskList_alarmPrefix">Next Alarm:</string>
<string name="taskList_tagsPrefix">Tags:</string>
<string name="taskList_notesPrefix">Notes:</string>
<!-- i.e. Created: <create date> -->
<string name="taskList_createdPrefix">Created:</string>
<!-- i.e. Deleted: <delete date> -->
<string name="taskList_deleted">Deleted</string>
<string name="quick_add_hint">Add New Task</string>
<!-- menu items -->
<string name="taskList_menu_insert">New Task</string>
<string name="taskList_menu_tags">Tags</string>
<string name="taskList_menu_filters">Sort/Filters</string>
<string name="taskList_menu_syncshortcut">Sync</string>
<string name="taskList_menu_more">More</string>
<string name="taskList_menu_sync">Synchronization</string>
<string name="taskList_menu_settings">Settings</string>
<string name="taskList_menu_help">Help (opens in Browser)</string>
<string name="taskList_menu_survey">Take Astrid\'s Survey!</string>
<string name="taskList_menu_tips">Quick Tips</string>
<string name="taskList_menu_cleanup">Clean Up Old Tasks</string>
<string name="taskList_menu_export">Backup Tasks</string>
<string name="taskList_menu_import">Restore Tasks</string>
<string name="taskList_context_edit">Edit Task</string>
<string name="taskList_context_delete">Delete Task</string>
<string name="taskList_context_startTimer">Start Timer</string>
<string name="taskList_context_stopTimer">Stop Timer</string>
<string name="taskList_context_postpone">Postpone</string>
<!-- filter menu items -->
<string name="taskList_filter_title">Sort/Filters</string>
<string name="taskList_filter_hidden">Hidden/Blocked Tasks</string>
<string name="taskList_filter_done">Completed Tasks</string>
<string name="taskList_filter_tagged">Tagged \'%s\'</string>
<string name="taskList_sort_auto">Auto Sort</string>
<string name="taskList_sort_alpha">Sort By Name</string>
<string name="taskList_sort_duedate">Sort By Due Date</string>
<string name="taskList_sort_reverse">Sort Reverse</string>
<string name="taskList_nonag_reminder">Select an Action:</string>
<string name="taskList_postpone_count">Times You\'ve Postponed: %d</string>
<string name="taskList_postpone_dialog">Postpone for how long?</string>
<string name="taskList_cleanup_dialog">"Delete completed tasks older than # days:"</string>
<!-- TaskEdit -->
<skip />
<!-- title bar -->
<string name="taskEdit_titleGeneric">Astrid: Editing Task</string>
<string name="taskEdit_titlePrefix">Astrid: Editing </string>
<string name="taskEdit_label">Astrid: New Task</string>
<!-- tabs -->
<string name="taskEdit_tab_basic">Basic</string>
<string name="taskEdit_tab_dates">Dates</string>
<string name="taskEdit_tab_alerts">Alerts</string>
<!-- labels -->
<string name="name_label">Summary</string>
<string name="name_hint">Task Name</string>
<string name="importance_label">How Important is it?</string>
<string name="tags_label">Tags:</string>
<string name="tag_hint">Tag Name</string>
<string name="estimatedDuration_label">How Long Will it Take?</string>
<string name="elapsedDuration_label">Time Already Spent on Task</string>
<string name="definiteDueDate_label">Absolute Deadline</string>
<string name="preferredDueDate_label">Goal Deadline</string>
<string name="addToCalendar_label">Add Task To Calendar</string>
<string name="showCalendar_label">Open Calendar Event</string>
<string name="hiddenUntil_label">Hide Until This Date</string>
<string name="repeat_label">Repeat Every</string>
<string name="repeat_value_unset">No Repeat Set</string>
<string name="blockingOn_label">Hide Until This Task is Done</string>
<string name="notes_label">Notes</string>
<string name="notes_hint">Enter Task Notes</string>
<string name="notification_label">Periodic Reminders</string>
<string name="notification_prefix">Every</string>
<string name="flags_label">Notify me...</string>
<string name="flag_before">As Deadlines Approach</string>
<string name="flag_during">At Deadlines</string>
<string name="flag_after">After Absolute Deadline Passes</string>
<string name="flag_nonstop">Alarm Clock Mode</string>
<string name="alerts_label">Fixed Reminders</string>
<string name="add_alert">Add New Reminder</string>
<!-- dialog boxes -->
<string name="hour_minutes_dialog">Time (hours : minutes)</string>
<string name="notification_dialog">Remind Me Every</string>
<string name="repeat_picker_title">Repeat Every (0 to disable)</string>
<string name="repeat_help_dialog_title">Help: Astrid Repeats</string>
<string name="repeat_help_dialog">
To use repeats, set at least one of the deadlines above. When you complete this task, the deadline will be automatically advanced.
\n\n
If you don\'t want to see the new task right after you complete the old one, you should use the "Hide Until" field, which will also be advanced automatically.
\n
</string>
<string name="repeat_help_hide">Don't Show Help Anymore</string>
<!-- buttons -->
<string name="save_label">Save</string>
<string name="discard_label">Discard</string>
<string name="edit_label">Edit</string>
<string name="delete_label">Delete</string>
<string name="blank_button_title">Click to Set</string>
<string name="startTimer_label">Start Timer</string>
<string name="stopTimer_label">Stop Timer</string>
<string name="taskEdit_menu_save">Save</string>
<string name="taskEdit_onTaskSave_Due">Task Saved: due in %s</string>
<string name="taskEdit_onTaskSave_Overdue">Task Saved: due %s ago</string>
<string name="taskEdit_onTaskSave_notDue">Task Saved</string>
<!-- TaskView -->
<skip />
<string name="taskView_notifyTitle">Astrid says...</string>
<!-- Tag List -->
<skip />
<string name="tagList_titlePrefix">Astrid: Tag View: </string>
<string name="tagList_context_create">Create Task With Tag</string>
<string name="tagList_context_edit">Edit Tag</string>
<string name="tagList_context_delete">Delete Tag</string>
<string name="tagList_context_showTag">Show on Home Page</string>
<string name="tagList_context_hideTag">Hide on Home Page</string>
<string name="tagList_context_shortcut">Create Shortcut</string>
<string name="tagList_shortcut_created">Shortcut created on your home screen!</string>
<string name="tagList_shortcut_prefix">Tag:</string>
<string name="tagList_untagged">[untagged]</string>
<string name="tagList_menu_sortAlpha">Sort A-Z</string>
<string name="tagList_menu_sortSize">Sort by Size</string>
<!-- Synchronization -->
<skip />
<string name="sync_pref_group">Synchronization Services</string>
<string name="sync_pref_group_actions">Actions</string>
<string name="sync_pref_group_options">Options</string>
<!-- Proper noun - don't translate -->
<string name="sync_rtm_title">Remember The Milk</string>
<string name="sync_rtm_desc">http://www.rememberthemilk.com</string>
<string name="sync_interval_title">Auto-Synchronize</string>
<string name="sync_interval_desc">If set, synchronization occurs automatically given interval</string>
<string name="sync_button_title">Main Menu Shortcut</string>
<string name="sync_button_desc">Show \"Synchronize\" in Astrid\'s menu</string>
<string name="sync_quiet_title">Hide Dialogs</string>
<string name="sync_quiet_desc">Hide the Sync Results dialogs</string>
<string name="sync_bgwifi_title">Auto-Sync Wifi Only</string>
<string name="sync_bgwifi_desc">If set, auto-sync only happens when Wifi is active</string>
<string name="sync_error">Sync Error! Sorry for the inconvenience! Error:</string>
<string name="sync_upgrade_v99">
Astrid 2.7 now performs synchronization with RTM in the background. You will
be directed to the preferences page to configure how often you want this to
occur (it is a minor drain on battery).
</string>
<string name="sync_now">Synchronize Now!</string>
<string name="sync_forget">Clear Personal Data</string>
<string name="sync_uptodate">Sync: Up to date!</string>
<string name="sync_forget_confirm">Clear data for selected services?</string>
<string name="sync_no_synchronizers">No Synchronizers Enabled!</string>
<string name="sync_last_sync">Last Sync Date: %s</string>
<string name="sync_last_auto_sync">Last AutoSync Attempt: %s</string>
<string name="sync_date_never">never</string>
<string name="sync_result_title">%s Results</string>
<string name="sync_result_local">Summary - Astrid Tasks:</string>
<string name="sync_result_remote">Summary - Remote Server:</string>
<string name="sync_result_created">Created: %d</string>
<string name="sync_result_updated">Updated: %d</string>
<string name="sync_result_deleted">Deleted: %d</string>
<string name="sync_result_merged">Merged: %d</string>
<string name="sync_progress_remote">Reading Remote Data</string>
<string name="sync_progress_rxlist">Reading List: %s</string>
<string name="sync_progress_repeating">Synchronizing Repeating Task</string>
<string name="sync_progress_localtx">Transmitting: %s</string>
<string name="sync_progress_localdel">Locally Deleted Tasks</string>
<string name="sync_progress_remotetx">Receiving: %s</string>
<string name="rtm_login_label">Please Log In to RTM...</string>
<string name="rtm_login_error">
Sorry, there was an error verifying your login. Please try again.
\n\n
Error Message:
</string>
<!-- Dialog Boxes -->
<skip />
<string name="loading">Loading...</string>
<string name="updating">Updating List...</string>
<string name="information_title">Information</string>
<string name="question_title">Question</string>
<string name="done_label">Done</string>
<string name="notify_yes">View This Task</string>
<string name="notify_done">Already Done!</string>
<string name="notify_snooze">Snooze...</string>
<string name="notify_no">Go Away!</string>
<string name="notify_snooze_title">Hours/minutes to snooze?</string>
<string name="delete_title">Delete</string>
<string name="delete_this_task_title">Delete this task?</string>
<string name="delete_this_tag_title">Remove this tag from all tasks?</string>
<string name="stop_timer_title">Stop the timer?</string>
<string name="quick_tips">
Some things you may not know about Astrid:\n
\n
- To create a task, just start typing!\n
- While editing a task, hit \'back\' to save it\n
- Select a task &amp; press 1-4 to quickly change it\'s priority\n
- If a task has a deadline, long-press to postpone it\n
\n
Thanks for using Astrid!\n
</string>
<!-- %s => name of the application -->
<string name="task_killer_help">
It looks like you are using an app that can kill processes (%s)! If you can,
add Astrid to the exclusion list so it doesn\'t get killed. Otherwise,
Astrid might not let you know when your tasks are due.\n
</string>
<string name="task_killer_help_ok">I Won\'t Kill Astrid!</string>
<!-- Restore/Backup -->
<skip />
<string name="export_toast">Backed Up %s to %s.</string>
<string name="import_summary_title">Restore Summary</string>
<string name="import_summary_message">
File %s contained %d tasks.\n
Restored %d tasks.\n
Skipped %d tasks.\n
</string>
<string name="import_progress_title">Restore</string>
<string name="import_progress_open">Opening file...</string>
<string name="import_progress_opened">File opened...</string>
<string name="import_progress_read">Reading task %d...</string>
<string name="import_progress_skip">Skipped task %d...</string>
<string name="import_progress_add">Restored task %d...</string>
<string name="import_file_prompt">Select a File to Restore</string>
<!-- Locale Plugin -->
<skip />
<string name="locale_edit_alerts_title">Astrid Tag Alert</string>
<string name="locale_edit_intro">Astrid will send you a reminder
when you have uncompleted tasks with the following criteria:</string>
<string name="locale_pick_tag">Tagged with:</string>
<!-- Notification -->
<skip />
<string name="notif_definiteDueDate">Absolute Deadline!</string>
<string name="notif_preferredDueDate">Goal Deadline!</string>
<string name="notif_timerStarted">Working on:</string>
<!-- $NUM is replaced with # of tasks + units, i.e. "1 task", $TAG is replaced with tag name -->
<string name="notif_tagNotification">You have $NUM tagged $TAG!</string>
<!-- Error Messages -->
<skip />
<string name="error_opening">Could not find this item: </string>
<string name="error_saving">Could not save:s</string>
<string name="error_sdcard">Cannot access folder: %s</string>
<string name="error_sdcard_general">Cannot access your SD card!</string>
<skip />
<string name="prefs_category_alerts">Notifications</string>
<string name="prefs_quietStart_title">Quiet Hours Start</string>
<string name="prefs_quietStart_desc">Start time to silence notifications for periodic reminders</string>
<string name="prefs_quietEnd_title">Quiet Hours End</string>
<string name="prefs_quietEnd_desc">End time to silence notifications</string>
<string name="prefs_defaultRemind_title">Default Reminders</string>
<string name="prefs_defaultRemind_desc">For new tasks, default reminder in days (i.e. 7). Blank to disable</string>
<string name="prefs_annoy_title">Persistent Mode</string>
<string name="prefs_annoy_desc">If checked, LED and notifications must be cleared one at a time</string>
<string name="prefs_notification_title">Notification Ringtone</string>
<string name="prefs_notification_desc">Choose a ringtone for Astrid\'s alerts</string>
<string name="prefs_notificon_title">Notification Icons</string>
<string name="prefs_notificon_desc">Choose Astrid\'s notification bar icon</string>
<string name="prefs_vibrate_title">Vibrate on Alert</string>
<string name="prefs_vibrate_desc">If checked, Astrid will vibrate when sounding an alarm</string>
<string name="prefs_category_appearance">Appearance</string>
<string name="prefs_colorize_title">Colorize Task List</string>
<string name="prefs_colorize_desc">Different colors for different priorities</string>
<string name="prefs_fontSize_title">Task List Size</string>
<string name="prefs_fontSize_desc">Font size on the main listing page</string>
<string name="prefs_category_other">Other</string>
<string name="prefs_nagging_title">Nag Messages</string>
<string name="prefs_nagging_desc">Show Astrid\'s comments when viewing reminders and postponing tasks?</string>
<string name="prefs_deadlineTime_title">Default Deadlines</string>
<string name="prefs_deadlineTime_desc"># of days from now to set new deadlines</string>
<string name="prefs_backup_title">Automatic Backups</string>
<!-- backup summary when there is no backup message -->
<string name="prefs_backup_desc">Perform daily backups to sdcard.</string>
<!-- backup failure message (%s -> error message) -->
<string name="prefs_backup_desc_failure">Last backup failed: %s</string>
<!-- backup failure error when error message is null -->
<string name="prefs_backup_desc_failure_null">Last backup failed, could not read SD card</string>
<!-- backup success message (%s -> date) -->
<string name="prefs_backup_desc_success">Latest backup was on %s</string>
<string name="displayedFields_PrefScreen_Title">Displayed Fields</string>
<string name="displayedFields_PrefScreen_Desc">Select the fields to show in task list</string>
<string name="prefs_titleVisible_title">Task Title</string>
<string name="prefs_titleVisible_desc">Task description</string>
<string name="prefs_deadlineVisible_title">Dates</string>
<string name="prefs_deadlineVisible_desc">Upcoming deadlines / completed date</string>
<string name="prefs_timeVisible_title">Times</string>
<string name="prefs_timeVisible_desc">Estimated &amp; Elapsed Times</string>
<string name="prefs_importanceVisible_title">Importance</string>
<string name="prefs_importanceVisible_desc">Task importance indicator</string>
<string name="prefs_tagsVisible_title">Tags</string>
<string name="prefs_tagsVisible_desc">Tags associated with this task</string>
<string name="prefs_repeatVisible_title">Repeats</string>
<string name="prefs_repeatVisible_desc">Task repeat information</string>
<string name="prefs_reminderVisible_title">Reminders</string>
<string name="prefs_reminderVisible_desc">Displayed if this task has reminders</string>
<string name="prefs_notesVisible_title">Notes</string>
<string name="prefs_notesVisible_desc">Notes associated with this task</string>
<!-- This string is Astrid's Android Marketplace title. It never appears in the app itself. -->
<string name="marketplace_title">Astrid Task/Todo List</string>
<!-- This string is Astrid's Android Marketplace description. It never appears in the app itself. -->
<string name="marketplace_description">
Astrid is the highly-acclaimed open-source task list that is simple enough to not get in your way, powerful enough to help you get stuff done! Tags, reminders, RememberTheMilk sync, Locale plug-in &amp; more!
</string>
<!-- Automatically filled in by Launchpad: -->
<string name="about_translators">translator-credits</string>
<!-- Widget text when loading tasks -->
<string name="widget_loading">Loading...</string>
<!-- Permissions -->
<string name="read_tasks_permission">Read Astrid tasks</string>
</resources>

@ -1,517 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
ASTRID: Android's Simple Task Recording Dashboard
Copyright (c) 2009 Tim Su
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- See the file "LICENSE" for the full license governing this code. -->
<resources>
<!-- application -->
<string name="app_name">Astrid</string>
<!-- ======================== AndroidManifest ========================== -->
<string name="app_name">Astrid Tasks</string>
<!-- General String Constants -->
<skip />
<!-- permission title for READ_TASKS -->
<string name="read_permission_label">Astrid Permission</string>
<!-- Importance Labels -->
<string name="importance_1">!!!!</string>
<string name="importance_2">!!!</string>
<string name="importance_3">!!</string>
<string name="importance_4">!</string>
<!-- Repeat Interval Labels -->
<string name="repeat_days">Day(s)</string>
<string name="repeat_weeks">Week(s)</string>
<string name="repeat_months">Month(s)</string>
<string name="repeat_hours">Hour(s)</string>
<!-- Plurals -->
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 Task</item>
<item quantity="other">%d Tasks</item>
</plurals>
<plurals name="NactiveTasks">
<!-- plurals: active tasks vs total tasks -->
<item quantity="one">%d / %d Active</item>
<item quantity="other">%d / %d Active</item>
</plurals>
<plurals name="Nalarms">
<!-- plurals: alarms -->
<item quantity="one">One Alarm</item>
<item quantity="two">Two Alarms</item>
<item quantity="other">%d Alarms</item>
</plurals>
<plurals name="Ntags">
<!-- plurals: tags -->
<item quantity="one">1 Tag</item>
<item quantity="other">%d Tags</item>
</plurals>
<!-- Time Constants -->
<!-- used for long due dates. c.f. Java's SimpleDateFormat -->
<string name="dateFormatter">MMM d</string>
<!-- used for alarms -->
<string name="alarmDateFormatter">M/dd HH:mm</string>
<!-- vertical labels are used in dialog boxes -->
<string name="daysVertical">D\na\ny\ns</string>
<string name="hoursVertical">H\no\nu\nr\ns</string>
<plurals name="Ndays">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
<item quantity="other">%d Days</item>
</plurals>
<plurals name="NdaysPreposition">
<!-- plurals: days (used after a preopsition, i.e. due in 5 days) -->
<item quantity="one">1 Day</item>
<item quantity="other">%d Days</item>
</plurals>
<plurals name="Nhours">
<!-- plurals: hours -->
<item quantity="one">1 Hour</item>
<item quantity="other">%d Hours</item>
</plurals>
<plurals name="Nminutes">
<!-- plurals: minutes -->
<item quantity="one">1 Minute</item>
<item quantity="other">%d Minutes</item>
</plurals>
<plurals name="Nseconds">
<!-- plurals: seconds -->
<item quantity="one">1 Second</item>
<item quantity="other">%d Seconds</item>
</plurals>
<plurals name="NhoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Hr</item>
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="NminutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<item quantity="other">%d Min</item>
</plurals>
<plurals name="NsecondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sec</item>
<item quantity="other">%d Sec</item>
</plurals>
<!-- indicates time in past. %s is replaced by time unit i.e. 1 minute -->
<string name="ago_string">%s Ago</string>
<!-- TaskList -->
<skip />
<!-- title bar -->
<string name="taskList_titlePrefix">Astrid: </string>
<string name="taskList_titleTagPrefix">Tagged \"%s\":</string>
<string name="taskList_titleUntagged">Untagged Tasks:</string>
<string name="taskList_hiddenSuffix"> hidden</string>
<string name="addtask_label">New Task</string>
<string name="missing_tag">Could Not Find Requested Tag!</string>
<!-- text displayed in task list item -->
<!-- prefix to show that a task is hidden -->
<string name="taskList_hiddenPrefix">H</string>
<!-- i.e. Due in 4 days -->
<string name="taskList_dueRelativeTime">Due in</string>
<!-- i.e. Due on Jan 2 -->
<string name="taskList_dueAbsoluteDate">Due on</string>
<!-- prefix to deadline -->
<string name="taskList_goalPrefix">Goal</string>
<string name="taskList_overdueBy">Overdue by</string>
<!-- i.e. Finished 4 days ago -->
<string name="taskList_completedPrefix">Finished %s</string>
<!-- i.e. Estimated: 4 hours -->
<string name="taskList_estimatedTimePrefix">Estimated:</string>
<!-- i.e. Spent: 88 minutes. used to indicate time spent on task -->
<string name="taskList_elapsedTimePrefix">Spent:</string>
<!-- time interval to set frequency to remind user -->
<string name="taskList_periodicReminderPrefix">Poke Every</string>
<!-- time interval to set repeated tasks-->
<string name="taskList_repeatPrefix">Repeats Every</string>
<!-- displayed when repeat is on remote server-->
<string name="taskList_repeatsRemotely">Repeats On Remote Server</string>
<string name="taskList_alarmPrefix">Next Alarm:</string>
<string name="taskList_tagsPrefix">Tags:</string>
<string name="taskList_notesPrefix">Notes:</string>
<!-- i.e. Created: <create date> -->
<string name="taskList_createdPrefix">Created:</string>
<!-- i.e. Deleted: <delete date> -->
<string name="taskList_deleted">Deleted</string>
<string name="quick_add_hint">Add New Task</string>
<!-- menu items -->
<string name="taskList_menu_insert">New Task</string>
<string name="taskList_menu_tags">Tags</string>
<string name="taskList_menu_filters">Sort/Filters</string>
<string name="taskList_menu_syncshortcut">Sync</string>
<string name="taskList_menu_more">More</string>
<string name="taskList_menu_sync">Synchronization</string>
<string name="taskList_menu_settings">Settings</string>
<string name="taskList_menu_help">Help (opens in Browser)</string>
<string name="taskList_menu_survey">Take Astrid\'s Survey!</string>
<string name="taskList_menu_tips">Quick Tips</string>
<string name="taskList_menu_cleanup">Clean Up Old Tasks</string>
<string name="taskList_menu_export">Backup Tasks</string>
<string name="taskList_menu_import">Restore Tasks</string>
<string name="taskList_context_edit">Edit Task</string>
<string name="taskList_context_delete">Delete Task</string>
<string name="taskList_context_startTimer">Start Timer</string>
<string name="taskList_context_stopTimer">Stop Timer</string>
<string name="taskList_context_postpone">Postpone</string>
<!-- filter menu items -->
<string name="taskList_filter_title">Sort/Filters</string>
<string name="taskList_filter_hidden">Hidden/Blocked Tasks</string>
<string name="taskList_filter_done">Completed Tasks</string>
<string name="taskList_filter_tagged">Tagged \'%s\'</string>
<string name="taskList_sort_auto">Auto Sort</string>
<string name="taskList_sort_alpha">Sort By Name</string>
<string name="taskList_sort_duedate">Sort By Due Date</string>
<string name="taskList_sort_reverse">Sort Reverse</string>
<string name="taskList_nonag_reminder">Select an Action:</string>
<string name="taskList_postpone_count">Times You\'ve Postponed: %d</string>
<string name="taskList_postpone_dialog">Postpone for how long?</string>
<string name="taskList_cleanup_dialog">"Delete completed tasks older than # days:"</string>
<!-- TaskEdit -->
<skip />
<!-- title bar -->
<string name="taskEdit_titleGeneric">Astrid: Editing Task</string>
<string name="taskEdit_titlePrefix">Astrid: Editing </string>
<string name="taskEdit_label">Astrid: New Task</string>
<!-- tabs -->
<string name="taskEdit_tab_basic">Basic</string>
<string name="taskEdit_tab_dates">Dates</string>
<string name="taskEdit_tab_alerts">Alerts</string>
<!-- labels -->
<string name="name_label">Summary</string>
<string name="name_hint">Task Name</string>
<string name="importance_label">How Important is it?</string>
<string name="tags_label">Tags:</string>
<string name="tag_hint">Tag Name</string>
<string name="estimatedDuration_label">How Long Will it Take?</string>
<string name="elapsedDuration_label">Time Already Spent on Task</string>
<string name="definiteDueDate_label">Absolute Deadline</string>
<string name="preferredDueDate_label">Goal Deadline</string>
<string name="addToCalendar_label">Add Task To Calendar</string>
<string name="showCalendar_label">Open Calendar Event</string>
<string name="hiddenUntil_label">Hide Until This Date</string>
<string name="repeat_label">Repeat Every</string>
<string name="repeat_value_unset">No Repeat Set</string>
<string name="blockingOn_label">Hide Until This Task is Done</string>
<string name="notes_label">Notes</string>
<string name="notes_hint">Enter Task Notes</string>
<string name="notification_label">Periodic Reminders</string>
<string name="notification_prefix">Every</string>
<string name="flags_label">Notify me...</string>
<string name="flag_before">As Deadlines Approach</string>
<string name="flag_during">At Deadlines</string>
<string name="flag_after">After Absolute Deadline Passes</string>
<string name="flag_nonstop">Alarm Clock Mode</string>
<string name="alerts_label">Fixed Reminders</string>
<string name="add_alert">Add New Reminder</string>
<!-- dialog boxes -->
<string name="hour_minutes_dialog">Time (hours : minutes)</string>
<string name="notification_dialog">Remind Me Every</string>
<string name="repeat_picker_title">Repeat Every (0 to disable)</string>
<string name="repeat_help_dialog_title">Help: Astrid Repeats</string>
<string name="repeat_help_dialog">
To use repeats, set at least one of the deadlines above. When you complete this task, the deadline will be automatically advanced.
\n\n
If you don\'t want to see the new task right after you complete the old one, you should use the "Hide Until" field, which will also be advanced automatically.
\n
</string>
<string name="repeat_help_hide">Don't Show Help Anymore</string>
<!-- buttons -->
<string name="save_label">Save</string>
<string name="discard_label">Discard</string>
<string name="edit_label">Edit</string>
<string name="delete_label">Delete</string>
<string name="blank_button_title">Click to Set</string>
<string name="startTimer_label">Start Timer</string>
<string name="stopTimer_label">Stop Timer</string>
<string name="taskEdit_menu_save">Save</string>
<string name="taskEdit_onTaskSave_Due">Task Saved: due in %s</string>
<string name="taskEdit_onTaskSave_Overdue">Task Saved: due %s ago</string>
<string name="taskEdit_onTaskSave_notDue">Task Saved</string>
<!-- TaskView -->
<skip />
<string name="taskView_notifyTitle">Astrid says...</string>
<!-- Tag List -->
<skip />
<string name="tagList_titlePrefix">Astrid: Tag View: </string>
<string name="tagList_context_create">Create Task With Tag</string>
<string name="tagList_context_edit">Edit Tag</string>
<string name="tagList_context_delete">Delete Tag</string>
<string name="tagList_context_showTag">Show on Home Page</string>
<string name="tagList_context_hideTag">Hide on Home Page</string>
<string name="tagList_context_shortcut">Create Shortcut</string>
<string name="tagList_shortcut_created">Shortcut created on your home screen!</string>
<string name="tagList_shortcut_prefix">Tag:</string>
<string name="tagList_untagged">[untagged]</string>
<string name="tagList_menu_sortAlpha">Sort A-Z</string>
<string name="tagList_menu_sortSize">Sort by Size</string>
<!-- Synchronization -->
<skip />
<string name="sync_pref_group">Synchronization Services</string>
<string name="sync_pref_group_actions">Actions</string>
<string name="sync_pref_group_options">Options</string>
<!-- Proper noun - don't translate -->
<string name="sync_rtm_title">Remember The Milk</string>
<string name="sync_rtm_desc">http://www.rememberthemilk.com</string>
<string name="sync_interval_title">Auto-Synchronize</string>
<string name="sync_interval_desc">If set, synchronization occurs automatically given interval</string>
<string name="sync_button_title">Main Menu Shortcut</string>
<string name="sync_button_desc">Show \"Synchronize\" in Astrid\'s menu</string>
<string name="sync_quiet_title">Hide Dialogs</string>
<string name="sync_quiet_desc">Hide the Sync Results dialogs</string>
<string name="sync_bgwifi_title">Auto-Sync Wifi Only</string>
<string name="sync_bgwifi_desc">If set, auto-sync only happens when Wifi is active</string>
<string name="sync_error">Sync Error! Sorry for the inconvenience! Error:</string>
<string name="sync_upgrade_v99">
Astrid 2.7 now performs synchronization with RTM in the background. You will
be directed to the preferences page to configure how often you want this to
occur (it is a minor drain on battery).
</string>
<string name="sync_now">Synchronize Now!</string>
<string name="sync_forget">Clear Personal Data</string>
<string name="sync_uptodate">Sync: Up to date!</string>
<string name="sync_forget_confirm">Clear data for selected services?</string>
<string name="sync_no_synchronizers">No Synchronizers Enabled!</string>
<string name="sync_last_sync">Last Sync Date: %s</string>
<string name="sync_last_auto_sync">Last AutoSync Attempt: %s</string>
<string name="sync_date_never">never</string>
<string name="sync_result_title">%s Results</string>
<string name="sync_result_local">Summary - Astrid Tasks:</string>
<string name="sync_result_remote">Summary - Remote Server:</string>
<string name="sync_result_created">Created: %d</string>
<string name="sync_result_updated">Updated: %d</string>
<string name="sync_result_deleted">Deleted: %d</string>
<string name="sync_result_merged">Merged: %d</string>
<string name="sync_progress_remote">Reading Remote Data</string>
<string name="sync_progress_rxlist">Reading List: %s</string>
<string name="sync_progress_repeating">Synchronizing Repeating Task</string>
<string name="sync_progress_localtx">Transmitting: %s</string>
<string name="sync_progress_localdel">Locally Deleted Tasks</string>
<string name="sync_progress_remotetx">Receiving: %s</string>
<string name="rtm_login_label">Please Log In to RTM...</string>
<string name="rtm_login_error">
Sorry, there was an error verifying your login. Please try again.
\n\n
Error Message:
</string>
<!-- Dialog Boxes -->
<skip />
<string name="loading">Loading...</string>
<string name="updating">Updating List...</string>
<string name="information_title">Information</string>
<string name="question_title">Question</string>
<string name="done_label">Done</string>
<string name="notify_yes">View This Task</string>
<string name="notify_done">Already Done!</string>
<string name="notify_snooze">Snooze...</string>
<string name="notify_no">Go Away!</string>
<string name="notify_snooze_title">Hours/minutes to snooze?</string>
<string name="delete_title">Delete</string>
<string name="delete_this_task_title">Delete this task?</string>
<string name="delete_this_tag_title">Remove this tag from all tasks?</string>
<string name="stop_timer_title">Stop the timer?</string>
<string name="quick_tips">
Some things you may not know about Astrid:\n
\n
- To create a task, just start typing!\n
- While editing a task, hit \'back\' to save it\n
- Select a task &amp; press 1-4 to quickly change it\'s priority\n
- If a task has a deadline, long-press to postpone it\n
\n
Thanks for using Astrid!\n
</string>
<!-- %s => name of the application -->
<string name="task_killer_help">
It looks like you are using an app that can kill processes (%s)! If you can,
add Astrid to the exclusion list so it doesn\'t get killed. Otherwise,
Astrid might not let you know when your tasks are due.\n
</string>
<string name="task_killer_help_ok">I Won\'t Kill Astrid!</string>
<!-- Restore/Backup -->
<skip />
<string name="export_toast">Backed Up %s to %s.</string>
<string name="import_summary_title">Restore Summary</string>
<string name="import_summary_message">
File %s contained %d tasks.\n
Restored %d tasks.\n
Skipped %d tasks.\n
</string>
<string name="import_progress_title">Restore</string>
<string name="import_progress_open">Opening file...</string>
<string name="import_progress_opened">File opened...</string>
<string name="import_progress_read">Reading task %d...</string>
<string name="import_progress_skip">Skipped task %d...</string>
<string name="import_progress_add">Restored task %d...</string>
<string name="import_file_prompt">Select a File to Restore</string>
<!-- Locale Plugin -->
<skip />
<string name="locale_edit_alerts_title">Astrid Tag Alert</string>
<string name="locale_edit_intro">Astrid will send you a reminder
when you have uncompleted tasks with the following criteria:</string>
<string name="locale_pick_tag">Tagged with:</string>
<!-- Notification -->
<skip />
<string name="notif_definiteDueDate">Absolute Deadline!</string>
<string name="notif_preferredDueDate">Goal Deadline!</string>
<string name="notif_timerStarted">Working on:</string>
<!-- $NUM is replaced with # of tasks + units, i.e. "1 task", $TAG is replaced with tag name -->
<string name="notif_tagNotification">You have $NUM tagged $TAG!</string>
<!-- Error Messages -->
<skip />
<!-- permission description for READ_TASKS -->
<string name="read_permission_desc">read tasks, display task filters</string>
<string name="error_opening">Could not find this item: </string>
<string name="error_saving">Could not save:s</string>
<string name="error_sdcard">Cannot access folder: %s</string>
<string name="error_sdcard_general">Cannot access your SD card!</string>
<skip />
<!-- permission title for READ_TASKS -->
<string name="write_permission_label">Astrid Permission</string>
<!-- permission description for READ_TASKS -->
<string name="write_permission_desc">create new tasks, edit existing tasks</string>
<!-- ======================== Generic Plurals ========================== -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Year</item>
<item quantity="other">%d Years</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Month</item>
<item quantity="other">%d Months</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
<item quantity="other">%d Days</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 Hour</item>
<item quantity="other">%d Hours</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 Minute</item>
<item quantity="other">%d Minutes</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 Second</item>
<item quantity="other">%d Seconds</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Hr</item>
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<item quantity="other">%d Min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sec</item>
<item quantity="other">%d Sec</item>
</plurals>
<!-- ========================= Generic Dialogs ========================= -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirm?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Question:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- Dialog yes-->
<string name="DLG_yes">Yes</string>
<!-- Dialog no-->
<string name="DLG_no">No</string>
<!-- Dialog close-->
<string name="DLG_close">Close</string>
<!-- communicating with servers ext -->
<string name="DLG_communicating_text">Communicating with Server...</string>
<!-- error dialog -->
<string name="DLG_error">Oops, looks like some trouble occurred! Here\'s what happened:\n\n%s</string>
<!-- question for deleting tasks -->
<string name="DLG_delete_this_task_question">Delete this task?</string>
<!-- Button for advancing to next page/message -->
<string name="DLG_next">Next</string>
<!-- Button for retreating to previous page/message -->
<string name="DLG_prev">Previous</string>
<!-- Button for being done -->
<string name="DLG_done">Done</string>
<!-- Button for canceling out of this page -->
<string name="DLG_cancel">Cancel</string>
<!-- ============================= Widgets ============================= -->
<!-- Label for DateButtons with no value -->
<string name="WID_dateButtonUnset">Click To Set</string>
<!-- String formatter for DateButtons ($D => date, $T => time) -->
<string name="WID_dateButtonLabel">$D $T</string>
<!-- String formatter for Disable button -->
<string name="WID_disableButton">Disable</string>
<!-- ======================== TaskListActivity ======================== -->
<!-- Title (%s => name of filter) -->
<string name="TLA_title">Astrid: %s</string>
<!-- Displayed instead of list when no items present -->
<string name="TLA_no_items">You Have No Tasks!</string>
<!-- Menu: Add Task -->
<string name="TLA_menu_add">Add Task</string>
<!-- Menu: Plugins -->
<string name="TLA_menu_plugins">Plugins</string>
<!-- Menu: Settings -->
<string name="TLA_menu_settings">Settings</string>
<!-- Menu: Help -->
<string name="TLA_menu_help">Help</string>
<!-- Search Label-->
<string name="TLA_search_label">Search Within This Filter</string>
<!-- Search Hint-->
<string name="TLA_search_hint">Search Within This Filter</string>
<!-- Quick Add Hint-->
<string name="TLA_quick_add_hint">Add to this list</string>
<!-- Help (HTML)-->
<string name="TLA_help"><![CDATA[
<center><h1>Help: Tasks Page</h1></center>
This page displays all of your tasks belonging to the filter you have chosen.
The back button at the top of the screen lets you pick a different filter
to display.
<br />
You can use the quick-add widget at the bottom of the screen to add tasks
without going to the edit page.
<br />
uh... that's it for help for today.
]]></string>
<!-- =========================== TaskAdapter =========================== -->
<!-- Format string to indicate task is hidden (%s => task name) -->
<string name="TAd_hiddenFormat">%s [hidden]</string>
<!-- Displayed when adapter is flung (scrolled quickly) -->
<string name="TAd_isFling">loading</string>
<!-- due date for tasks ($D => date) -->
<string name="TAd_dueDate">$D</string>
<string name="prefs_category_alerts">Notifications</string>
<string name="prefs_quietStart_title">Quiet Hours Start</string>
<string name="prefs_quietStart_desc">Start time to silence notifications for periodic reminders</string>
<string name="prefs_quietEnd_title">Quiet Hours End</string>
<string name="prefs_quietEnd_desc">End time to silence notifications</string>
<string name="prefs_defaultRemind_title">Default Reminders</string>
<string name="prefs_defaultRemind_desc">For new tasks, default reminder in days (i.e. 7). Blank to disable</string>
<string name="prefs_annoy_title">Persistent Mode</string>
<string name="prefs_annoy_desc">If checked, LED and notifications must be cleared one at a time</string>
<string name="prefs_notification_title">Notification Ringtone</string>
<string name="prefs_notification_desc">Choose a ringtone for Astrid\'s alerts</string>
<!-- due date for tasks with date and time ($D => date, $T => time) -->
<string name="TAd_dueDateTime">$D at $T</string>
<!-- indicates task was completed. %s => date or time ago -->
<string name="TAd_completed">Finished %s</string>
<!-- textview indicating details are being loaded -->
<string name="TAd_loading">... loading ...</string>
<!-- Context Item: edit task -->
<string name="TAd_contextEditTask">Edit Task</string>
<string name="prefs_notificon_title">Notification Icons</string>
<string name="prefs_notificon_desc">Choose Astrid\'s notification bar icon</string>
<string name="prefs_vibrate_title">Vibrate on Alert</string>
<string name="prefs_vibrate_desc">If checked, Astrid will vibrate when sounding an alarm</string>
<string name="prefs_category_appearance">Appearance</string>
<string name="prefs_colorize_title">Colorize Task List</string>
<string name="prefs_colorize_desc">Different colors for different priorities</string>
<string name="prefs_fontSize_title">Task List Size</string>
<string name="prefs_fontSize_desc">Font size on the main listing page</string>
<!-- Context Item: delete task -->
<string name="TAd_contextDeleteTask">Delete Task</string>
<!-- ======================= FilterListActivity ======================== -->
<string name="prefs_category_other">Other</string>
<string name="prefs_nagging_title">Nag Messages</string>
<string name="prefs_nagging_desc">Show Astrid\'s comments when viewing reminders and postponing tasks?</string>
<!-- Title -->
<string name="FLA_title">Astrid: Filters</string>
<!-- Loading -->
<string name="FLA_loading">Please Wait...</string>
<!-- Context Menu: Shortcut -->
<string name="FLA_context_shortcut">Create Shortcut On Desktop</string>
<!-- Menu: Search -->
<string name="FLA_menu_search">Search...</string>
<!-- Menu: Help -->
<string name="FLA_menu_help">Help</string>
<!-- Create Shortcut Dialog -->
<string name="FLA_shortcut_dialog">Create Shortcut:</string>
<!-- Search Label-->
<string name="FLA_search_label">Search For Tasks</string>
<!-- Search Hint-->
<string name="FLA_search_hint">Search For Tasks</string>
<!-- Help (HTML)-->
<string name="FLA_help"><![CDATA[
<center><h1>Help: Filters Page</h1></center>
<p>On the Filters page you can see all of the filters that you can use to
organize your tasks. Some Astrid Plugins will add new filters to this
list.
</p><p>
You can turn any filter into a shortcut on your desktop by long-pressing
to bring up the context menu, then selecting "Create Shortcut". Other options
that are displayed will depend on the particular plugins that you
are using.
</p><p>
If you are having trouble with a particular plugin, please report errors
to the plugin creator for fastest service.
</p>
]]></string>
<!-- Toast: created shortcut (%s => label) -->
<string name="FLA_toast_onCreateShortcut">Created Shortcut: %s</string>
<!-- ======================== TaskEditActivity ========================= -->
<!-- Title when editing a task (%s => task title) -->
<string name="TEA_title">Astrid: Editing </string>
<!-- Title when creating a new task -->
<string name="TEA_titleNew">Astrid: New Task</string>
<!-- Task title label -->
<string name="TEA_name_label">Summary</string>
<!-- Task title hint (displayed when edit box is empty) -->
<string name="TEA_name_hint">Task Name</string>
<!-- Task importance label -->
<string name="TEA_importance_label">How important is it?</string>
<!-- Task urgency label -->
<string name="TEA_urgency_label">When must you finish it?</string>
<!-- Task hidden until label -->
<string name="TEA_hiddenUntil_label">Hide Until This Date</string>
<!-- Task plugins label -->
<string name="TEA_plugins_label">Plugins</string>
<!-- Save button -->
<string name="TEA_save_label">Save</string>
<!-- Don't Save button -->
<string name="TEA_discard_label">Don\'t Save</string>
<string name="prefs_deadlineTime_title">Default Deadlines</string>
<string name="prefs_deadlineTime_desc"># of days from now to set new deadlines</string>
<!-- Menu: Save -->
<string name="TEA_menu_save">Save Changes</string>
<!-- Menu: Don't Save -->
<string name="TEA_menu_discard">Don\'t Save</string>
<!-- Menu: Delete Task -->
<string name="TEA_menu_delete">Delete Task</string>
<!-- Toast: task saved with deadline (%s => time units) -->
<string name="TEA_onTaskSave_due">Task Saved: due in %s</string>
<!-- Toast: task saved with deadline in past (%s => time units) -->
<string name="TEA_onTaskSave_overdue">Task Saved: due %s ago</string>
<!-- Toast: task saved without deadlines -->
<string name="TEA_onTaskSave_notDue">Task Saved</string>
<!-- Toast: task was not saved -->
<string name="TEA_onTaskDiscard">Task Editing Was Abandoned</string>
<!-- ========================== Notifications ========================== -->
<string name="prefs_backup_title">Automatic Backups</string>
<!-- backup summary when there is no backup message -->
<string name="prefs_backup_desc">Perform daily backups to sdcard.</string>
<!-- backup failure message (%s -> error message) -->
<string name="prefs_backup_desc_failure">Last backup failed: %s</string>
<!-- backup failure error when error message is null -->
<string name="prefs_backup_desc_failure_null">Last backup failed, could not read SD card</string>
<!-- backup success message (%s -> date) -->
<string name="prefs_backup_desc_success">Latest backup was on %s</string>
<string name="displayedFields_PrefScreen_Title">Displayed Fields</string>
<string name="displayedFields_PrefScreen_Desc">Select the fields to show in task list</string>
<!-- Notification title for tasks -->
<string name="Ntf_task_title">Astrid: New Reminder</string>
<!-- ===================== IntroductionActivity ======================== -->
<!-- Window title -->
<string name="InA_title">Welcome to Astrid!</string>
<!-- Button to agree to EULA -->
<string name="InA_agree">I Agree</string>
<!-- Button to disagree with EULA -->
<string name="InA_disagree">I Disagree</string>
<!-- Button to show legal -->
<string name="InA_show_eula">Start Using Todoroo</string>
<!-- =========================== HelpActivity ========================== -->
<!-- Button to send e-mail to Todoroo -->
<string name="HlA_email_us">E-mail Todoroo</string>
<!-- Window title -->
<string name="HlA_title">Todoroo Help</string>
<!-- ========================= EditPreferences ========================= -->
<string name="prefs_titleVisible_title">Task Title</string>
<string name="prefs_titleVisible_desc">Task description</string>
<string name="prefs_deadlineVisible_title">Dates</string>
<string name="prefs_deadlineVisible_desc">Upcoming deadlines / completed date</string>
<string name="prefs_timeVisible_title">Times</string>
<string name="prefs_timeVisible_desc">Estimated &amp; Elapsed Times</string>
<string name="prefs_importanceVisible_title">Importance</string>
<string name="prefs_importanceVisible_desc">Task importance indicator</string>
<string name="prefs_tagsVisible_title">Tags</string>
<string name="prefs_tagsVisible_desc">Tags associated with this task</string>
<string name="prefs_repeatVisible_title">Repeats</string>
<string name="prefs_repeatVisible_desc">Task repeat information</string>
<string name="prefs_reminderVisible_title">Reminders</string>
<string name="prefs_reminderVisible_desc">Displayed if this task has reminders</string>
<string name="prefs_notesVisible_title">Notes</string>
<string name="prefs_notesVisible_desc">Notes associated with this task</string>
<!-- Window Title -->
<string name="EPr_title">Astrid: Preferences</string>
<!-- This string is Astrid's Android Marketplace title. It never appears in the app itself. -->
<string name="marketplace_title">Astrid Task/Todo List</string>
<!-- This string is Astrid's Android Marketplace description. It never appears in the app itself. -->
<string name="marketplace_description">
Astrid is the highly-acclaimed open-source task list that is simple enough to not get in your way, powerful enough to help you get stuff done! Tags, reminders, RememberTheMilk sync, Locale plug-in &amp; more!
</string>
<!-- Automatically filled in by Launchpad: -->
<string name="about_translators">translator-credits</string>
<!-- Widget text when loading tasks -->
<string name="widget_loading">Loading...</string>
<!-- Defaults Title -->
<string name="EPr_defaults_header">New Task Defaults</string>
<!-- Permissions -->
<string name="read_tasks_permission">Read Astrid tasks</string>
<!-- Default Urgency Title -->
<string name="EPr_default_urgency_title">Default Urgency</string>
<!-- Default Urgency Description (%s => setting) -->
<string name="EPr_default_urgency_desc">Currently Set To: %s</string>
<!-- Preference Key (do not translate) -->
<string name="EPr_default_urgency_key">p_durg</string>
<!-- Default Importance Title -->
<string name="EPr_default_importance_title">Default Importance</string>
<!-- Default Importance Description (%s => setting) -->
<string name="EPr_default_importance_desc">Currently Set To: %s</string>
<!-- Preference Key (do not translate) -->
<string name="EPr_default_importance_key">p_dimp</string>
</resources>

@ -93,7 +93,7 @@ public final class Database extends AbstractDatabase {
// create tables
for(Table table : TABLES) {
sql.append("CREATE TABLE IF NOT EXISTS ").append(table.getName()).append('(').
sql.append("CREATE TABLE IF NOT EXISTS ").append(table.name).append('(').
append(AbstractModel.ID_PROPERTY).append(" INTEGER PRIMARY KEY AUTOINCREMENT");
for(Property<?> property : table.getProperties()) {
if(AbstractModel.ID_PROPERTY.equals(property.name))

@ -48,16 +48,7 @@ public class MetadataDao extends AbstractDao<Metadata> {
}
/**
* Delete all matching a clause
* @param database
* @param where
* @return # of deleted items
*/
public int deleteWhere(AbstractDatabase database, Criterion where) {
return database.getDatabase().delete(Metadata.TABLE.getName(),
where.toString(), null);
}
/**
* Fetch all metadata that are unattached to the task

@ -79,6 +79,12 @@ public class TaskDao extends AbstractDao<Task> {
return Criterion.and(Task.COMPLETION_DATE.gt(0), Task.COMPLETION_DATE.lt(time));
}
/** Returns tasks that have a blank or null title */
@SuppressWarnings("nls")
public static Criterion hasNoTitle() {
return Criterion.or(Task.TITLE.isNull(), Task.TITLE.eq(""));
}
}
// --- custom operations

@ -30,7 +30,7 @@ public class Metadata extends AbstractModel {
/** ID */
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY);
TABLE, ID_PROPERTY_NAME);
/** Associated Task */
public static final LongProperty TASK = new LongProperty(

@ -0,0 +1,48 @@
/**
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.service;
import java.io.PrintWriter;
import java.io.StringWriter;
import android.database.sqlite.SQLiteException;
import com.flurry.android.FlurryAgent;
import com.todoroo.andlib.service.ExceptionService.ErrorReporter;
public class FlurryReporter implements ErrorReporter {
@SuppressWarnings("nls")
public void handleError(String name, Throwable error) {
String message = error.toString();
StringWriter writer = new StringWriter();
PrintWriter writerPrinter = new PrintWriter(writer);
error.printStackTrace(writerPrinter);
writerPrinter.flush();
writerPrinter.close();
String trace = writer.toString();
// shorten the string
trace = trace.substring(message.length());
trace = trace.replaceAll("com.todoroo.bente", "!ctb");
trace = trace.replaceAll("com.todoroo.astrid", "!cta");
trace = trace.replaceAll("com.todoroo.android", "!ctc");
trace = trace.replaceAll("com.mdt.rtm", "!rtm");
trace = trace.replaceAll("android.database.sqlite", "!sqlite");
trace = trace.replaceAll("android", "!A");
trace = trace.replaceAll("database", "!db");
trace = trace.replaceAll("org.apache.harmony.xml.parsers", "!xmlp");
trace = trace.replaceAll(IllegalStateException.class.getName(), "IlStEx");
trace = trace.replaceAll(ClassCastException.class.getName(), "ClCaEx");
trace = trace.replaceAll(NullPointerException.class.getName(), "NPEx");
trace = trace.replaceAll(SQLiteException.class.getName(), "SqLiEx");
trace = trace.replaceAll(".java:", ":");
FlurryAgent.onError(name, message, trace);
}
}

@ -1,10 +1,14 @@
package com.todoroo.astrid.service;
import com.todoroo.android.data.Property;
import com.todoroo.android.data.TodorooCursor;
import com.todoroo.android.data.Property.IntegerProperty;
import com.todoroo.android.service.Autowired;
import com.todoroo.android.service.DependencyInjectionService;
import com.thoughtworks.sql.Criterion;
import com.thoughtworks.sql.Order;
import com.thoughtworks.sql.Query;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.model.Metadata;
@ -68,16 +72,14 @@ public class MetadataService {
* @param where SQL where clause
* @param onlyCountsGreaterThanZero only include items where count > 0
*/
public TodorooCursor<Metadata> fetchWithCount(String where, String sort,
public TodorooCursor<Metadata> fetchWithCount(Criterion where, Order order,
boolean onlyCountsGreaterThanZero) {
IntegerProperty count = Property.countProperty();
String having = null;
IntegerProperty count = new CountProperty();
Query query = Query.select(Metadata.VALUE, count).
where(where).orderBy(order);
if(onlyCountsGreaterThanZero)
having = count.name + " > 0"; //$NON-NLS-1$
TodorooCursor<Metadata> cursor = metadataDao.fetch(database, new Property<?>[] {
Metadata.VALUE, count },
where,
Metadata.VALUE.name, having, sort, null);
query.having(count.gt(0));
TodorooCursor<Metadata> cursor = metadataDao.query(database, query);
return cursor;
}
@ -85,7 +87,7 @@ public class MetadataService {
* Delete from metadata table where rows match a certain condition
* @param where
*/
public void deleteWhere(String where) {
public void deleteWhere(Criterion where) {
metadataDao.deleteWhere(database, where);
}
}

@ -1,5 +1,6 @@
package com.todoroo.astrid.service;
import com.thoughtworks.sql.Query;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
@ -8,6 +9,7 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Task;
/**
@ -39,18 +41,6 @@ public class TaskService {
// --- service layer
/**
* Return cursor to tasks returned by given {@link Filter}
*
* @param properties
* @param filter
* @return
*/
public TodorooCursor<Task> fetchFiltered(Property<?>[] properties,
Filter filter) {
return taskDao.fetch(database, properties, filter);
}
/**
*
* @param properties
@ -101,7 +91,8 @@ public class TaskService {
* Clean up tasks. Typically called on startup
*/
public void cleanup() {
TodorooCursor<Task> cursor = taskDao.fetch(database, idProperties(), TaskSql.hasNoName(), null);
TodorooCursor<Task> cursor = taskDao.query(database,
Query.select(idProperties()).where(TaskCriteria.hasNoTitle()));
try {
if(cursor.getCount() == 0)
return;

Loading…
Cancel
Save