From bb5c1496ef93447db5036a5f5f171cc7ba3253e2 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 6 Oct 2015 01:41:43 -0600 Subject: [PATCH] Wrap joda --- .../andlib/utility/DateUtilitiesTest.java | 4 +- .../andlib/utility/RelativeDayTest.java | 4 +- .../com/todoroo/astrid/data/TaskTest.java | 2 +- .../gtasks/api/GtasksApiUtilitiesTest.java | 13 +- .../reminders/NotifyAtDeadlineTest.java | 2 +- .../astrid/repeats/AdvancedRepeatTest.java | 2 +- .../RepeatTaskCompleteListenerTest.java | 2 +- src/androidTest/java/org/tasks/Freeze.java | 4 +- .../java/org/tasks/NotifierTests.java | 2 +- .../org/tasks/date/DateTimeUtilsTest.java | 8 +- .../java/org/tasks/time/DateTimeTest.java | 196 ++++++++++++++++++ .../todoroo/andlib/utility/DateUtilities.java | 4 +- .../java/com/todoroo/astrid/data/Task.java | 2 +- .../astrid/gtasks/api/GtasksApiUtilities.java | 2 +- .../astrid/reminders/ReminderPreferences.java | 2 +- .../astrid/reminders/ReminderService.java | 2 +- .../astrid/repeats/RepeatControlSet.java | 2 +- .../repeats/RepeatTaskCompleteListener.java | 1 - .../astrid/ui/HideUntilControlSet.java | 2 +- .../todoroo/astrid/ui/ReminderControlSet.java | 2 +- src/main/java/org/tasks/Notifier.java | 2 +- .../activities/DateAndTimePickerActivity.java | 2 +- .../tasks/activities/TimePickerActivity.java | 2 +- .../java/org/tasks/date/DateTimeUtils.java | 4 +- .../preferences/DateShortcutPreferences.java | 2 +- .../org/tasks/preferences/Preferences.java | 2 +- .../org/tasks/reminders/SnoozeActivity.java | 2 +- .../org/tasks/reminders/SnoozeDialog.java | 2 +- .../java/org/tasks/sync/SyncThrottle.java | 2 +- src/main/java/org/tasks/time/DateTime.java | 192 +++++++++++++++++ .../java/org/tasks/time/DateTimeUtils.java | 19 ++ .../org/tasks/time/FixedMillisProvider.java | 15 ++ .../java/org/tasks/time/MillisProvider.java | 5 + .../org/tasks/time/SystemMillisProvider.java | 8 + .../java/org/tasks/ui/DeadlineControlSet.java | 2 +- .../java/org/tasks/ui/TimePreference.java | 2 +- 36 files changed, 477 insertions(+), 44 deletions(-) create mode 100644 src/androidTest/java/org/tasks/time/DateTimeTest.java create mode 100644 src/main/java/org/tasks/time/DateTime.java create mode 100644 src/main/java/org/tasks/time/DateTimeUtils.java create mode 100644 src/main/java/org/tasks/time/FixedMillisProvider.java create mode 100644 src/main/java/org/tasks/time/MillisProvider.java create mode 100644 src/main/java/org/tasks/time/SystemMillisProvider.java diff --git a/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java b/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java index a1a0df8fa..8a1152bfd 100644 --- a/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java +++ b/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java @@ -9,7 +9,7 @@ import android.content.res.Configuration; import android.test.AndroidTestCase; import android.util.DisplayMetrics; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.Snippet; import java.util.Date; @@ -195,7 +195,7 @@ public class DateUtilitiesTest extends AndroidTestCase { public void testNotTheEndOfTheMonth() { for (int month = 1; month <= 12; month++) { - int lastDay = new DateTime(2014, month, 1, 0, 0, 0, 0).dayOfMonth().getMaximumValue(); + int lastDay = new DateTime(2014, month, 1, 0, 0, 0, 0).getNumberOfDaysInMonth(); for (int day = 1; day < lastDay; day++) { assertFalse(isEndOfMonth(newDate(2014, month, day))); } diff --git a/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java b/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java index 5b9cb12e0..3cd272028 100644 --- a/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java +++ b/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java @@ -2,12 +2,12 @@ package com.todoroo.andlib.utility; import android.test.AndroidTestCase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import java.util.Locale; import static com.todoroo.andlib.utility.DateUtilities.getRelativeDay; -import static org.joda.time.DateTime.now; +import static org.tasks.time.DateTime.now; import static org.tasks.Freeze.freezeAt; import static org.tasks.Freeze.thaw; diff --git a/src/androidTest/java/com/todoroo/astrid/data/TaskTest.java b/src/androidTest/java/com/todoroo/astrid/data/TaskTest.java index 4ae48f7cf..a751c5dfc 100644 --- a/src/androidTest/java/com/todoroo/astrid/data/TaskTest.java +++ b/src/androidTest/java/com/todoroo/astrid/data/TaskTest.java @@ -2,7 +2,7 @@ package com.todoroo.astrid.data; import android.test.AndroidTestCase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.Snippet; import java.util.ArrayList; diff --git a/src/androidTest/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilitiesTest.java b/src/androidTest/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilitiesTest.java index f3d164a9f..2cdce42f5 100644 --- a/src/androidTest/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilitiesTest.java +++ b/src/androidTest/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilitiesTest.java @@ -2,8 +2,7 @@ package com.todoroo.astrid.gtasks.api; import android.test.AndroidTestCase; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; +import org.tasks.time.DateTime; import java.util.Locale; import java.util.TimeZone; @@ -16,18 +15,18 @@ import static com.todoroo.astrid.gtasks.api.GtasksApiUtilities.unixTimeToGtasksD public class GtasksApiUtilitiesTest extends AndroidTestCase { private static final Locale defaultLocale = Locale.getDefault(); - private static final DateTimeZone defaultDateTimeZone = DateTimeZone.getDefault(); + private static final TimeZone defaultDateTimeZone = TimeZone.getDefault(); @Override public void setUp() { Locale.setDefault(Locale.US); - DateTimeZone.setDefault(DateTimeZone.forID("America/Chicago")); + TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago")); } @Override public void tearDown() { Locale.setDefault(defaultLocale); - DateTimeZone.setDefault(defaultDateTimeZone); + TimeZone.setDefault(defaultDateTimeZone); } public void testConvertUnixToGoogleCompletionTime() { @@ -45,14 +44,14 @@ public class GtasksApiUtilitiesTest extends AndroidTestCase { DateTime now = new DateTime(2014, 1, 8, 8, 53, 20, 109); assertEquals( - new DateTime(2014, 1, 8, 0, 0, 0, 0, DateTimeZone.UTC).getMillis(), + new DateTime(2014, 1, 8, 0, 0, 0, 0, TimeZone.getTimeZone("GMT")).getMillis(), unixTimeToGtasksDueDate(now.getMillis()).getValue()); } public void disabled_testConvertGoogleDueDateToUnixTime() { com.google.api.client.util.DateTime googleDueDate = new com.google.api.client.util.DateTime( - new DateTime(2014, 1, 8, 0, 0, 0, 0).toDate(), TimeZone.getTimeZone("UTC")); + new DateTime(2014, 1, 8, 0, 0, 0, 0).toDate(), TimeZone.getTimeZone("GMT")); assertEquals( new DateTime(2014, 1, 8, 6, 0, 0, 0).getMillis(), diff --git a/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java b/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java index ee55807ec..9ba71dbfc 100644 --- a/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java +++ b/src/androidTest/java/com/todoroo/astrid/reminders/NotifyAtDeadlineTest.java @@ -5,7 +5,7 @@ import android.test.AndroidTestCase; import com.todoroo.astrid.data.Task; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.Freeze; import org.tasks.R; import org.tasks.preferences.Preferences; diff --git a/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java b/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java index 206d5fce7..f519de2dd 100644 --- a/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java +++ b/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.java @@ -14,7 +14,7 @@ import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.data.Task; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import java.text.ParseException; import java.util.ArrayList; diff --git a/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListenerTest.java b/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListenerTest.java index 0a1cec1da..9ccda07fa 100644 --- a/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListenerTest.java +++ b/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListenerTest.java @@ -7,7 +7,7 @@ import com.google.ical.values.Frequency; import com.google.ical.values.RRule; import com.todoroo.astrid.data.Task; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import java.text.ParseException; diff --git a/src/androidTest/java/org/tasks/Freeze.java b/src/androidTest/java/org/tasks/Freeze.java index 2d7b240cc..07f2b04c6 100644 --- a/src/androidTest/java/org/tasks/Freeze.java +++ b/src/androidTest/java/org/tasks/Freeze.java @@ -1,7 +1,7 @@ package org.tasks; -import org.joda.time.DateTime; -import org.joda.time.DateTimeUtils; +import org.tasks.time.DateTime; +import org.tasks.time.DateTimeUtils; import java.util.Date; diff --git a/src/androidTest/java/org/tasks/NotifierTests.java b/src/androidTest/java/org/tasks/NotifierTests.java index 8c81c1cae..e8b1398ab 100644 --- a/src/androidTest/java/org/tasks/NotifierTests.java +++ b/src/androidTest/java/org/tasks/NotifierTests.java @@ -3,7 +3,7 @@ package org.tasks; import android.annotation.SuppressLint; import android.test.AndroidTestCase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.preferences.Preferences; import java.util.concurrent.TimeUnit; diff --git a/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java b/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java index 5860e9e3d..6b601acd6 100644 --- a/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java +++ b/src/androidTest/java/org/tasks/date/DateTimeUtilsTest.java @@ -2,11 +2,11 @@ package org.tasks.date; import android.test.AndroidTestCase; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; 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.currentTimeMillis; @@ -39,12 +39,12 @@ public class DateTimeUtilsTest extends AndroidTestCase { } public void testCreateNewUtcDate() { - DateTime utc = now.toDateTime(DateTimeZone.UTC); + DateTime utc = now.toUTC(); Date actual = newDateUtc(utc.getYear(), utc.getMonthOfYear(), utc.getDayOfMonth(), utc.getHourOfDay(), utc.getMinuteOfHour(), utc.getSecondOfMinute()); assertEquals(utc.getMillis(), actual.getTime()); } public void testIllegalInstant() { - new DateTime(2015, 7, 24, 0, 0, 0, 0, DateTimeZone.forID("Africa/Cairo")); + new DateTime(2015, 7, 24, 0, 0, 0, 0, TimeZone.getTimeZone("Africa/Cairo")); } } diff --git a/src/androidTest/java/org/tasks/time/DateTimeTest.java b/src/androidTest/java/org/tasks/time/DateTimeTest.java new file mode 100644 index 000000000..b1e5fafd2 --- /dev/null +++ b/src/androidTest/java/org/tasks/time/DateTimeTest.java @@ -0,0 +1,196 @@ +package org.tasks.time; + +import android.test.AndroidTestCase; + +import org.tasks.Freeze; +import org.tasks.Snippet; + +import java.util.TimeZone; + +public class DateTimeTest extends AndroidTestCase { + public void testGetMillisOfDay() { + assertEquals(7248412, new DateTime(2015, 10, 6, 2, 0, 48, 412).getMillisOfDay()); + } + + public void testWithMillisOfDay() { + assertEquals( + new DateTime(2015, 10, 6, 2, 0, 48, 412), + new DateTime(2015, 10, 6, 0, 0, 0, 0).withMillisOfDay(7248412)); + } + + public void testPlusMonths() { + assertEquals( + new DateTime(2015, 11, 6, 2, 0, 48, 412), + new DateTime(2015, 10, 6, 2, 0, 48, 412).plusMonths(1)); + } + + public void testPlusMonthsWrapYear() { + assertEquals( + new DateTime(2016, 1, 6, 2, 0, 48, 412), + new DateTime(2015, 10, 6, 2, 0, 48, 412).plusMonths(3)); + } + + public void testGetDayOfMonth() { + assertEquals(5, new DateTime(2015, 10, 5, 0, 0, 0).getDayOfMonth()); + } + + public void testPlusDays() { + assertEquals( + new DateTime(2015, 10, 6, 2, 0, 48, 412), + new DateTime(2015, 10, 5, 2, 0, 48, 412).plusDays(1)); + } + + public void testPlusDaysWrapMonth() { + assertEquals( + new DateTime(2015, 11, 1, 2, 0, 48, 412), + new DateTime(2015, 10, 31, 2, 0, 48, 412).plusDays(1)); + } + + public void testMinuteOfHour() { + assertEquals(43, new DateTime(2015, 10, 5, 2, 43, 48).getMinuteOfHour()); + } + + public void testNumberOfDaysInMonth() { + assertEquals(31, new DateTime(2015, 1, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(28, new DateTime(2015, 2, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 3, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(30, new DateTime(2015, 4, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 5, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(30, new DateTime(2015, 6, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 7, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 8, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(30, new DateTime(2015, 9, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 10, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(30, new DateTime(2015, 11, 5, 9, 45, 34).getNumberOfDaysInMonth()); + assertEquals(31, new DateTime(2015, 12, 5, 9, 45, 34).getNumberOfDaysInMonth()); + } + + public void testWithMillisOfSecond() { + assertEquals( + new DateTime(2015, 11, 6, 13, 34, 56, 453), + new DateTime(2015, 11, 6, 13, 34, 56, 0).withMillisOfSecond(453)); + } + + public void testWithHourOfDay() { + assertEquals( + new DateTime(2015, 11, 6, 23, 0, 0), + new DateTime(2015, 11, 6, 1, 0, 0).withHourOfDay(23)); + } + + public void testWithMinuteOfHour() { + assertEquals( + new DateTime(2015, 11, 6, 23, 13, 0), + new DateTime(2015, 11, 6, 23, 1, 0).withMinuteOfHour(13)); + } + + public void testWithSecondOfMinute() { + assertEquals( + new DateTime(2015, 11, 6, 23, 13, 56), + new DateTime(2015, 11, 6, 23, 13, 1).withSecondOfMinute(56)); + } + + public void testGetYear() { + assertEquals(2015, new DateTime(2015, 1, 1, 1, 1, 1).getYear()); + } + + public void testMinusMinutes() { + assertEquals( + new DateTime(2015, 11, 4, 23, 59, 0), + new DateTime(2015, 11, 5, 0, 1, 0).minusMinutes(2)); + } + + public void testIsBefore() { + assertTrue(new DateTime(2015, 11, 4, 23, 59, 0) + .isBefore(new DateTime(2015, 11, 4, 23, 59, 1))); + + assertFalse(new DateTime(2015, 11, 4, 23, 59, 0) + .isBefore(new DateTime(2015, 11, 4, 23, 59, 0))); + } + + public void testGetMonthOfYear() { + assertEquals(1, new DateTime(2015, 1, 2, 3, 4, 5).getMonthOfYear()); + } + + public void testIsAfter() { + assertTrue(new DateTime(2015, 11, 4, 23, 59, 1) + .isAfter(new DateTime(2015, 11, 4, 23, 59, 0))); + + assertFalse(new DateTime(2015, 11, 4, 23, 59, 0) + .isAfter(new DateTime(2015, 11, 4, 23, 59, 0))); + } + + public void testWithYear() { + assertEquals( + new DateTime(2016, 1, 1, 1, 1, 1), + new DateTime(2015, 1, 1, 1, 1, 1).withYear(2016)); + } + + public void testWithMonthOfYear() { + assertEquals( + new DateTime(2015, 1, 2, 3, 4, 5), + new DateTime(2015, 2, 2, 3, 4, 5).withMonthOfYear(1)); + } + + public void testGetHourOfDay() { + assertEquals(3, new DateTime(2015, 1, 2, 3, 4, 5).getHourOfDay()); + } + + public void testWithDayOfMonth() { + assertEquals( + new DateTime(2015, 1, 2, 3, 4, 5), + new DateTime(2015, 1, 1, 3, 4, 5).withDayOfMonth(2)); + } + + public void testPlusMinutes() { + assertEquals( + new DateTime(2015, 1, 2, 3, 4, 5), + new DateTime(2015, 1, 2, 2, 59, 5).plusMinutes(5)); + } + + public void testPlusHours() { + assertEquals( + new DateTime(2015, 1, 2, 3, 4, 5), + new DateTime(2015, 1, 1, 3, 4, 5).plusHours(24)); + } + + public void testPlusWeeks() { + assertEquals( + new DateTime(2015, 1, 2, 3, 4, 5), + new DateTime(2014, 12, 12, 3, 4, 5).plusWeeks(3)); + } + + public void testIsBeforeNow() { + Freeze.freezeAt(new DateTime(2015, 10, 6, 16, 15, 27)).thawAfter(new Snippet() {{ + assertFalse(new DateTime(2015, 10, 6, 16, 15, 27).isBeforeNow()); + assertTrue(new DateTime(2015, 10, 6, 16, 15, 26).isBeforeNow()); + }}); + } + + public void testMinusMillis() { + assertEquals( + new DateTime(2015, 11, 6, 16, 18, 20, 452), + new DateTime(2015, 11, 6, 16, 18, 21, 374).minusMillis(922)); + } + + public void testMinusDays() { + assertEquals( + new DateTime(2015, 11, 6, 16, 19, 16), + new DateTime(2015, 12, 4, 16, 19, 16).minusDays(28)); + } + + public void testGetSecondOfMinute() { + assertEquals(32, new DateTime(2015, 11, 6, 16, 19, 32).getSecondOfMinute()); + } + + public void testToUTC() { + TimeZone def = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago")); + assertEquals( + new DateTime(2015, 10, 6, 14, 45, 15, 0, TimeZone.getTimeZone("GMT")), + new DateTime(2015, 10, 6, 9, 45, 15).toUTC()); + } finally { + TimeZone.setDefault(def); + } + } +} diff --git a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java index 807ec1a3a..ceea0ea9b 100644 --- a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java +++ b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java @@ -8,7 +8,7 @@ package com.todoroo.andlib.utility; import android.content.Context; import android.text.format.DateFormat; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import java.text.SimpleDateFormat; @@ -223,7 +223,7 @@ public class DateUtilities { } public static boolean isEndOfMonth(Date d) { - return d.getDate() == new DateTime(d).dayOfMonth().getMaximumValue(); + return d.getDate() == new DateTime(d).getNumberOfDaysInMonth(); } public static long getStartOfDay(long time) { diff --git a/src/main/java/com/todoroo/astrid/data/Task.java b/src/main/java/com/todoroo/astrid/data/Task.java index 592c025f5..dd366121c 100644 --- a/src/main/java/com/todoroo/astrid/data/Task.java +++ b/src/main/java/com/todoroo/astrid/data/Task.java @@ -18,7 +18,7 @@ import com.todoroo.andlib.data.Table; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.utility.DateUtilities; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.BuildConfig; import org.tasks.R; 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 a8559a3d4..cba01aad1 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java +++ b/src/main/java/com/todoroo/astrid/gtasks/api/GtasksApiUtilities.java @@ -48,7 +48,7 @@ public class GtasksApiUtilities { date.setMinutes(0); date.setSeconds(0); date.setTime(date.getTime() - date.getTimezoneOffset() * 60000); - return new DateTime(date, TimeZone.getTimeZone("UTC")); + return new DateTime(date, TimeZone.getTimeZone("GMT")); } //Adjust for google's rounding diff --git a/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java b/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java index a40cdd053..42597e4cb 100644 --- a/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java +++ b/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java @@ -13,7 +13,7 @@ import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceManager; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.activities.TimePickerActivity; import org.tasks.injection.InjectingPreferenceActivity; diff --git a/src/main/java/com/todoroo/astrid/reminders/ReminderService.java b/src/main/java/com/todoroo/astrid/reminders/ReminderService.java index 7889c60fa..6f2d42d0c 100644 --- a/src/main/java/com/todoroo/astrid/reminders/ReminderService.java +++ b/src/main/java/com/todoroo/astrid/reminders/ReminderService.java @@ -18,7 +18,7 @@ import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; diff --git a/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java b/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java index 68f37a564..0f7df146f 100644 --- a/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -33,7 +33,7 @@ import com.todoroo.astrid.ui.NumberPickerDialog; import com.todoroo.astrid.ui.NumberPickerDialog.OnNumberPickedListener; import com.todoroo.astrid.ui.PopupControlSet; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; diff --git a/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index a39ace401..d09c1ff58 100644 --- a/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -24,7 +24,6 @@ import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.utility.Flags; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.injection.InjectingBroadcastReceiver; diff --git a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java index c9002b619..60dce85f7 100644 --- a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java +++ b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java @@ -19,7 +19,7 @@ import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.TaskEditControlSetBase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.activities.DateAndTimePickerActivity; diff --git a/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java b/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java index 339136065..e7eb6adaa 100644 --- a/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java +++ b/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java @@ -26,7 +26,7 @@ import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.TaskEditControlSetBase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; diff --git a/src/main/java/org/tasks/Notifier.java b/src/main/java/org/tasks/Notifier.java index ed5bc05ae..9527d0b0a 100644 --- a/src/main/java/org/tasks/Notifier.java +++ b/src/main/java/org/tasks/Notifier.java @@ -25,7 +25,7 @@ import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.voice.VoiceOutputAssistant; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.injection.ForApplication; diff --git a/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java b/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java index 859dd295a..8132ecc91 100644 --- a/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java +++ b/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java @@ -8,7 +8,7 @@ import android.support.v4.app.FragmentManager; import com.fourmob.datetimepicker.date.DatePickerDialog; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.dialogs.MyDatePickerDialog; import static org.tasks.date.DateTimeUtils.currentTimeMillis; diff --git a/src/main/java/org/tasks/activities/TimePickerActivity.java b/src/main/java/org/tasks/activities/TimePickerActivity.java index 6a5ab0ad8..3f1090865 100644 --- a/src/main/java/org/tasks/activities/TimePickerActivity.java +++ b/src/main/java/org/tasks/activities/TimePickerActivity.java @@ -10,7 +10,7 @@ import android.text.format.DateFormat; import com.sleepbot.datetimepicker.time.RadialPickerLayout; import com.sleepbot.datetimepicker.time.TimePickerDialog; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.dialogs.MyTimePickerDialog; import static org.tasks.date.DateTimeUtils.currentTimeMillis; diff --git a/src/main/java/org/tasks/date/DateTimeUtils.java b/src/main/java/org/tasks/date/DateTimeUtils.java index 7b418edef..f06ab20c0 100644 --- a/src/main/java/org/tasks/date/DateTimeUtils.java +++ b/src/main/java/org/tasks/date/DateTimeUtils.java @@ -1,13 +1,13 @@ package org.tasks.date; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import java.util.Date; public class DateTimeUtils { public static long currentTimeMillis() { - return org.joda.time.DateTimeUtils.currentTimeMillis(); + return org.tasks.time.DateTimeUtils.currentTimeMillis(); } public static Date newDate() { diff --git a/src/main/java/org/tasks/preferences/DateShortcutPreferences.java b/src/main/java/org/tasks/preferences/DateShortcutPreferences.java index ef4e3cd9e..fe9bc4e21 100644 --- a/src/main/java/org/tasks/preferences/DateShortcutPreferences.java +++ b/src/main/java/org/tasks/preferences/DateShortcutPreferences.java @@ -5,7 +5,7 @@ import android.os.Bundle; import android.preference.Preference; import android.widget.Toast; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.activities.TimePickerActivity; import org.tasks.injection.InjectingPreferenceActivity; diff --git a/src/main/java/org/tasks/preferences/Preferences.java b/src/main/java/org/tasks/preferences/Preferences.java index 1da8cfb78..0932ee1e1 100644 --- a/src/main/java/org/tasks/preferences/Preferences.java +++ b/src/main/java/org/tasks/preferences/Preferences.java @@ -14,7 +14,7 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.widget.WidgetConfigActivity; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; diff --git a/src/main/java/org/tasks/reminders/SnoozeActivity.java b/src/main/java/org/tasks/reminders/SnoozeActivity.java index acdb57f22..9a36ea7be 100644 --- a/src/main/java/org/tasks/reminders/SnoozeActivity.java +++ b/src/main/java/org/tasks/reminders/SnoozeActivity.java @@ -10,7 +10,7 @@ import com.todoroo.astrid.reminders.SnoozeCallback; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.TaskService; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.activities.DateAndTimePickerActivity; import org.tasks.activities.TimePickerActivity; import org.tasks.injection.InjectingAppCompatActivity; diff --git a/src/main/java/org/tasks/reminders/SnoozeDialog.java b/src/main/java/org/tasks/reminders/SnoozeDialog.java index 86c867cf6..7e654c6e5 100644 --- a/src/main/java/org/tasks/reminders/SnoozeDialog.java +++ b/src/main/java/org/tasks/reminders/SnoozeDialog.java @@ -8,7 +8,7 @@ import android.support.annotation.NonNull; import com.todoroo.astrid.reminders.SnoozeCallback; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; import org.tasks.injection.ForApplication; diff --git a/src/main/java/org/tasks/sync/SyncThrottle.java b/src/main/java/org/tasks/sync/SyncThrottle.java index eca0c20d0..949ac1a40 100644 --- a/src/main/java/org/tasks/sync/SyncThrottle.java +++ b/src/main/java/org/tasks/sync/SyncThrottle.java @@ -1,6 +1,6 @@ package org.tasks.sync; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/org/tasks/time/DateTime.java b/src/main/java/org/tasks/time/DateTime.java new file mode 100644 index 000000000..cad98b4f8 --- /dev/null +++ b/src/main/java/org/tasks/time/DateTime.java @@ -0,0 +1,192 @@ +package org.tasks.time; + +import org.joda.time.DateTimeZone; + +import java.util.Date; +import java.util.TimeZone; + +public class DateTime { + + private final org.joda.time.DateTime dateTime; + + public DateTime(int year, int month, int day, int hour, int minute, int second) { + this(year, month, day, hour, minute, second, 0); + } + + public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond) { + this(year, month, day, hour, minute, second, millisecond, TimeZone.getDefault()); + } + + public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, TimeZone timeZone) { + this(new org.joda.time.DateTime(year, month, day, hour, minute, second, millisecond, DateTimeZone.forTimeZone(timeZone))); + } + + public static DateTime now() { + return new DateTime(); + } + + public DateTime() { + this(DateTimeUtils.currentTimeMillis()); + } + + public DateTime(org.joda.time.DateTime dateTime) { + this.dateTime = dateTime; + } + + public DateTime(long timestamp) { + this(timestamp, TimeZone.getDefault()); + } + + public DateTime(long timestamp, TimeZone timeZone) { + dateTime = new org.joda.time.DateTime(timestamp, DateTimeZone.forTimeZone(timeZone)); + } + + public DateTime(Date d) { + dateTime = new org.joda.time.DateTime(d, DateTimeZone.forTimeZone(TimeZone.getDefault())); + } + + public DateTime withMillisOfDay(int millisOfDay) { + return new DateTime(dateTime.withMillisOfDay(millisOfDay)); + } + + public long getMillis() { + return dateTime.getMillis(); + } + + public DateTime plusMonths(int interval) { + return new DateTime(dateTime.plusMonths(interval)); + } + + public int getDayOfMonth() { + return dateTime.getDayOfMonth(); + } + + public DateTime plusDays(int interval) { + return new DateTime(dateTime.plusDays(interval)); + } + + public int getMinuteOfHour() { + return dateTime.getMinuteOfHour(); + } + + public String toString(String format) { + return dateTime.toString(format); + } + + public Date toDate() { + return dateTime.toDate(); + } + + public int getNumberOfDaysInMonth() { + return dateTime.dayOfMonth().getMaximumValue(); + } + + public DateTime withMillisOfSecond(int millisOfSecond) { + return new DateTime(dateTime.withMillisOfSecond(millisOfSecond)); + } + + public DateTime withHourOfDay(int hourOfDay) { + return new DateTime(dateTime.withHourOfDay(hourOfDay)); + } + + public DateTime withMinuteOfHour(int minuteOfHour) { + return new DateTime(dateTime.withMinuteOfHour(minuteOfHour)); + } + + public DateTime withSecondOfMinute(int secondOfMinute) { + return new DateTime(dateTime.withSecondOfMinute(secondOfMinute)); + } + + public int getYear() { + return dateTime.getYear(); + } + + public DateTime minusMinutes(int minutes) { + return new DateTime(dateTime.minusMinutes(minutes)); + } + + public boolean isBefore(DateTime dateTime) { + return this.dateTime.isBefore(dateTime.dateTime); + } + + public int getMillisOfDay() { + return dateTime.getMillisOfDay(); + } + + public int getMonthOfYear() { + return dateTime.getMonthOfYear(); + } + + public boolean isAfter(DateTime dateTime) { + return this.dateTime.isAfter(dateTime.dateTime); + } + + public DateTime withYear(int year) { + return new DateTime(dateTime.withYear(year)); + } + + public DateTime withMonthOfYear(int monthOfYear) { + return new DateTime(dateTime.withMonthOfYear(monthOfYear)); + } + + public int getHourOfDay() { + return dateTime.getHourOfDay(); + } + + public DateTime withDayOfMonth(int dayOfMonth) { + return new DateTime(dateTime.withDayOfMonth(dayOfMonth)); + } + + public DateTime plusMinutes(int minutes) { + return new DateTime(dateTime.plusMinutes(minutes)); + } + + public DateTime plusHours(int hours) { + return new DateTime(dateTime.plusHours(hours)); + } + + public DateTime plusWeeks(int weeks) { + return new DateTime(dateTime.plusWeeks(weeks)); + } + + public boolean isBeforeNow() { + return dateTime.isBefore(DateTimeUtils.currentTimeMillis()); + } + + public DateTime minusMillis(int millis) { + return new DateTime(dateTime.minusMillis(millis)); + } + + public DateTime minusDays(int days) { + return new DateTime(dateTime.minusDays(days)); + } + + public DateTime toUTC() { + return new DateTime(dateTime.toDateTime(DateTimeZone.UTC)); + } + + public int getSecondOfMinute() { + return dateTime.getSecondOfMinute(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + DateTime dateTime1 = (DateTime) o; + + return !(dateTime != null ? !dateTime.equals(dateTime1.dateTime) : dateTime1.dateTime != null); + + } + + @Override + public int hashCode() { + return dateTime != null ? dateTime.hashCode() : 0; + } + + @Override + public String toString() { + return dateTime.toString(); + } +} diff --git a/src/main/java/org/tasks/time/DateTimeUtils.java b/src/main/java/org/tasks/time/DateTimeUtils.java new file mode 100644 index 000000000..b5280cc51 --- /dev/null +++ b/src/main/java/org/tasks/time/DateTimeUtils.java @@ -0,0 +1,19 @@ +package org.tasks.time; + +public class DateTimeUtils { + + private static final SystemMillisProvider SYSTEM_MILLIS_PROVIDER = new SystemMillisProvider(); + private static volatile MillisProvider MILLIS_PROVIDER = SYSTEM_MILLIS_PROVIDER; + + public static long currentTimeMillis() { + return MILLIS_PROVIDER.getMillis(); + } + + public static void setCurrentMillisFixed(long millis) { + MILLIS_PROVIDER = new FixedMillisProvider(millis); + } + + public static void setCurrentMillisSystem() { + MILLIS_PROVIDER = SYSTEM_MILLIS_PROVIDER; + } +} diff --git a/src/main/java/org/tasks/time/FixedMillisProvider.java b/src/main/java/org/tasks/time/FixedMillisProvider.java new file mode 100644 index 000000000..c553e5172 --- /dev/null +++ b/src/main/java/org/tasks/time/FixedMillisProvider.java @@ -0,0 +1,15 @@ +package org.tasks.time; + +public class FixedMillisProvider implements MillisProvider { + + private long millis; + + public FixedMillisProvider(long millis) { + this.millis = millis; + } + + @Override + public long getMillis() { + return millis; + } +} diff --git a/src/main/java/org/tasks/time/MillisProvider.java b/src/main/java/org/tasks/time/MillisProvider.java new file mode 100644 index 000000000..037110a30 --- /dev/null +++ b/src/main/java/org/tasks/time/MillisProvider.java @@ -0,0 +1,5 @@ +package org.tasks.time; + +public interface MillisProvider { + long getMillis(); +} diff --git a/src/main/java/org/tasks/time/SystemMillisProvider.java b/src/main/java/org/tasks/time/SystemMillisProvider.java new file mode 100644 index 000000000..77e3ec5fd --- /dev/null +++ b/src/main/java/org/tasks/time/SystemMillisProvider.java @@ -0,0 +1,8 @@ +package org.tasks.time; + +public class SystemMillisProvider implements MillisProvider { + @Override + public long getMillis() { + return System.currentTimeMillis(); + } +} diff --git a/src/main/java/org/tasks/ui/DeadlineControlSet.java b/src/main/java/org/tasks/ui/DeadlineControlSet.java index 36040d778..bc2dbca2b 100644 --- a/src/main/java/org/tasks/ui/DeadlineControlSet.java +++ b/src/main/java/org/tasks/ui/DeadlineControlSet.java @@ -20,7 +20,7 @@ import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.TaskEditControlSetBase; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.dialogs.MyDatePickerDialog; import org.tasks.dialogs.MyTimePickerDialog; diff --git a/src/main/java/org/tasks/ui/TimePreference.java b/src/main/java/org/tasks/ui/TimePreference.java index 6fe10ac5d..bc77a8f72 100644 --- a/src/main/java/org/tasks/ui/TimePreference.java +++ b/src/main/java/org/tasks/ui/TimePreference.java @@ -6,7 +6,7 @@ import android.content.res.TypedArray; import android.preference.Preference; import android.util.AttributeSet; -import org.joda.time.DateTime; +import org.tasks.time.DateTime; import org.tasks.R; import org.tasks.activities.TimePickerActivity;