diff --git a/api/src/com/todoroo/andlib/utility/DateUtilities.java b/api/src/com/todoroo/andlib/utility/DateUtilities.java
index 16c5a9de3..94cfd1b69 100644
--- a/api/src/com/todoroo/andlib/utility/DateUtilities.java
+++ b/api/src/com/todoroo/andlib/utility/DateUtilities.java
@@ -37,6 +37,42 @@ public class DateUtilities {
return date.getTime();
}
+ /**
+ * Add the specified amount of months to the given time.
+ * The day of month will stay the same.
+ *
+ * @param time the base-time (in milliseconds) to which the amount of months is added
+ * @param interval the amount of months to be added
+ * @return the calculated time in milliseconds
+ */
+ public static final long addCalendarMonthsToUnixtime(long time, int interval) {
+ long result = 0;
+ Date date = new Date(time);
+
+ int month = date.getMonth();
+ int year = date.getYear();
+
+ int yearsToAdd = interval / 12;
+ int monthsToAdd = interval % 12;
+
+ year += yearsToAdd;
+ month += monthsToAdd;
+
+ // correct month overflow
+ if (month > Calendar.DECEMBER) {
+ month = month - Calendar.DECEMBER - 1;
+ year++;
+ }
+
+ // the day stays the same, thats the point
+ // it's especially important for birthday-reminders
+ date.setMonth(month);
+ date.setYear(year);
+
+ result = date.getTime();
+ return result;
+ }
+
/** Returns unixtime for current time */
public static final long now() {
return System.currentTimeMillis();
@@ -58,6 +94,9 @@ public class DateUtilities {
/** Represents a single week */
public static long ONE_WEEK = 7 * ONE_DAY;
+ /** Represents a single minute */
+ public static long ONE_MINUTE = ONE_HOUR / 60;
+
/* ======================================================================
* =========================================================== formatters
* ====================================================================== */
diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
index 955a60c22..d2726bd29 100644
--- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
@@ -182,11 +182,17 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
+ case RepeatControlSet.INTERVAL_MINUTES:
+ time += value * DateUtilities.ONE_MINUTE;
+ break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
- time += value * 30 * DateUtilities.ONE_DAY;
+ time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
+ break;
+ case RepeatControlSet.INTERVAL_YEARS:
+ time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
}
diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java
index a6672ac94..a8c4e9e7b 100644
--- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java
+++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java
@@ -49,6 +49,8 @@ public class RepeatControlSet implements TaskEditControlSet {
public static final int INTERVAL_WEEKS = 1;
public static final int INTERVAL_MONTHS = 2;
public static final int INTERVAL_HOURS = 3;
+ public static final int INTERVAL_MINUTES = 4;
+ public static final int INTERVAL_YEARS = 5;
private static final int TYPE_DUE_DATE = 0;
private static final int TYPE_COMPLETION_DATE = 1;
@@ -199,6 +201,12 @@ public class RepeatControlSet implements TaskEditControlSet {
case HOURLY:
interval.setSelection(INTERVAL_HOURS);
break;
+ case MINUTELY:
+ interval.setSelection(INTERVAL_MINUTES);
+ break;
+ case YEARLY:
+ interval.setSelection(INTERVAL_YEARS);
+ break;
default:
// an unhandled recurrence
exceptionService.reportError("repeat-unhandled-rule", //$NON-NLS-1$
@@ -265,6 +273,13 @@ public class RepeatControlSet implements TaskEditControlSet {
break;
case INTERVAL_HOURS:
rrule.setFreq(Frequency.HOURLY);
+ break;
+ case INTERVAL_MINUTES:
+ rrule.setFreq(Frequency.MINUTELY);
+ break;
+ case INTERVAL_YEARS:
+ rrule.setFreq(Frequency.YEARLY);
+ break;
}
result = rrule.toIcal();
diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatDetailExposer.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatDetailExposer.java
index 9d8c87eb1..f1f83c02a 100644
--- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatDetailExposer.java
+++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatDetailExposer.java
@@ -80,6 +80,10 @@ public class RepeatDetailExposer extends BroadcastReceiver {
interval = r.getQuantityString(R.plurals.DUt_months, rrule.getInterval(),
rrule.getInterval());
break;
+ case YEARLY:
+ interval = r.getQuantityString(R.plurals.DUt_years, rrule.getInterval(),
+ rrule.getInterval());
+ break;
default:
// not designed to be used, only a fail-safe
interval = rrule.getInterval() + "-" + rrule.getFreq().name(); //$NON-NLS-1$
diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java
index ae20655e2..a55cbd265 100644
--- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java
+++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java
@@ -97,6 +97,8 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
if(rrule.getFreq() == Frequency.HOURLY)
return handleHourlyRepeat(original, rrule);
+ else if(rrule.getFreq() == Frequency.MINUTELY)
+ return handleMinutelyRepeat(original, rrule);
else
return invokeRecurrence(rrule, original, startDateAsDV);
}
@@ -199,4 +201,11 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
return newDueDate;
}
+ private static long handleMinutelyRepeat(Date startDate, RRule rrule) {
+ long newDueDate;
+ newDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
+ startDate.getTime() + DateUtilities.ONE_MINUTE * rrule.getInterval());
+ return newDueDate;
+ }
+
}
diff --git a/astrid/res/values-ca/strings.xml b/astrid/res/values-ca/strings.xml
index eab6c955e..4faa84d02 100644
--- a/astrid/res/values-ca/strings.xml
+++ b/astrid/res/values-ca/strings.xml
@@ -1750,11 +1750,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Interval de Repecitiò
-
+
- Dia/es
- Setmana/es
- Mes/os
- Hora/es
+ - Minut/s
+ - Year(s)
diff --git a/astrid/res/values-cs/strings.xml b/astrid/res/values-cs/strings.xml
index 10e789df3..ed4a80b48 100644
--- a/astrid/res/values-cs/strings.xml
+++ b/astrid/res/values-cs/strings.xml
@@ -1737,11 +1737,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Opakovací interval
-
+
- Dnů
- Týdnů
- Měsíců
- Hodin
+ - Minut
+ - Year(s)
diff --git a/astrid/res/values-da/strings.xml b/astrid/res/values-da/strings.xml
index 56a87ba96..ee101a17c 100644
--- a/astrid/res/values-da/strings.xml
+++ b/astrid/res/values-da/strings.xml
@@ -1733,11 +1733,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Repeat Interval
-
+
- Dag(e)
- Uge(r)
- Måned(er)
- Time(r)
+ - Minut(er)
+ - Year(s)
diff --git a/astrid/res/values-de/strings.xml b/astrid/res/values-de/strings.xml
index 033f3af90..65edf83cb 100644
--- a/astrid/res/values-de/strings.xml
+++ b/astrid/res/values-de/strings.xml
@@ -1730,11 +1730,13 @@ Achtung: diese Aufgaben sind unwiederbringlich verloren, wenn Sie kein Backup ge
Wiederholungsintervall
-
+
- Tag(e)
- Woche(n)
- Monat(e)
- Stunde(n)
+ - Minute(n)
+ - Jahr(e)
diff --git a/astrid/res/values-es/strings.xml b/astrid/res/values-es/strings.xml
index e3d17fa85..f33087e15 100644
--- a/astrid/res/values-es/strings.xml
+++ b/astrid/res/values-es/strings.xml
@@ -1748,11 +1748,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Intervalo de repetición
-
+
- Día(s)
- Semana(s)
- Mes(es)
- Hora(s)
+ - Minuto(s)
+ - Year(s)
diff --git a/astrid/res/values-fr/strings.xml b/astrid/res/values-fr/strings.xml
index 0a3159c3f..273cdbeb3 100644
--- a/astrid/res/values-fr/strings.xml
+++ b/astrid/res/values-fr/strings.xml
@@ -1734,11 +1734,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Interval de répétition
-
+
- Jour(s)
- Semaine(s)
- Mois
- Heure(s)
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/res/values-he/strings.xml b/astrid/res/values-he/strings.xml
index 2b34e005d..238c35323 100644
--- a/astrid/res/values-he/strings.xml
+++ b/astrid/res/values-he/strings.xml
@@ -1763,11 +1763,13 @@ you get stuff done. It features reminders, tags, sync, Locale plug-in, a widget
Repeat Interval
-
+
- יום/ימים
- שבוע/(ות)
- חודש/ים
- שעה/ות
+ - דקה/דקות
+ - Year(s)
diff --git a/astrid/res/values-it/strings.xml b/astrid/res/values-it/strings.xml
index 82554bd83..048737a05 100644
--- a/astrid/res/values-it/strings.xml
+++ b/astrid/res/values-it/strings.xml
@@ -1734,11 +1734,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Intervallo di ripetizione
-
+
- Giorno(i)
- Settimana(e)
- Mese(i)
- Ora(e)
+ - Minuto(i)
+ - Year(s)
diff --git a/astrid/res/values-ja/strings.xml b/astrid/res/values-ja/strings.xml
index f86460c93..3156f0082 100644
--- a/astrid/res/values-ja/strings.xml
+++ b/astrid/res/values-ja/strings.xml
@@ -1738,11 +1738,13 @@ you get stuff done. It features reminders, tags, sync, Locale plug-in, a widget
繰り返し間隔
-
+
- 日毎
- 週毎
- か月毎
- 時間毎
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/res/values-ko/strings.xml b/astrid/res/values-ko/strings.xml
index 2ec7a30ab..1f345aade 100644
--- a/astrid/res/values-ko/strings.xml
+++ b/astrid/res/values-ko/strings.xml
@@ -1745,11 +1745,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
반복 주기
-
+
- 일
- 주
- 월
- 시
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/res/values-nb/strings.xml b/astrid/res/values-nb/strings.xml
index 66ea71cb3..9eb0bc1a2 100644
--- a/astrid/res/values-nb/strings.xml
+++ b/astrid/res/values-nb/strings.xml
@@ -1741,11 +1741,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Gjentakelsesintervall
-
+
- Dag(er)
- Uke(r)
- Måned(er)
- Time(r)
+ - Minutt(er)
+ - Year(s)
diff --git a/astrid/res/values-nl/strings.xml b/astrid/res/values-nl/strings.xml
index ce89a3560..173827284 100644
--- a/astrid/res/values-nl/strings.xml
+++ b/astrid/res/values-nl/strings.xml
@@ -1716,11 +1716,13 @@
Herhaal interval
-
+
- Dag(en)
- Week/Weken
- Maand(en)
- Uur/Uren
+ - Minuut/Minuten
+ - Year(s)
diff --git a/astrid/res/values-pl/strings.xml b/astrid/res/values-pl/strings.xml
index afa370a48..20dcf97d4 100644
--- a/astrid/res/values-pl/strings.xml
+++ b/astrid/res/values-pl/strings.xml
@@ -1745,11 +1745,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Odstęp powtarzania
-
+
- Dzień/Dni
- Tydzień/Tygodni(e)
- Miesiąc/Miesiący(e)
- Godzinę(y)/Godzin
+ - Minuta/Minut
+ - Year(s)
diff --git a/astrid/res/values-pt/strings.xml b/astrid/res/values-pt/strings.xml
index 0592488d1..6100d1700 100644
--- a/astrid/res/values-pt/strings.xml
+++ b/astrid/res/values-pt/strings.xml
@@ -1753,11 +1753,13 @@ Astrid might not let you know when your tasks are due.\n
Repeat Interval
-
+
- Dia(s)
- Semana(s)
- Mês(es)
- Hora(s)
+ - Minuto(s)
+ - Year(s)
diff --git a/astrid/res/values-ru/strings.xml b/astrid/res/values-ru/strings.xml
index dfc7b9c7b..24ef5da0f 100644
--- a/astrid/res/values-ru/strings.xml
+++ b/astrid/res/values-ru/strings.xml
@@ -1734,11 +1734,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Интервал повтора
-
+
- День(дней)
- Неделя(ль)
- Месяц(ев)
- Час(ов)
+ - минут(а)
+ - Year(s)
diff --git a/astrid/res/values-sv/strings.xml b/astrid/res/values-sv/strings.xml
index 3cbb3031f..a7a8ce66a 100644
--- a/astrid/res/values-sv/strings.xml
+++ b/astrid/res/values-sv/strings.xml
@@ -1733,11 +1733,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
Upprepningsintervall
-
+
- Dag(ar)
- Vecka (veckor)
- Månad(er)
- Timme (timmar)
+ - Minut(er)
+ - Year(s)
diff --git a/astrid/res/values-th/strings.xml b/astrid/res/values-th/strings.xml
index 283cf070f..c4bf48923 100644
--- a/astrid/res/values-th/strings.xml
+++ b/astrid/res/values-th/strings.xml
@@ -1761,11 +1761,13 @@ you get stuff done. It features reminders, tags, sync, Locale plug-in, a widget
Repeat Interval
-
+
- วัน
- สัปดาห์
- เดือน
- ชั่วโมง
+ - นาที
+ - Year(s)
diff --git a/astrid/res/values-zh-rCN/strings.xml b/astrid/res/values-zh-rCN/strings.xml
index fdf166d45..7db0c2a3e 100644
--- a/astrid/res/values-zh-rCN/strings.xml
+++ b/astrid/res/values-zh-rCN/strings.xml
@@ -1717,11 +1717,13 @@
重复间隔
-
+
- 天
- 周
- 月
- 小时
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/res/values-zh-rTW/strings.xml b/astrid/res/values-zh-rTW/strings.xml
index bfc84edef..a53b60169 100644
--- a/astrid/res/values-zh-rTW/strings.xml
+++ b/astrid/res/values-zh-rTW/strings.xml
@@ -1734,11 +1734,13 @@ Astrid is open-source and proudly maintained by Todoroo, Inc.
重複間隔
-
+
- 天
- 週
- 月
- 小時
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/res/values/strings-repeat.xml b/astrid/res/values/strings-repeat.xml
index f0b09acef..d0ffe460d 100644
--- a/astrid/res/values/strings-repeat.xml
+++ b/astrid/res/values/strings-repeat.xml
@@ -20,11 +20,13 @@
Repeat Interval
-
+
- Day(s)
- Week(s)
- Month(s)
- Hour(s)
+ - Minute(s)
+ - Year(s)
diff --git a/astrid/src/com/todoroo/astrid/ui/ContactsAutoComplete.java b/astrid/src/com/todoroo/astrid/ui/ContactsAutoComplete.java
index f09a6050b..1da05ce8b 100644
--- a/astrid/src/com/todoroo/astrid/ui/ContactsAutoComplete.java
+++ b/astrid/src/com/todoroo/astrid/ui/ContactsAutoComplete.java
@@ -75,9 +75,13 @@ public class ContactsAutoComplete extends AutoCompleteTextView {
// --- cursor stuff
private void setUpContacts() {
- adapter = new ContactListAdapter((Activity) getContext(), null);
- adapter.setCompleteSharedTags(completeTags);
- setAdapter(adapter);
+ try {
+ adapter = new ContactListAdapter((Activity) getContext(), null);
+ adapter.setCompleteSharedTags(completeTags);
+ setAdapter(adapter);
+ } catch (VerifyError ve) {
+ adapter = null;
+ }
}
// --- getters and setters
@@ -92,7 +96,8 @@ public class ContactsAutoComplete extends AutoCompleteTextView {
public void setCompleteSharedTags(boolean value) {
completeTags = value;
- adapter.setCompleteSharedTags(value);
+ if (adapter != null)
+ adapter.setCompleteSharedTags(value);
}
public void setAllowMultiple(boolean allowMultiple) {