From fdb009528f362fafec04b72c24fd25109fc095bd Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 7 Oct 2015 02:39:22 -0600 Subject: [PATCH] Remove Date and Calendar usage --- .../andlib/utility/DateUtilitiesTest.java | 8 +-- .../reminders/NotifyAtDeadlineTest.java | 10 +-- .../astrid/reminders/ReminderServiceTest.java | 4 +- .../astrid/repeats/AdvancedRepeatTest.java | 3 +- .../astrid/repeats/NewRepeatTests.java | 38 +++++----- .../astrid/service/TitleParserTest.java | 70 +++++++++---------- src/androidTest/java/org/tasks/Freeze.java | 6 -- .../java/org/tasks/TestUtilities.java | 2 - .../org/tasks/date/DateTimeUtilsTest.java | 6 -- .../tasks/scheduling/BackupServiceTests.java | 3 +- .../todoroo/andlib/utility/DateUtilities.java | 17 ++--- .../java/com/todoroo/astrid/data/Task.java | 18 +++-- .../astrid/gtasks/api/GtasksApiUtilities.java | 10 ++- .../gtasks/sync/GtasksSyncV2Provider.java | 17 +++-- .../astrid/repeats/RepeatControlSet.java | 10 ++- .../repeats/RepeatTaskCompleteListener.java | 26 +++---- .../todoroo/astrid/timers/TimerPlugin.java | 4 +- .../astrid/ui/HideUntilControlSet.java | 25 +++---- src/main/java/org/tasks/Notifier.java | 8 +-- .../java/org/tasks/date/DateTimeUtils.java | 13 +--- src/main/java/org/tasks/time/DateTime.java | 14 +++- 21 files changed, 143 insertions(+), 169 deletions(-) diff --git a/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java b/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java index f56938291..7481ffcd0 100644 --- a/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java +++ b/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java @@ -198,15 +198,15 @@ public class DateUtilitiesTest extends AndroidTestCase { } public void testAddMonthsToTimestamp() { - assertEquals(newDate(2014, 1, 1).getTime(), addCalendarMonthsToUnixtime(newDate(2013, 12, 1).getTime(), 1)); - assertEquals(newDate(2014, 12, 31).getTime(), addCalendarMonthsToUnixtime(newDate(2013, 12, 31).getTime(), 12)); + assertEquals(newDate(2014, 1, 1).getMillis(), addCalendarMonthsToUnixtime(newDate(2013, 12, 1).getMillis(), 1)); + assertEquals(newDate(2014, 12, 31).getMillis(), addCalendarMonthsToUnixtime(newDate(2013, 12, 31).getMillis(), 12)); } public void testAddMonthsWithLessDays() { - assertEquals(newDate(2014, 3, 3).getTime(), addCalendarMonthsToUnixtime(newDate(2013, 12, 31).getTime(), 2)); + assertEquals(newDate(2014, 3, 3).getMillis(), addCalendarMonthsToUnixtime(newDate(2013, 12, 31).getMillis(), 2)); } public void testAddMonthsWithMoreDays() { - assertEquals(newDate(2014, 1, 30).getTime(), addCalendarMonthsToUnixtime(newDate(2013, 11, 30).getTime(), 2)); + assertEquals(newDate(2014, 1, 30).getMillis(), addCalendarMonthsToUnixtime(newDate(2013, 11, 30).getMillis(), 2)); } } diff --git a/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java b/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java index 9ba71dbfc..f4c1463ce 100644 --- a/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java +++ b/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java @@ -25,7 +25,7 @@ public class NotifyAtDeadlineTest extends AndroidTestCase { private static final int MILLIS_PER_HOUR = (int) TimeUnit.HOURS.toMillis(1); private final Task dueAtNoon = new Task() {{ - setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getTime()); + setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getMillis()); setReminderFlags(Task.NOTIFY_AT_DEADLINE); }}; @@ -69,7 +69,7 @@ public class NotifyAtDeadlineTest extends AndroidTestCase { public void testDontNotifyMoreThanOncePerDay() { Task task = new Task() {{ - setDueDate(newDate(2014, 1, 23).getTime()); + setDueDate(newDate(2014, 1, 23).getMillis()); setReminderFlags(Task.NOTIFY_AT_DEADLINE); setReminderLast(new DateTime(2014, 1, 23, 17, 23, 37).getMillis()); }}; @@ -93,7 +93,7 @@ public class NotifyAtDeadlineTest extends AndroidTestCase { Freeze.freezeAt(new DateTime(2014, 1, 27, 9, 13, 37, 501)); preferences.setInt(R.string.p_rmd_time, 8 * MILLIS_PER_HOUR); Task task = new Task() {{ - setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getTime()); + setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getMillis()); setReminderFlags(Task.NOTIFY_AT_DEADLINE); }}; assertEquals( @@ -106,7 +106,7 @@ public class NotifyAtDeadlineTest extends AndroidTestCase { Freeze.freezeAt(new DateTime(2014, 1, 27, 11, 13, 37, 501)); preferences.setInt(R.string.p_rmd_time, 8 * MILLIS_PER_HOUR); Task task = new Task() {{ - setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getTime()); + setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getMillis()); setReminderFlags(Task.NOTIFY_AT_DEADLINE); }}; assertEquals( @@ -119,7 +119,7 @@ public class NotifyAtDeadlineTest extends AndroidTestCase { Freeze.freezeAt(new DateTime(2014, 1, 27, 1, 53, 37, 509)); preferences.setInt(R.string.p_rmd_time, MILLIS_PER_HOUR); Task task = new Task() {{ - setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getTime()); + setDueDate(Task.URGENCY_SPECIFIC_DAY, newDate(2014, 1, 27).getMillis()); setReminderFlags(Task.NOTIFY_AT_DEADLINE); }}; assertEquals( diff --git a/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java b/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java index 4bee917aa..144167d1f 100644 --- a/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java +++ b/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java @@ -18,7 +18,7 @@ import javax.inject.Inject; import static org.tasks.Freeze.freezeClock; import static org.tasks.Freeze.thaw; -import static org.tasks.date.DateTimeUtils.newDate; +import static org.tasks.date.DateTimeUtils.newDateTime; public class ReminderServiceTest extends InjectingTestCase { @@ -233,7 +233,7 @@ public class ReminderServiceTest extends InjectingTestCase { public void createAlarm(Context context, Task task, long time, int type) { if(time == 0 || time == Long.MAX_VALUE) return; - fail("created alarm, no alarm expected (" + type + ": " + newDate(time)); + fail("created alarm, no alarm expected (" + type + ": " + newDateTime(time)); } } diff --git a/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java b/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java index 659e4ae5c..adb73c605 100644 --- a/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java +++ b/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java @@ -20,7 +20,6 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateTime; public class AdvancedRepeatTest extends AndroidTestCase { @@ -227,7 +226,7 @@ public class AdvancedRepeatTest extends AndroidTestCase { } public static void assertDateTimeEquals(long date, long other) { - assertEquals("Expected: " + newDate(date) + ", Actual: " + newDate(other), + assertEquals("Expected: " + newDateTime(date) + ", Actual: " + newDateTime(other), date, other); } diff --git a/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.java b/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.java index 4f8f98865..a09efe7e3 100644 --- a/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.java +++ b/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.java @@ -23,15 +23,15 @@ import com.todoroo.astrid.test.DatabaseTestCase; import org.tasks.R; import org.tasks.preferences.Preferences; +import org.tasks.time.DateTime; import java.util.ArrayList; -import java.util.Date; import java.util.HashSet; import java.util.List; import javax.inject.Inject; -import static org.tasks.date.DateTimeUtils.newDate; +import static org.tasks.date.DateTimeUtils.newDateTime; public class NewRepeatTests extends DatabaseTestCase { @@ -73,12 +73,12 @@ public class NewRepeatTests extends DatabaseTestCase { } protected void assertTimesMatch(long expectedTime, long newDueDate) { - assertTrue(String.format("Expected %s, was %s", newDate(expectedTime), newDate(newDueDate)), + assertTrue(String.format("Expected %s, was %s", newDateTime(expectedTime), newDateTime(newDueDate)), Math.abs(expectedTime - newDueDate) < 5000); } protected void assertTimesWithinOneHour(long expectedTime, long newDueDate) { - assertTrue(String.format("Expected %s, was %s", newDate(expectedTime), newDate(newDueDate)), + assertTrue(String.format("Expected %s, was %s", newDateTime(expectedTime), newDateTime(newDueDate)), Math.abs(expectedTime - newDueDate) <= DateUtilities.ONE_HOUR); } @@ -102,9 +102,8 @@ public class NewRepeatTests extends DatabaseTestCase { Task t = new Task(); t.setTitle(title); long dueDate = DateUtilities.now() + DateUtilities.ONE_DAY * 3; - Date adjustDate = newDate(dueDate); - adjustDate.setSeconds(1); - dueDate = adjustDate.getTime(); + DateTime adjustDate = newDateTime(dueDate).withSecondOfMinute(1); + dueDate = adjustDate.getMillis(); dueDate = (dueDate / 1000L) * 1000L; // Strip milliseconds t.setDueDate(dueDate); @@ -126,7 +125,7 @@ public class NewRepeatTests extends DatabaseTestCase { t = taskDao.fetch(t.getId(), Task.PROPERTIES); // Refetch long completionDate = setCompletionDate(completeBefore, t, dueDate); - System.err.println("Completion date: " + newDate(completionDate)); + System.err.println("Completion date: " + newDateTime(completionDate)); waitAndSync(); @@ -163,8 +162,8 @@ public class NewRepeatTests extends DatabaseTestCase { } Weekday[] allWeekdays = Weekday.values(); - Date date = newDate(result); - Weekday start = allWeekdays[date.getDay()]; + DateTime date = newDateTime(result); + Weekday start = allWeekdays[date.getDayOfWeek()]; int i; for (i = 0; i < allWeekdays.length; i++) { if (start == allWeekdays[i]) break; @@ -213,21 +212,22 @@ public class NewRepeatTests extends DatabaseTestCase { } else if (frequency.equals(Frequency.WEEKLY)) { expectedTime = computeWeeklyCaseDueDate(fromDate, rrule, fromCompletion); } else if (frequency.equals(Frequency.MONTHLY)) { - Date originalDate = newDate(expectedTime); + DateTime originalDate = newDateTime(expectedTime); for (int i = 0; i < interval; i++) { - int month = originalDate.getMonth(); + int month = originalDate.getMonthOfYear(); if (month == 11) { // Roll over the year and set the month to January - originalDate.setYear(originalDate.getYear() + 1); - originalDate.setMonth(0); + originalDate = originalDate + .withYear(originalDate.getYear() + 1) + .withMonthOfYear(1); } else { - originalDate.setMonth(originalDate.getMonth() + 1); + originalDate = originalDate.withMonthOfYear(originalDate.getMonthOfYear() + 1); } } - expectedTime = originalDate.getTime(); + expectedTime = originalDate.getMillis(); } else if (frequency.equals(Frequency.YEARLY)) { - Date originalCompleteDate = newDate(expectedTime); - originalCompleteDate.setYear(originalCompleteDate.getYear() + interval); - expectedTime = originalCompleteDate.getTime(); + DateTime originalCompleteDate = newDateTime(expectedTime); + originalCompleteDate = originalCompleteDate.withYear(originalCompleteDate.getYear() + interval); + expectedTime = originalCompleteDate.getMillis(); } return expectedTime; } diff --git a/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java b/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java index cb84f525f..6572577e0 100644 --- a/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java +++ b/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java @@ -14,14 +14,14 @@ import com.todoroo.astrid.utility.TitleParser; import org.tasks.R; import org.tasks.preferences.Preferences; +import org.tasks.time.DateTime; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import javax.inject.Inject; -import static org.tasks.date.DateTimeUtils.newDate; +import static org.tasks.date.DateTimeUtils.newDateTime; public class TitleParserTest extends DatabaseTestCase { @@ -66,9 +66,9 @@ public class TitleParserTest extends DatabaseTestCase { for (int i = 0; i < 23; i++) { String testTitle = "Jog on " + titleMonthStrings[i] + " 12."; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMonth(), i/2); - assertEquals(date.getDate(), 12); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getMonthOfYear(), i/2 + 1); + assertEquals(date.getDayOfMonth(), 12); } } @@ -77,10 +77,10 @@ public class TitleParserTest extends DatabaseTestCase { for (int i = 1; i < 13; i++) { String testTitle = "Jog on " + i + "/12/13"; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMonth(), i-1); - assertEquals(date.getDate(), 12); - assertEquals(date.getYear(), 113); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getMonthOfYear(), i); + assertEquals(date.getDayOfMonth(), 12); + assertEquals(date.getYear(), 2013); } } @@ -88,36 +88,36 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String testTitle = "Jog on 23:21."; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 21); - assertEquals(date.getHours(), 23); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 23); + assertEquals(date.getMinuteOfHour(), 21); } public void test_AM_PM() { Task task = new Task(); String testTitle = "Jog at 8:33 PM."; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 33); - assertEquals(date.getHours(), 20); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 20); + assertEquals(date.getMinuteOfHour(), 33); } public void test_at_hour() { Task task = new Task(); String testTitle = "Jog at 8 PM."; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 0); - assertEquals(date.getHours(), 20); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 20); + assertEquals(date.getMinuteOfHour(), 0); } public void test_oclock_AM() { Task task = new Task(); String testTitle = "Jog at 8 o'clock AM."; insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 0); - assertEquals(date.getHours(), 8); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 8); + assertEquals(date.getMinuteOfHour(), 0); } public void test_several_forms_of_eight() { @@ -129,9 +129,9 @@ public class TitleParserTest extends DatabaseTestCase { }; for (String testTitle: testTitles) { insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 0); - assertEquals(date.getHours(), 8); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 8); + assertEquals(date.getMinuteOfHour(), 0); } } @@ -146,9 +146,9 @@ public class TitleParserTest extends DatabaseTestCase { }; for (String testTitle: testTitles) { insertTitleAddTask(testTitle, task); - Date date = newDate(task.getDueDate()); - assertEquals(date.getMinutes(), 30); - assertEquals(date.getHours(), 12); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getHourOfDay(), 12); + assertEquals(date.getMinuteOfHour(), 30); } } @@ -167,16 +167,16 @@ public class TitleParserTest extends DatabaseTestCase { String title = "Jog today"; task.setTitle(title); taskService.createWithValues(task, null, title); - Date date = newDate(task.getDueDate()); - assertEquals(date.getDay()+1, today.get(Calendar.DAY_OF_WEEK)); + DateTime date = newDateTime(task.getDueDate()); + assertEquals(date.getDayOfMonth(), today.get(Calendar.DAY_OF_WEEK)); //Calendar starts 1-6, date.getDay() starts at 0 task = new Task(); title = "Jog tomorrow"; task.setTitle(title); taskService.createWithValues(task, null, title); - date = newDate(task.getDueDate()); - assertEquals((date.getDay()+1) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7); + date = newDateTime(task.getDueDate()); + assertEquals((date.getDayOfWeek()) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7); String[] days = { "sunday", @@ -202,15 +202,15 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog "+ days[i]; task.setTitle(title); taskService.createWithValues(task, null, title); - date = newDate(task.getDueDate()); - assertEquals(date.getDay(), i); + date = newDateTime(task.getDueDate()); + assertEquals(date.getDayOfWeek(), i); task = new Task(); title = "Jog "+ abrevDays[i]; task.setTitle(title); taskService.createWithValues(task, null, title); - date = newDate(task.getDueDate()); - assertEquals(date.getDay(), i); + date = newDateTime(task.getDueDate()); + assertEquals(date.getDayOfWeek(), i); } } diff --git a/src/androidTest/java/org/tasks/Freeze.java b/src/androidTest/java/org/tasks/Freeze.java index ef74621c6..7b26e775d 100644 --- a/src/androidTest/java/org/tasks/Freeze.java +++ b/src/androidTest/java/org/tasks/Freeze.java @@ -3,8 +3,6 @@ package org.tasks; import org.tasks.time.DateTime; import org.tasks.time.DateTimeUtils; -import java.util.Date; - import static org.tasks.time.DateTimeUtils.currentTimeMillis; public class Freeze { @@ -13,10 +11,6 @@ public class Freeze { return freezeAt(currentTimeMillis()); } - public static Freeze freezeAt(Date date) { - return freezeAt(date.getTime()); - } - public static Freeze freezeAt(DateTime dateTime) { return freezeAt(dateTime.getMillis()); } diff --git a/src/androidTest/java/org/tasks/TestUtilities.java b/src/androidTest/java/org/tasks/TestUtilities.java index 20ed08dbf..8fdab7da5 100644 --- a/src/androidTest/java/org/tasks/TestUtilities.java +++ b/src/androidTest/java/org/tasks/TestUtilities.java @@ -2,8 +2,6 @@ package org.tasks; import android.content.Context; -import java.util.Date; - public class TestUtilities { private static boolean mockitoInitialized; diff --git a/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java b/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java index c96915669..ee3aca68f 100644 --- a/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java +++ b/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java @@ -5,11 +5,9 @@ import android.test.AndroidTestCase; import org.tasks.Snippet; import org.tasks.time.DateTime; -import java.util.Date; import java.util.TimeZone; import static org.tasks.Freeze.freezeAt; -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateUtc; import static org.tasks.time.DateTimeUtils.currentTimeMillis; @@ -23,10 +21,6 @@ public class DateTimeUtilsTest extends AndroidTestCase { }}); } - public void testCreateNewDate() { - assertEquals(new Date(114, 0, 1), newDate(2014, 1, 1)); - } - public void testCreateNewUtcDate() { DateTime utc = now.toUTC(); DateTime actual = newDateUtc(utc.getYear(), utc.getMonthOfYear(), utc.getDayOfMonth(), utc.getHourOfDay(), utc.getMinuteOfHour(), utc.getSecondOfMinute()); diff --git a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java index eb6d34195..a903f64c3 100644 --- a/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java +++ b/src/androidTest/java/org/tasks/scheduling/BackupServiceTests.java @@ -20,6 +20,7 @@ import java.io.IOException; import javax.inject.Inject; import static org.tasks.date.DateTimeUtils.newDateTime; +import static org.tasks.time.DateTimeUtils.currentTimeMillis; public class BackupServiceTests extends DatabaseTestCase { @@ -102,7 +103,7 @@ public class BackupServiceTests extends DatabaseTestCase { // make one really old File[] files = temporaryDirectory.listFiles(); - files[4].setLastModified(System.currentTimeMillis() - 20000); + files[4].setLastModified(currentTimeMillis() - 20000); // assert files created assertEquals(11, files.length); diff --git a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java index 49182d986..0818bc5a0 100644 --- a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java +++ b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java @@ -8,17 +8,14 @@ package com.todoroo.andlib.utility; import android.content.Context; import android.text.format.DateFormat; -import org.tasks.time.DateTime; import org.tasks.R; +import org.tasks.time.DateTime; -import java.text.SimpleDateFormat; import java.util.Arrays; -import java.util.Date; import java.util.Locale; -import static org.tasks.time.DateTimeUtils.currentTimeMillis; -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateTime; +import static org.tasks.time.DateTimeUtils.currentTimeMillis; public class DateUtilities { @@ -177,15 +174,15 @@ public class DateUtilities { /** * @return weekday */ - public static String getWeekday(Date date) { - return new SimpleDateFormat("EEEE").format(date); + public static String getWeekday(DateTime date) { + return date.toString("EEEE"); } /** * @return weekday */ - public static String getWeekdayShort(Date date) { - return new SimpleDateFormat("EEE").format(date); + public static String getWeekdayShort(DateTime date) { + return date.toString("EEE"); } public static String getDateStringWithTime(Context context, long timestamp) { @@ -216,7 +213,7 @@ public class DateUtilities { } if(today + abbreviationLimit >= input && today - abbreviationLimit <= input) { - return abbreviated ? DateUtilities.getWeekdayShort(newDate(date)) : DateUtilities.getWeekday(newDate(date)); + return abbreviated ? DateUtilities.getWeekdayShort(newDateTime(date)) : DateUtilities.getWeekday(newDateTime(date)); } return DateUtilities.getDateStringHideYear(newDateTime(date)); diff --git a/src/main/java/com/todoroo/astrid/data/Task.java b/src/main/java/com/todoroo/astrid/data/Task.java index dd366121c..36d579a36 100644 --- a/src/main/java/com/todoroo/astrid/data/Task.java +++ b/src/main/java/com/todoroo/astrid/data/Task.java @@ -18,13 +18,10 @@ import com.todoroo.andlib.data.Table; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.utility.DateUtilities; -import org.tasks.time.DateTime; import org.tasks.BuildConfig; import org.tasks.R; +import org.tasks.time.DateTime; -import java.util.Date; - -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateTime; /** @@ -364,15 +361,16 @@ public class Task extends RemoteModel { return date; } - Date hideUntil = newDate(date / 1000L * 1000L); // get rid of millis + DateTime hideUntil = newDateTime(date).withMillisOfSecond(0); // get rid of millis if(setting != HIDE_UNTIL_SPECIFIC_DAY_TIME && setting != HIDE_UNTIL_DUE_TIME) { - hideUntil.setHours(0); - hideUntil.setMinutes(0); - hideUntil.setSeconds(0); + hideUntil = hideUntil + .withHourOfDay(0) + .withMinuteOfHour(0) + .withSecondOfMinute(0); } else { - hideUntil.setSeconds(1); + hideUntil = hideUntil.withSecondOfMinute(1); } - return hideUntil.getTime(); + return hideUntil.getMillis(); } /** diff --git a/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java b/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java index cba01aad1..dde9b8b14 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java +++ b/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java @@ -13,8 +13,6 @@ import org.slf4j.LoggerFactory; import java.util.Date; import java.util.TimeZone; -import static org.tasks.date.DateTimeUtils.newDate; - public class GtasksApiUtilities { private static final Logger log = LoggerFactory.getLogger(GtasksApiUtilities.class); @@ -23,7 +21,7 @@ public class GtasksApiUtilities { if (time < 0) { return null; } - return new DateTime(newDate(time), TimeZone.getDefault()); + return new DateTime(new Date(time), TimeZone.getDefault()); } public static long gtasksCompletedTimeToUnixTime(DateTime gtasksCompletedTime) { @@ -43,7 +41,7 @@ public class GtasksApiUtilities { if (time < 0) { return null; } - Date date = newDate(time / 1000 * 1000); + Date date = new Date(time / 1000 * 1000); date.setHours(0); date.setMinutes(0); date.setSeconds(0); @@ -58,8 +56,8 @@ public class GtasksApiUtilities { } try { long utcTime = gtasksDueTime.getValue(); //DateTime.parseRfc3339(gtasksDueTime).value; - Date date = newDate(utcTime); - Date returnDate = newDate(date.getTime() + date.getTimezoneOffset() * 60000); + Date date = new Date(utcTime); + Date returnDate = new Date(date.getTime() + date.getTimezoneOffset() * 60000); return returnDate.getTime(); } catch (NumberFormatException e) { log.error(e.getMessage(), e); diff --git a/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java b/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java index 0d9d6bda6..0d84b38b9 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java +++ b/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java @@ -40,16 +40,16 @@ import org.tasks.R; import org.tasks.injection.ForApplication; import org.tasks.preferences.Preferences; import org.tasks.sync.SyncExecutor; +import org.tasks.time.DateTime; import java.io.IOException; -import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import javax.inject.Inject; import javax.inject.Singleton; -import static org.tasks.date.DateTimeUtils.newDate; +import static org.tasks.date.DateTimeUtils.newDateTime; @Singleton public class GtasksSyncV2Provider { @@ -297,13 +297,12 @@ public class GtasksSyncV2Provider { private void mergeDates(Task remote, Task local) { if(remote.hasDueDate() && local.hasDueTime()) { - Date newDate = newDate(remote.getDueDate()); - Date oldDate = newDate(local.getDueDate()); - newDate.setHours(oldDate.getHours()); - newDate.setMinutes(oldDate.getMinutes()); - newDate.setSeconds(oldDate.getSeconds()); - long setDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, - newDate.getTime()); + DateTime oldDate = newDateTime(local.getDueDate()); + DateTime newDate = newDateTime(remote.getDueDate()) + .withHourOfDay(oldDate.getHourOfDay()) + .withMinuteOfHour(oldDate.getMinuteOfHour()) + .withSecondOfMinute(oldDate.getSecondOfMinute()); + long setDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, newDate.getMillis()); remote.setDueDate(setDate); } } diff --git a/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java b/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java index 0c6bdac0d..4ee702e5d 100644 --- a/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -33,22 +33,20 @@ import com.todoroo.astrid.ui.NumberPickerDialog; import com.todoroo.astrid.ui.NumberPickerDialog.OnNumberPickedListener; import com.todoroo.astrid.ui.PopupControlSet; -import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.MyDatePickerDialog; import org.tasks.preferences.ActivityPreferences; +import org.tasks.time.DateTime; import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.LinkedList; import java.util.List; -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateTime; /** @@ -206,11 +204,11 @@ public class RepeatControlSet extends PopupControlSet { @Override protected void readFromTaskOnInitialize() { - Date date; + DateTime date; if(model.getDueDate() != 0) { - date = newDate(model.getDueDate()); + date = newDateTime(model.getDueDate()); - int dayOfWeek = date.getDay(); + int dayOfWeek = date.getDayOfWeek(); for(int i = 0; i < 7; i++) { daysOfWeek[i].setChecked(i == dayOfWeek); } diff --git a/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index aaaede818..348269535 100644 --- a/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -30,7 +30,6 @@ import org.tasks.injection.InjectingBroadcastReceiver; import org.tasks.time.DateTime; import java.text.ParseException; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -142,17 +141,16 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { List byDay = rrule.getByDay(); long newDate = original.getMillis(); newDate += DateUtilities.ONE_WEEK * (rrule.getInterval() - 1); - Calendar date = Calendar.getInstance(); - date.setTimeInMillis(newDate); + DateTime date = new DateTime(newDate); Collections.sort(byDay, weekdayCompare); WeekdayNum next = findNextWeekday(byDay, date); do { - date.add(Calendar.DATE, 1); - } while (date.get(Calendar.DAY_OF_WEEK) != next.wday.javaDayNum); + date = date.plusDays(1); + } while (date.getDayOfWeek() != next.wday.javaDayNum); - long time = date.getTimeInMillis(); + long time = date.getMillis(); if(hasDueTime) { return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, time); } else { @@ -162,14 +160,12 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { private static long handleMonthlyRepeat(DateTime original, DateValue startDateAsDV, boolean hasDueTime, RRule rrule) { if (original.isLastDayOfMonth()) { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(original.getMillis()); - int interval = rrule.getInterval(); - cal.add(Calendar.MONTH, interval); - cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); - long time = cal.getTimeInMillis(); + DateTime newDateTime = original.plusMonths(interval); + long time = newDateTime + .withDayOfMonth(newDateTime.getNumberOfDaysInMonth()) + .getMillis(); if (hasDueTime) { return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, time); } else { @@ -188,10 +184,10 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { }; - private static WeekdayNum findNextWeekday(List byDay, Calendar date) { + private static WeekdayNum findNextWeekday(List byDay, DateTime date) { WeekdayNum next = byDay.get(0); for (WeekdayNum weekday : byDay) { - if (weekday.wday.javaDayNum > date.get(Calendar.DAY_OF_WEEK)) { + if (weekday.wday.javaDayNum > date.getDayOfWeek()) { return weekday; } } @@ -240,7 +236,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { newDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, date.getMillis()); } else { newDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, - newDate(nextDate.year(), nextDate.month(), nextDate.day()).getTime()); + newDate(nextDate.year(), nextDate.month(), nextDate.day()).getMillis()); } return newDueDate; } diff --git a/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java b/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java index 5dd8d6ec6..8dda9bdad 100644 --- a/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java +++ b/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java @@ -23,6 +23,8 @@ import com.todoroo.astrid.utility.Constants; import org.tasks.R; import org.tasks.notifications.NotificationManager; +import static org.tasks.time.DateTimeUtils.currentTimeMillis; + public class TimerPlugin { /** @@ -77,7 +79,7 @@ public class TimerPlugin { .setContentIntent(pendingIntent) .setContentTitle(appName) .setContentText(text) - .setWhen(System.currentTimeMillis()) + .setWhen(currentTimeMillis()) .setSmallIcon(R.drawable.timers_notification) .setAutoCancel(false) .setOngoing(true) diff --git a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java index 2f805b927..b69070b86 100644 --- a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java +++ b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java @@ -19,13 +19,10 @@ import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.TaskEditControlSetBase; -import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.activities.DateAndTimePickerActivity; +import org.tasks.time.DateTime; -import java.util.Date; - -import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDateTime; /** @@ -99,8 +96,8 @@ public class HideUntilControlSet extends TaskEditControlSetBase implements OnIte if(specificDate > 0) { HideUntilValue[] updated = new HideUntilValue[values.length + 1]; System.arraycopy(values, 0, updated, 1, values.length); - Date hideUntilAsDate = newDate(specificDate); - if(hideUntilAsDate.getHours() == 0 && hideUntilAsDate.getMinutes() == 0 && hideUntilAsDate.getSeconds() == 0) { + DateTime hideUntilAsDate = newDateTime(specificDate); + if(hideUntilAsDate.getHourOfDay() == 0 && hideUntilAsDate.getMinuteOfHour() == 0 && hideUntilAsDate.getSecondOfMinute() == 0) { updated[0] = new HideUntilValue(DateUtilities.getDateString(newDateTime(specificDate)), Task.HIDE_UNTIL_SPECIFIC_DAY, specificDate); existingDate = specificDate; @@ -198,11 +195,11 @@ public class HideUntilControlSet extends TaskEditControlSetBase implements OnIte public void readFromTask(Task task) { long date = task.getHideUntil(); - Date dueDay = newDate(task.getDueDate()/1000L*1000L); - - dueDay.setHours(0); - dueDay.setMinutes(0); - dueDay.setSeconds(0); + DateTime dueDay = newDateTime(task.getDueDate()) + .withHourOfDay(0) + .withMinuteOfHour(0) + .withSecondOfMinute(0) + .withMillisOfSecond(0); // For the hide until due case, we need the time component long dueTime = task.getDueDate()/1000L*1000L; @@ -210,16 +207,16 @@ public class HideUntilControlSet extends TaskEditControlSetBase implements OnIte if(date == 0) { selection = 0; date = 0; - } else if(date == dueDay.getTime()) { + } else if(date == dueDay.getMillis()) { selection = 1; date = 0; } else if (date == dueTime){ selection = 2; date = 0; - } else if(date + DateUtilities.ONE_DAY == dueDay.getTime()) { + } else if(date + DateUtilities.ONE_DAY == dueDay.getMillis()) { selection = 3; date = 0; - } else if(date + DateUtilities.ONE_WEEK == dueDay.getTime()) { + } else if(date + DateUtilities.ONE_WEEK == dueDay.getMillis()) { selection = 4; date = 0; } diff --git a/src/main/java/org/tasks/Notifier.java b/src/main/java/org/tasks/Notifier.java index d6f17aa3b..cad66a383 100644 --- a/src/main/java/org/tasks/Notifier.java +++ b/src/main/java/org/tasks/Notifier.java @@ -25,7 +25,6 @@ import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.voice.VoiceOutputAssistant; -import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.injection.ForApplication; @@ -37,6 +36,7 @@ import org.tasks.receivers.CompleteTaskReceiver; import org.tasks.reminders.MissedCallActivity; import org.tasks.reminders.NotificationActivity; import org.tasks.reminders.SnoozeActivity; +import org.tasks.time.DateTime; import java.io.InputStream; @@ -90,7 +90,7 @@ public class Notifier { .setTicker(title) .setContentTitle(title) .setContentText(context.getString(R.string.app_name)) - .setWhen(System.currentTimeMillis()) + .setWhen(currentTimeMillis()) .setContentIntent(PendingIntent.getActivity(context, missedCallDialog.hashCode(), missedCallDialog, PendingIntent.FLAG_UPDATE_CURRENT)); Bitmap contactImage = getContactImage(contactId); @@ -166,7 +166,7 @@ public class Notifier { Notification notification = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.notif_astrid) .setTicker(title) - .setWhen(System.currentTimeMillis()) + .setWhen(currentTimeMillis()) .setContentTitle(title) .setContentText(subtitle) .setContentIntent(pendingIntent) @@ -246,7 +246,7 @@ public class Notifier { NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.notif_astrid) .setTicker(taskTitle) - .setWhen(System.currentTimeMillis()) + .setWhen(currentTimeMillis()) .setContentTitle(taskTitle) .setContentText(text) .setContentIntent(PendingIntent.getActivity(context, (int) id, intent, PendingIntent.FLAG_UPDATE_CURRENT)); diff --git a/src/main/java/org/tasks/date/DateTimeUtils.java b/src/main/java/org/tasks/date/DateTimeUtils.java index d7a7b4f25..bc2019f41 100644 --- a/src/main/java/org/tasks/date/DateTimeUtils.java +++ b/src/main/java/org/tasks/date/DateTimeUtils.java @@ -2,17 +2,12 @@ package org.tasks.date; import org.tasks.time.DateTime; -import java.util.Date; import java.util.TimeZone; public class DateTimeUtils { - public static Date newDate(long date) { - return new Date(date); - } - - public static Date newDate(int year, int month, int day) { - return new Date(year - 1900, month - 1, day); + public static DateTime newDate(int year, int month, int day) { + return new DateTime(year, month, day, 0, 0, 0); } public static DateTime newDateUtc(int year, int month, int day, int hour, int minute, int second) { @@ -23,10 +18,6 @@ public class DateTimeUtils { return new DateTime(); } - public static DateTime newDateTime(Date date) { - return newDateTime(date.getTime()); - } - public static DateTime newDateTime(long timestamp) { return new DateTime(timestamp); } diff --git a/src/main/java/org/tasks/time/DateTime.java b/src/main/java/org/tasks/time/DateTime.java index a5f9a054d..25076a108 100644 --- a/src/main/java/org/tasks/time/DateTime.java +++ b/src/main/java/org/tasks/time/DateTime.java @@ -80,6 +80,10 @@ public class DateTime { return getCalendar().get(Calendar.DATE); } + public int getDayOfWeek() { + return getCalendar().get(Calendar.DAY_OF_WEEK); + } + public DateTime plusDays(int interval) { return add(Calendar.DATE, interval); } @@ -169,7 +173,7 @@ public class DateTime { } public DateTime minusMillis(int millis) { - return subtract(Calendar.MILLISECOND, millis); + return new DateTime(timestamp - millis, timeZone); } public DateTime minusDays(int days) { @@ -247,4 +251,12 @@ public class DateTime { public String toString() { return toString("yyyy-MM-dd HH:mm:ss.SSSZ"); } + + public int getTimezoneOffset() { + return timeZone.getOffset(timestamp); + } + + public DateTime plusMillis(int millis) { + return new DateTime(timestamp + millis, timeZone); + } }