diff --git a/app/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java b/app/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java index 3c4dc3b7e..66bce53d9 100644 --- a/app/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java +++ b/app/src/androidTest/java/com/todoroo/andlib/utility/DateUtilitiesTest.java @@ -6,93 +6,31 @@ package com.todoroo.andlib.utility; -import static androidx.test.InstrumentationRegistry.getTargetContext; +import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.todoroo.andlib.utility.DateUtilities.getDateString; -import static com.todoroo.andlib.utility.DateUtilities.getStartOfDay; import static com.todoroo.andlib.utility.DateUtilities.getTimeString; import static com.todoroo.andlib.utility.DateUtilities.getWeekday; import static com.todoroo.andlib.utility.DateUtilities.getWeekdayShort; import static junit.framework.Assert.assertEquals; import static org.tasks.Freeze.freezeAt; import static org.tasks.date.DateTimeUtils.newDate; -import static org.tasks.date.DateTimeUtils.newDateTime; -import android.content.res.Configuration; -import android.util.DisplayMetrics; import androidx.test.ext.junit.runners.AndroidJUnit4; import java.util.Locale; import org.junit.After; -import org.junit.Before; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.tasks.Snippet; import org.tasks.time.DateTime; +import org.threeten.bp.format.FormatStyle; @RunWith(AndroidJUnit4.class) public class DateUtilitiesTest { - private static Locale defaultLocale; - - @Before - public void setUp() { - defaultLocale = Locale.getDefault(); - setLocale(Locale.US); - } - @After - public void tearDown() { + public void after() { DateUtilities.is24HourOverride = null; - setLocale(defaultLocale); - } - - private void setLocale(Locale locale) { - org.tasks.locale.Locale.setDefault(locale); - Configuration config = new Configuration(); - config.locale = locale; - DisplayMetrics metrics = getTargetContext().getResources().getDisplayMetrics(); - getTargetContext().getResources().updateConfiguration(config, metrics); - } - - public void forEachLocale(Runnable r) { - Locale[] locales = Locale.getAvailableLocales(); - for (Locale locale : locales) { - setLocale(locale); - - r.run(); - } - } - - @Test - public void testTimeString() { - forEachLocale( - () -> { - DateTime d = newDateTime(); - - DateUtilities.is24HourOverride = false; - for (int i = 0; i < 24; i++) { - d = d.withHourOfDay(i); - getTimeString(getTargetContext(), d); - } - - DateUtilities.is24HourOverride = true; - for (int i = 0; i < 24; i++) { - d = d.withHourOfDay(i); - getTimeString(getTargetContext(), d); - } - }); - } - - @Test - public void testDateString() { - forEachLocale( - () -> { - DateTime d = newDateTime(); - - for (int i = 0; i < 12; i++) { - d = d.withMonthOfYear(i); - getDateString(d); - } - }); } @Test @@ -117,176 +55,246 @@ public class DateUtilitiesTest { @Test public void testGetDateStringWithYear() { - assertEquals("Jan 4 '14", getDateString(new DateTime(2014, 1, 4, 0, 0, 0))); + assertEquals("Jan 4, 2014", getDateString(getApplicationContext(), new DateTime(2014, 1, 4, 0, 0, 0))); } @Test public void testGetDateStringHidingYear() { - freezeAt(newDate(2014, 1, 1)) + freezeAt(newDate(2014, 2, 1)) .thawAfter( new Snippet() { { - assertEquals("Jan 1", getDateString(newDateTime())); + assertEquals("Jan 1", getDateString(getApplicationContext(), new DateTime(2014, 1, 1))); } }); } @Test public void testGetDateStringWithDifferentYear() { - freezeAt(newDate(2013, 12, 31)) + freezeAt(newDate(2013, 12, 1)) .thawAfter( new Snippet() { { - assertEquals("Jan 1 '14", getDateString(new DateTime(2014, 1, 1, 0, 0, 0))); + assertEquals("Jan 1, 2014", getDateString(getApplicationContext(),new DateTime(2014, 1, 1, 0, 0, 0))); } }); } @Test - public void testShouldGetStartOfDay() { - DateTime now = new DateTime(2014, 1, 3, 10, 41, 41, 520); - assertEquals(now.startOfDay().getMillis(), getStartOfDay(now.getMillis())); + public void testGetWeekdayLongString() { + assertEquals("Sunday", getWeekday(newDate(2013, 12, 29), Locale.US)); + assertEquals("Monday", getWeekday(newDate(2013, 12, 30), Locale.US)); + assertEquals("Tuesday", getWeekday(newDate(2013, 12, 31), Locale.US)); + assertEquals("Wednesday", getWeekday(newDate(2014, 1, 1), Locale.US)); + assertEquals("Thursday", getWeekday(newDate(2014, 1, 2), Locale.US)); + assertEquals("Friday", getWeekday(newDate(2014, 1, 3), Locale.US)); + assertEquals("Saturday", getWeekday(newDate(2014, 1, 4), Locale.US)); } @Test - public void testGetWeekdayLongString() { - assertEquals("Sunday", getWeekday(newDate(2013, 12, 29))); - assertEquals("Monday", getWeekday(newDate(2013, 12, 30))); - assertEquals("Tuesday", getWeekday(newDate(2013, 12, 31))); - assertEquals("Wednesday", getWeekday(newDate(2014, 1, 1))); - assertEquals("Thursday", getWeekday(newDate(2014, 1, 2))); - assertEquals("Friday", getWeekday(newDate(2014, 1, 3))); - assertEquals("Saturday", getWeekday(newDate(2014, 1, 4))); + public void testGetWeekdayShortString() { + assertEquals("Sun", getWeekdayShort(newDate(2013, 12, 29), Locale.US)); + assertEquals("Mon", getWeekdayShort(newDate(2013, 12, 30), Locale.US)); + assertEquals("Tue", getWeekdayShort(newDate(2013, 12, 31), Locale.US)); + assertEquals("Wed", getWeekdayShort(newDate(2014, 1, 1), Locale.US)); + assertEquals("Thu", getWeekdayShort(newDate(2014, 1, 2), Locale.US)); + assertEquals("Fri", getWeekdayShort(newDate(2014, 1, 3), Locale.US)); + assertEquals("Sat", getWeekdayShort(newDate(2014, 1, 4), Locale.US)); } @Test - public void testGetWeekdayShortString() { - assertEquals("Sun", getWeekdayShort(newDate(2013, 12, 29))); - assertEquals("Mon", getWeekdayShort(newDate(2013, 12, 30))); - assertEquals("Tue", getWeekdayShort(newDate(2013, 12, 31))); - assertEquals("Wed", getWeekdayShort(newDate(2014, 1, 1))); - assertEquals("Thu", getWeekdayShort(newDate(2014, 1, 2))); - assertEquals("Fri", getWeekdayShort(newDate(2014, 1, 3))); - assertEquals("Sat", getWeekdayShort(newDate(2014, 1, 4))); + public void getRelativeFullDate() { + freezeAt(new DateTime(2018, 1, 1)) + .thawAfter( + () -> + assertEquals( + "Sunday, January 14", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.US, + FormatStyle.FULL))); + } + + @Test + public void getRelativeFullDateWithYear() { + freezeAt(new DateTime(2017, 12, 12)) + .thawAfter( + () -> + assertEquals( + "Sunday, January 14, 2018", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.US, + FormatStyle.FULL))); } @Test - public void usDateNoYear() { - setLocale(Locale.US); + public void getRelativeFullDateTime() { freezeAt(new DateTime(2018, 1, 1)) .thawAfter( () -> assertEquals( - "Jan 14", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + "Sunday, January 14 1:43 PM", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14, 13, 43, 1).getMillis(), + Locale.US, + FormatStyle.FULL))); } @Test - public void usDateWithYear() { - setLocale(Locale.US); + public void getRelativeFullDateTimeWithYear() { freezeAt(new DateTime(2017, 12, 12)) .thawAfter( () -> assertEquals( - "Jan 14 '18", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + "Sunday, January 14, 2018 11:50 AM", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14, 11, 50, 1).getMillis(), + Locale.US, + FormatStyle.FULL))); } @Test public void germanDateNoYear() { - setLocale(Locale.GERMAN); freezeAt(new DateTime(2018, 1, 1)) .thawAfter( () -> - assertEquals( - "14 Jan.", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "Sonntag, 14. Januar", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.GERMAN, + FormatStyle.FULL))); } @Test public void germanDateWithYear() { - setLocale(Locale.GERMAN); freezeAt(new DateTime(2017, 12, 12)) .thawAfter( () -> - assertEquals( - "14 Jan. '18", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "Sonntag, 14. Januar 2018", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.GERMAN, + FormatStyle.FULL))); } @Test public void koreanDateNoYear() { - setLocale(Locale.KOREAN); freezeAt(new DateTime(2018, 1, 1)) .thawAfter( () -> - assertEquals( - "1월 14일", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "1월 14일 일요일", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.KOREAN, + FormatStyle.FULL))); } @Test public void koreanDateWithYear() { - setLocale(Locale.KOREAN); freezeAt(new DateTime(2017, 12, 12)) .thawAfter( () -> - assertEquals( - "18년 1월 14일", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "2018년 1월 14일 일요일", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.KOREAN, + FormatStyle.FULL))); } @Test public void japaneseDateNoYear() { - setLocale(Locale.JAPANESE); freezeAt(new DateTime(2018, 1, 1)) .thawAfter( () -> - assertEquals( - "1月 14日", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "1月14日日曜日", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.JAPANESE, + FormatStyle.FULL))); } @Test public void japaneseDateWithYear() { - setLocale(Locale.JAPANESE); freezeAt(new DateTime(2017, 12, 12)) .thawAfter( () -> - assertEquals( - "18年 1月 14日", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "2018年1月14日日曜日", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.JAPANESE, + FormatStyle.FULL))); } @Test public void chineseDateNoYear() { - setLocale(Locale.CHINESE); freezeAt(new DateTime(2018, 1, 1)) .thawAfter( () -> - assertEquals( - "1月 14日", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "1月14日星期日", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.CHINESE, + FormatStyle.FULL))); } @Test public void chineseDateWithYear() { - setLocale(Locale.CHINESE); freezeAt(new DateTime(2017, 12, 12)) .thawAfter( () -> - assertEquals( - "18年 1月 14日", - DateUtilities.getRelativeDateStringWithTime( - getTargetContext(), new DateTime(2018, 1, 14).getMillis()))); + Assert.assertEquals( + "2018年1月14日星期日", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14).getMillis(), + Locale.CHINESE, + FormatStyle.FULL))); + } + + @Test + public void chineseDateTimeNoYear() { + freezeAt(new DateTime(2018, 1, 1)) + .thawAfter( + () -> + Assert.assertEquals( + "1月14日星期日 上午11:53", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14, 11, 53, 1).getMillis(), + Locale.CHINESE, + FormatStyle.FULL))); + } + + @Test + public void chineseDateTimeWithYear() { + freezeAt(new DateTime(2017, 12, 12)) + .thawAfter( + () -> + Assert.assertEquals( + "2018年1月14日星期日 下午1:45", + DateUtilities.getRelativeDateTime( + getApplicationContext(), + new DateTime(2018, 1, 14, 13, 45, 1).getMillis(), + Locale.CHINESE, + FormatStyle.FULL))); } } diff --git a/app/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java b/app/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java index aee60df39..fd7435e30 100644 --- a/app/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java +++ b/app/src/androidTest/java/com/todoroo/andlib/utility/RelativeDayTest.java @@ -1,6 +1,6 @@ package com.todoroo.andlib.utility; -import static androidx.test.InstrumentationRegistry.getTargetContext; +import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.todoroo.andlib.utility.DateUtilities.getRelativeDay; import static junit.framework.Assert.assertEquals; import static org.tasks.Freeze.freezeAt; @@ -13,6 +13,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.tasks.time.DateTime; +import org.threeten.bp.format.FormatStyle; @RunWith(AndroidJUnit4.class) public class RelativeDayTest { @@ -62,16 +63,20 @@ public class RelativeDayTest { @Test public void testRelativeDayOneWeek() { - checkRelativeDay(new DateTime().minusDays(7), "Dec 24", "Dec 24"); + checkRelativeDay(new DateTime().minusDays(7), "December 24", "Dec 24"); } @Test public void testRelativeDayOneWeekNextYear() { - checkRelativeDay(new DateTime().plusDays(7), "Jan 7 '14", "Jan 7 '14"); + checkRelativeDay(new DateTime().plusDays(7), "January 7, 2014", "Jan 7, 2014"); } private void checkRelativeDay(DateTime now, String full, String abbreviated) { - assertEquals(full, getRelativeDay(getTargetContext(), now.getMillis(), false)); - assertEquals(abbreviated, getRelativeDay(getTargetContext(), now.getMillis(), true)); + assertEquals( + full, + getRelativeDay(getApplicationContext(), now.getMillis(), Locale.US, FormatStyle.LONG)); + assertEquals( + abbreviated, + getRelativeDay(getApplicationContext(), now.getMillis(), Locale.US, FormatStyle.MEDIUM)); } } diff --git a/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java b/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java index 4dc01623b..de8f9c517 100644 --- a/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java +++ b/app/src/main/java/com/todoroo/andlib/utility/DateUtilities.java @@ -11,10 +11,15 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.content.Context; import android.text.format.DateFormat; +import androidx.annotation.Nullable; +import com.google.common.base.Strings; import com.todoroo.astrid.data.Task; +import org.tasks.BuildConfig; import org.tasks.R; -import org.tasks.locale.Locale; import org.tasks.time.DateTime; +import org.threeten.bp.format.DateTimeFormatter; +import org.threeten.bp.format.FormatStyle; +import org.threeten.bp.format.TextStyle; public class DateUtilities { @@ -27,13 +32,6 @@ public class DateUtilities { /** Represents a single minute */ public static final long ONE_MINUTE = 60000L; - private static final long abbreviationLimit = DateUtilities.ONE_DAY * 6; - private static final String JA = "MMM d\u65E5"; - private static final String JA_YEAR = "yy\u5E74 " + JA; - private static final String KO = "MMM d\uC77C"; - private static final String KO_YEAR = "yy\uB144 " + KO; - private static final String ZH = "MMM d\u65E5"; - private static final String ZH_YEAR = "yy\u5E74 " + ZH; static Boolean is24HourOverride = null; /** Returns unixtime for current time */ @@ -45,16 +43,10 @@ public class DateUtilities { * =========================================================== formatters * ====================================================================== */ - public static boolean is24HourFormat(Context context) { - if (is24HourOverride != null) { - return is24HourOverride; - } - - return DateFormat.is24HourFormat(context); - } - - public static String getTimeString(Context context, long timestamp) { - return getTimeString(context, newDateTime(timestamp)); + private static boolean is24HourFormat(Context context) { + return BuildConfig.DEBUG && is24HourOverride != null + ? is24HourOverride + : DateFormat.is24HourFormat(context); } public static String getTimeString(Context context, DateTime date) { @@ -69,120 +61,106 @@ public class DateUtilities { return date.toString(value); } - public static String getLongDateString(DateTime date) { - return getDateString("MMMM", date); + public static String getLongDateString(DateTime date, java.util.Locale locale) { + return getFullDate(date, locale, FormatStyle.LONG); } /** * @param date date to format * @return date, with month, day, and year */ - public static String getDateString(DateTime date) { - return getDateString("MMM", date); + public static String getDateString(Context context, DateTime date) { + return getRelativeDay( + context, date.getMillis(), java.util.Locale.getDefault(), FormatStyle.MEDIUM); } - private static String getDateString(String simpleDateFormat, DateTime date) { - boolean includeYear = date.getYear() != newDateTime().getYear(); - String format = getFormat(Locale.getInstance(), simpleDateFormat, includeYear); - return date.toString(format); - } - - private static String getFormat(Locale locale, String monthFormat, boolean includeYear) { - switch (locale.getLanguage()) { - case "ja": - return includeYear ? JA_YEAR : JA; - case "ko": - return includeYear ? KO_YEAR : KO; - case "zh": - return includeYear ? ZH_YEAR : ZH; - } - switch (locale.getCountry()) { - case "BZ": - case "CA": - case "KE": - case "MN": - case "US": - return includeYear ? monthFormat + " d ''yy" : monthFormat + " d"; - default: - return includeYear ? "d " + monthFormat + " ''yy" : "d " + monthFormat; - } + static String getWeekday(DateTime date, java.util.Locale locale) { + return date.toLocalDate().getDayOfWeek().getDisplayName(TextStyle.FULL, locale); } /** @return weekday */ - public static String getWeekday(DateTime date) { - return date.toString("EEEE"); + static String getWeekdayShort(DateTime date, java.util.Locale locale) { + return date.toLocalDate().getDayOfWeek().getDisplayName(TextStyle.SHORT, locale); } - /** @return weekday */ - public static String getWeekdayShort(DateTime date) { - return date.toString("EEE"); + public static String getLongDateStringWithTime(long timestamp, java.util.Locale locale) { + return getFullDateTime(newDateTime(timestamp), locale, FormatStyle.LONG); } - public static String getLongDateStringWithTime(Context context, long timestamp) { - DateTime date = newDateTime(timestamp); - return getLongDateString(date) + ", " + getTimeString(context, date); + public static String getRelativeDateTime( + Context context, long date, java.util.Locale locale, FormatStyle style) { + String day = getRelativeDay(context, date, locale, isAbbreviated(style)); + if (!Strings.isNullOrEmpty(day)) { + if (Task.hasDueTime(date)) { + String time = getTimeString(context, newDateTime(date)); + return newDateTime().startOfDay().equals(newDateTime(date).startOfDay()) ? time : String.format("%s %s", day, time); + } else { + return day; + } + } + return Task.hasDueTime(date) + ? getFullDateTime(newDateTime(date), locale, style) + : getFullDate(newDateTime(date), locale, style); } - public static String getDateStringWithTime(Context context, long timestamp) { - DateTime date = newDateTime(timestamp); - return getDateString(date) + ", " + getTimeString(context, date); + private static boolean isAbbreviated(FormatStyle style) { + return style == FormatStyle.SHORT || style == FormatStyle.MEDIUM; } - public static String getRelativeDateStringWithTime(Context context, long timestamp) { - String string = DateUtilities.getRelativeDay(context, timestamp, false); - if (Task.hasDueTime(timestamp)) { - string = - String.format( - "%s %s", - string, // $NON-NLS-1$ - DateUtilities.getTimeString(context, timestamp)); - } - return string; + static String getRelativeDay( + Context context, + long date, + java.util.Locale locale, + FormatStyle style) { + String relativeDay = getRelativeDay(context, date, locale, isAbbreviated(style)); + return Strings.isNullOrEmpty(relativeDay) + ? getFullDate(newDateTime(date), locale, style) + : relativeDay; } - public static String getAbbreviatedRelativeDateWithTime(Context context, long date) { - long startOfToday = getStartOfDay(currentTimeMillis()); - long startOfDate = getStartOfDay(date); - String day = getRelativeDay(context, date, startOfDate, startOfToday, true); - if (Task.hasDueTime(date)) { - String time = getTimeString(context, date); - return startOfToday == startOfDate ? time : String.format("%s %s", day, time); - } - return day; + private static String getFullDate(DateTime date, java.util.Locale locale, FormatStyle style) { + return stripYear( + DateTimeFormatter.ofLocalizedDate(style) + .withLocale(locale) + .format(date.toLocalDate()), + newDateTime().getYear()); } - /** @return yesterday, today, tomorrow, or null */ - public static String getRelativeDay(Context context, long date, boolean abbreviated) { - long today = getStartOfDay(currentTimeMillis()); - long input = getStartOfDay(date); + private static String getFullDateTime(DateTime date, java.util.Locale locale, FormatStyle style) { + return stripYear( + DateTimeFormatter.ofLocalizedDateTime(style, FormatStyle.SHORT) + .withLocale(locale) + .format(date.toLocalDateTime()), + newDateTime().getYear()); + } - return getRelativeDay(context, date, input, today, abbreviated); + private static String stripYear(String date, int year) { + return date.replaceFirst("(,? )?" + year + "(年|년 )?", ""); } - private static String getRelativeDay( - Context context, long date, long input, long today, boolean abbreviated) { - if (today == input) { + private static @Nullable String getRelativeDay(Context context, long date, java.util.Locale locale, boolean abbreviated) { + DateTime startOfToday = newDateTime().startOfDay(); + DateTime startOfDate = newDateTime(date).startOfDay(); + + if (startOfToday.equals(startOfDate)) { return context.getString(R.string.today); } - if (today + ONE_DAY == input) { + if (startOfToday.plusDays(1).equals(startOfDate)) { return context.getString(abbreviated ? R.string.tmrw : R.string.tomorrow); } - if (today == input + ONE_DAY) { + if (startOfDate.plusDays(1).equals(startOfToday)) { return context.getString(abbreviated ? R.string.yest : R.string.yesterday); } - if (today + abbreviationLimit >= input && today - abbreviationLimit <= input) { + if (Math.abs(startOfToday.getMillis() - startOfDate.getMillis()) <= DateUtilities.ONE_DAY * 6) { + DateTime dateTime = newDateTime(date); return abbreviated - ? DateUtilities.getWeekdayShort(newDateTime(date)) - : DateUtilities.getWeekday(newDateTime(date)); - } - - return getDateString(newDateTime(date)); - } + ? DateUtilities.getWeekdayShort(dateTime, locale) + : DateUtilities.getWeekday(dateTime, locale); - public static long getStartOfDay(long time) { - return newDateTime(time).startOfDay().getMillis(); + } + return null; } } diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 5c383fbf1..57a22aa87 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -276,7 +276,7 @@ public final class TaskEditFragment extends InjectingFragment String.format( "%s %s\n%s %s", // $NON-NLS-1$ getString(R.string.TEA_timer_comment_stopped), - DateUtilities.getTimeString(getActivity(), newDateTime()), + DateUtilities.getTimeString(context, newDateTime()), getString(R.string.TEA_timer_comment_spent), elapsedTime), null); @@ -289,7 +289,7 @@ public final class TaskEditFragment extends InjectingFragment String.format( "%s %s", getString(R.string.TEA_timer_comment_started), - DateUtilities.getTimeString(getActivity(), newDateTime())), + DateUtilities.getTimeString(context, newDateTime())), null); return model; } diff --git a/app/src/main/java/com/todoroo/astrid/data/Task.java b/app/src/main/java/com/todoroo/astrid/data/Task.java index 3959dc18d..eecafc83c 100644 --- a/app/src/main/java/com/todoroo/astrid/data/Task.java +++ b/app/src/main/java/com/todoroo/astrid/data/Task.java @@ -417,8 +417,7 @@ public class Task implements Parcelable { public boolean isOverdue() { long dueDate = getDueDate(); - long compareTo = - hasDueTime() ? DateUtilities.now() : DateUtilities.getStartOfDay(DateUtilities.now()); + long compareTo = hasDueTime() ? DateUtilities.now() : newDateTime().startOfDay().getMillis(); return dueDate < compareTo && !isCompleted(); } diff --git a/app/src/main/java/com/todoroo/astrid/notes/CommentsController.java b/app/src/main/java/com/todoroo/astrid/notes/CommentsController.java index 2917b82e9..b46a2f6e5 100644 --- a/app/src/main/java/com/todoroo/astrid/notes/CommentsController.java +++ b/app/src/main/java/com/todoroo/astrid/notes/CommentsController.java @@ -26,6 +26,7 @@ import org.tasks.R; import org.tasks.data.UserActivity; import org.tasks.data.UserActivityDao; import org.tasks.files.FileHelper; +import org.tasks.locale.Locale; import org.tasks.preferences.Preferences; public class CommentsController { @@ -34,6 +35,7 @@ public class CommentsController { private final ArrayList items = new ArrayList<>(); private final Activity activity; private final Preferences preferences; + private final Locale locale; private int commentItems = 10; private Task task; @@ -41,10 +43,11 @@ public class CommentsController { @Inject public CommentsController( - UserActivityDao userActivityDao, Activity activity, Preferences preferences) { + UserActivityDao userActivityDao, Activity activity, Preferences preferences, Locale locale) { this.userActivityDao = userActivityDao; this.activity = activity; this.preferences = preferences; + this.locale = locale; } private static void setupImagePopupForCommentView( @@ -114,7 +117,7 @@ public class CommentsController { // date final TextView date = view.findViewById(R.id.date); - date.setText(DateUtilities.getLongDateStringWithTime(activity, item.getCreated())); + date.setText(DateUtilities.getLongDateStringWithTime(item.getCreated(), locale.getLocale())); // picture final ImageView commentPictureView = view.findViewById(R.id.comment_picture); diff --git a/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java b/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java index 3f0917177..e59052c85 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java @@ -41,6 +41,7 @@ import org.tasks.activities.DateAndTimePickerActivity; import org.tasks.dialogs.MyTimePickerDialog; import org.tasks.injection.ForActivity; import org.tasks.injection.FragmentComponent; +import org.tasks.locale.Locale; import org.tasks.preferences.Preferences; import org.tasks.themes.ThemeBase; import org.tasks.time.DateTime; @@ -66,6 +67,7 @@ public class HideUntilControlSet extends TaskEditControlFragment implements OnIt @Inject @ForActivity Context context; @Inject ThemeBase themeBase; @Inject Preferences preferences; + @Inject Locale locale; // private final CheckBox enabled; @BindView(R.id.hideUntil) Spinner spinner; @@ -266,12 +268,12 @@ public class HideUntilControlSet extends TaskEditControlFragment implements OnIt && hideUntilAsDate.getMinuteOfHour() == 0 && hideUntilAsDate.getSecondOfMinute() == 0) { return new HideUntilValue( - DateUtilities.getDateString(newDateTime(timestamp)), + DateUtilities.getDateString(context, newDateTime(timestamp)), Task.HIDE_UNTIL_SPECIFIC_DAY, timestamp); } else { return new HideUntilValue( - DateUtilities.getDateStringWithTime(context, timestamp), + DateUtilities.getLongDateStringWithTime(timestamp, locale.getLocale()), Task.HIDE_UNTIL_SPECIFIC_DAY_TIME, timestamp); } diff --git a/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java b/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java index c5f75cfec..76c741f43 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java @@ -45,6 +45,7 @@ import org.tasks.data.Alarm; import org.tasks.dialogs.MyTimePickerDialog; import org.tasks.injection.ForActivity; import org.tasks.injection.FragmentComponent; +import org.tasks.locale.Locale; import org.tasks.ui.HiddenTopArrayAdapter; import org.tasks.ui.TaskEditControlFragment; @@ -66,6 +67,7 @@ public class ReminderControlSet extends TaskEditControlFragment { private final Set alarms = new LinkedHashSet<>(); @Inject AlarmService alarmService; @Inject @ForActivity Context context; + @Inject Locale locale; @BindView(R.id.alert_container) LinearLayout alertContainer; @@ -231,7 +233,7 @@ public class ReminderControlSet extends TaskEditControlFragment { private void addAlarmRow(final Long timestamp) { if (alarms.add(timestamp)) { - addAlarmRow(getLongDateStringWithTime(context, timestamp), v -> alarms.remove(timestamp)); + addAlarmRow(getLongDateStringWithTime(timestamp, locale.getLocale()), v -> alarms.remove(timestamp)); } } diff --git a/app/src/main/java/org/tasks/receivers/RepeatConfirmationReceiver.java b/app/src/main/java/org/tasks/receivers/RepeatConfirmationReceiver.java index 1ecc33d8f..b72080d5f 100644 --- a/app/src/main/java/org/tasks/receivers/RepeatConfirmationReceiver.java +++ b/app/src/main/java/org/tasks/receivers/RepeatConfirmationReceiver.java @@ -15,6 +15,8 @@ import java.text.ParseException; import javax.inject.Inject; import org.tasks.R; import org.tasks.analytics.Tracker; +import org.tasks.locale.Locale; +import org.threeten.bp.format.FormatStyle; import timber.log.Timber; public class RepeatConfirmationReceiver extends BroadcastReceiver { @@ -22,12 +24,15 @@ public class RepeatConfirmationReceiver extends BroadcastReceiver { private final Activity activity; private final Tracker tracker; private final TaskDao taskDao; + private final Locale locale; @Inject - public RepeatConfirmationReceiver(Activity activity, Tracker tracker, TaskDao taskDao) { + public RepeatConfirmationReceiver( + Activity activity, Tracker tracker, TaskDao taskDao, Locale locale) { this.activity = activity; this.tracker = tracker; this.taskDao = taskDao; + this.locale = locale; } @Override @@ -60,7 +65,9 @@ public class RepeatConfirmationReceiver extends BroadcastReceiver { final Task task, final long oldDueDate, final long newDueDate) { - String dueDateString = getRelativeDateAndTimeString(activity, newDueDate); + String dueDateString = + DateUtilities.getRelativeDateTime( + activity, newDueDate, locale.getLocale(), FormatStyle.LONG); String snackbarText = activity.getString(R.string.repeat_snackbar, task.getTitle(), dueDateString); taskListFragment @@ -84,14 +91,4 @@ public class RepeatConfirmationReceiver extends BroadcastReceiver { }) .show(); } - - private String getRelativeDateAndTimeString(Context context, long date) { - String dueString = date > 0 ? DateUtilities.getRelativeDay(context, date, false) : ""; - if (Task.hasDueTime(date)) { - dueString = - context.getString( - R.string.repeat_snackbar_time, dueString, DateUtilities.getTimeString(context, date)); - } - return dueString; - } } diff --git a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java index baeef61a5..8e22adfe1 100644 --- a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java @@ -9,7 +9,6 @@ import static com.google.ical.values.Frequency.MONTHLY; import static com.google.ical.values.Frequency.WEEKLY; import static com.google.ical.values.Frequency.YEARLY; import static java.util.Arrays.asList; -import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.dialogs.MyDatePickerDialog.newDatePicker; import static org.tasks.time.DateTimeUtils.currentTimeMillis; @@ -51,7 +50,6 @@ import com.google.ical.values.RRule; import com.google.ical.values.Weekday; import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.data.Task; import com.todoroo.astrid.repeats.RepeatControlSet; import java.text.DateFormatSymbols; import java.util.ArrayList; @@ -68,6 +66,7 @@ import org.tasks.injection.InjectingDialogFragment; import org.tasks.locale.Locale; import org.tasks.preferences.ResourceResolver; import org.tasks.time.DateTime; +import org.threeten.bp.format.FormatStyle; import timber.log.Timber; public class CustomRecurrenceDialog extends InjectingDialogFragment { @@ -158,19 +157,6 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { return dialog; } - private static String getDisplayString(Context context, long repeatUntilValue) { - StringBuilder displayString = new StringBuilder(); - DateTime d = newDateTime(repeatUntilValue); - if (d.getMillis() > 0) { - displayString.append(DateUtilities.getDateString(d)); - if (Task.hasDueTime(repeatUntilValue)) { - displayString.append(", "); // $NON-NLS-1$ //$NON-NLS-2$ - displayString.append(DateUtilities.getTimeString(context, repeatUntilValue)); - } - } - return displayString.toString(); - } - @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -532,7 +518,10 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { int count = rrule.getCount(); if (repeatUntil > 0) { repeatUntilOptions.add( - getString(R.string.repeat_until, getDisplayString(context, repeatUntil))); + getString( + R.string.repeat_until, + DateUtilities.getRelativeDateTime( + context, repeatUntil, locale.getLocale(), FormatStyle.MEDIUM))); repeatTimes.setVisibility(View.GONE); repeatTimesText.setVisibility(View.GONE); } else if (count > 0) { diff --git a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java index bd3f34f8e..ef0be5f1b 100644 --- a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java +++ b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java @@ -58,7 +58,7 @@ public class RepeatRuleToString { R.string.repeats_single_on_until, frequencyString, dayString, - DateUtilities.getLongDateString(repeatUntil)); + DateUtilities.getLongDateString(repeatUntil, locale.getLocale())); } } else if (count > 0) { return context.getString( @@ -69,7 +69,7 @@ public class RepeatRuleToString { return context.getString( R.string.repeats_single_until, frequencyString, - DateUtilities.getLongDateString(repeatUntil)); + DateUtilities.getLongDateString(repeatUntil, locale.getLocale())); } } else { int plural = getFrequencyPlural(frequency); @@ -90,7 +90,7 @@ public class RepeatRuleToString { R.string.repeats_plural_on_until, frequencyPlural, dayString, - DateUtilities.getLongDateString(repeatUntil)); + DateUtilities.getLongDateString(repeatUntil, locale.getLocale())); } } else if (count > 0) { return context.getString( @@ -101,7 +101,7 @@ public class RepeatRuleToString { return context.getString( R.string.repeats_plural_until, frequencyPlural, - DateUtilities.getLongDateString(repeatUntil)); + DateUtilities.getLongDateString(repeatUntil, locale.getLocale())); } } } diff --git a/app/src/main/java/org/tasks/tasklist/ViewHolder.java b/app/src/main/java/org/tasks/tasklist/ViewHolder.java index 4689e7122..be10f1a62 100644 --- a/app/src/main/java/org/tasks/tasklist/ViewHolder.java +++ b/app/src/main/java/org/tasks/tasklist/ViewHolder.java @@ -2,7 +2,7 @@ package org.tasks.tasklist; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastKitKat; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; -import static com.todoroo.andlib.utility.DateUtilities.getAbbreviatedRelativeDateWithTime; +import static com.todoroo.andlib.utility.DateUtilities.getRelativeDateTime; import android.annotation.SuppressLint; import android.app.Activity; @@ -30,6 +30,7 @@ import org.tasks.dialogs.Linkify; import org.tasks.preferences.Preferences; import org.tasks.ui.CheckBoxProvider; import org.tasks.ui.ChipProvider; +import org.threeten.bp.format.FormatStyle; public class ViewHolder extends RecyclerView.ViewHolder { @@ -253,7 +254,9 @@ public class ViewHolder extends RecyclerView.ViewHolder { } else { dueDate.setTextColor(textColorSecondary); } - String dateValue = getAbbreviatedRelativeDateWithTime(context, task.getDueDate()); + String dateValue = + getRelativeDateTime( + context, task.getDueDate(), java.util.Locale.getDefault(), FormatStyle.MEDIUM); dueDate.setText(dateValue); dueDate.setVisibility(View.VISIBLE); } else { diff --git a/app/src/main/java/org/tasks/time/DateTime.java b/app/src/main/java/org/tasks/time/DateTime.java index 867f7e2ab..c255e362e 100644 --- a/app/src/main/java/org/tasks/time/DateTime.java +++ b/app/src/main/java/org/tasks/time/DateTime.java @@ -18,6 +18,8 @@ import java.util.GregorianCalendar; import java.util.TimeZone; import java.util.concurrent.TimeUnit; import org.tasks.locale.Locale; +import org.threeten.bp.LocalDate; +import org.threeten.bp.LocalDateTime; public class DateTime { @@ -320,6 +322,14 @@ public class DateTime { return timestamp == 0 ? null : new DateValueImpl(getYear(), getMonthOfYear(), getDayOfMonth()); } + public LocalDate toLocalDate() { + return timestamp == 0 ? null : LocalDate.of(getYear(), getMonthOfYear(), getDayOfMonth()); + } + + public LocalDateTime toLocalDateTime() { + return timestamp == 0 ? null : LocalDateTime.of(getYear(), getMonthOfYear(), getDayOfMonth(), getHourOfDay(), getMinuteOfHour()); + } + public int getDayOfWeekInMonth() { return getCalendar().get(Calendar.DAY_OF_WEEK_IN_MONTH); } diff --git a/app/src/main/java/org/tasks/ui/DeadlineControlSet.java b/app/src/main/java/org/tasks/ui/DeadlineControlSet.java index af36707d8..f262589f6 100644 --- a/app/src/main/java/org/tasks/ui/DeadlineControlSet.java +++ b/app/src/main/java/org/tasks/ui/DeadlineControlSet.java @@ -38,6 +38,7 @@ import org.tasks.dialogs.MyDatePickerDialog; import org.tasks.dialogs.MyTimePickerDialog; import org.tasks.injection.ForActivity; import org.tasks.injection.FragmentComponent; +import org.tasks.locale.Locale; import org.tasks.preferences.Preferences; import org.tasks.time.DateTime; @@ -54,6 +55,7 @@ public class DeadlineControlSet extends TaskEditControlFragment { @Inject Preferences preferences; @Inject @ForActivity Context context; + @Inject Locale locale; @BindView(R.id.due_date) Spinner dueDateSpinner; @@ -364,7 +366,7 @@ public class DeadlineControlSet extends TaskEditControlFragment { } else if (date == today.plusWeeks(1).getMillis()) { dueDateOptions.set(0, nextWeekString); } else { - dueDateOptions.set(0, DateUtilities.getLongDateString(newDateTime(date))); + dueDateOptions.set(0, DateUtilities.getLongDateString(newDateTime(date), locale.getLocale())); } } dueDateOptions.set(3, nextWeekString); diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java index 0d8e498f1..dc882d96a 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java +++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java @@ -28,6 +28,7 @@ import org.tasks.locale.Locale; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import org.tasks.ui.CheckBoxProvider; +import org.threeten.bp.format.FormatStyle; import timber.log.Timber; class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { @@ -36,6 +37,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { private final TaskDao taskDao; private final DefaultFilterProvider defaultFilterProvider; private final CheckBoxProvider checkBoxProvider; + private final Locale locale; private final SubtasksHelper subtasksHelper; private final Preferences preferences; private final WidgetPreferences widgetPreferences; @@ -60,7 +62,8 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { int widgetId, TaskDao taskDao, DefaultFilterProvider defaultFilterProvider, - CheckBoxProvider checkBoxProvider) { + CheckBoxProvider checkBoxProvider, + Locale locale) { this.subtasksHelper = subtasksHelper; this.preferences = preferences; this.context = context; @@ -68,6 +71,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { this.taskDao = taskDao; this.defaultFilterProvider = defaultFilterProvider; this.checkBoxProvider = checkBoxProvider; + this.locale = locale; widgetPreferences = new WidgetPreferences(context, preferences, widgetId); DisplayMetrics metrics = context.getResources().getDisplayMetrics(); widgetPadding = (int)(10 * metrics.density); @@ -220,7 +224,8 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { row.setViewVisibility(R.id.widget_due_date, View.VISIBLE); row.setTextViewText( R.id.widget_due_date, - DateUtilities.getRelativeDateStringWithTime(context, task.getDueDate())); + DateUtilities.getRelativeDateTime( + context, task.getDueDate(), locale.getLocale(), FormatStyle.MEDIUM)); //noinspection ResourceAsColor row.setTextColor( R.id.widget_due_date, diff --git a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java index 02f61a5cb..13ba5b7a4 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java +++ b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java @@ -57,6 +57,7 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService { widgetId, taskDao, defaultFilterProvider, - new CheckBoxProvider(context, new ColorProvider(context, preferences))); + new CheckBoxProvider(context, new ColorProvider(context, preferences)), + locale); } } diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 0555d7a5d..dd2178dca 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -261,7 +261,6 @@ Повтаряй брой пъти Възниква %1$s е насрочено за %2$s - %1$s в %2$s Нов таг Създаване на нов списък Без категория diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1a59c6b05..70342a6fb 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -368,7 +368,6 @@ okamžiku dokočení Vyskytne se Úkol %1$s byl znovu naplánován na %2$s - %1$s na %2$s Vytvořit nový seznam Aplikace bude nahlas číst název úkolu při upozornění Adresář příloh diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 448ba192d..646204f23 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -257,7 +257,6 @@ Wiederhole n-mal Tritt ein %1$s neu geplant für %2$s - %1$s um %2$s Neues Schlagwort erstellen Neue Liste erstellen Nicht kategorisiert diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a77df1a2b..48e29d01a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -262,7 +262,6 @@ Repetir un número de veces Número de repeticiones %1$s He reprogramado esta tarea recurrente para %2$s - %1$s a %2$s Crear nueva etiqueta Crea una nueva lista Sin Categoría diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 775bcb746..c9e2a0209 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -266,7 +266,6 @@ Errepikatu aldi kopuru bat Errepikapenak "%1$s %2$s-rako programatuta" - %1$s %2$s(e)tan Sortu etiketa berria Sortu zerrenda berria Kategoria gabe diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5e9fdd91e..c7e25cd45 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -247,7 +247,6 @@ Nombre de répétitions Se répète %1$s replanifiée à %2$s - %1$s à %2$s Créer un nouveau tag Créer une nouvelle liste Non classé diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index b6775324a..f189f88b6 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -261,7 +261,6 @@ Ismétlés meghatározott alkalommal Előfordul %1$s újraütemezve ekkorra: %2$s - %1$s ekkor: %2$s Új címke létrehozása Új lista létrehozása Kategória nélküli diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 14e93206c..e6e48a358 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -259,7 +259,6 @@ Ripeti un dato numero di volte Si verifica %1$s ripianificata per %2$s - %1$s alle %2$s Crea nuova etichetta Crea nuova lista Non classificate diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 402326822..01cdeabd2 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -294,7 +294,6 @@ חוזר מספר פעמים קורה %1$s תזמן מחדש משימה חוזרת זו ל־%2$s - %1$s בשעה %2$s יצירת תגית חדשה יצירת רשימה חדשה ללא קיטלוג diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f1ef241a2..ad8a8e4b1 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -259,7 +259,6 @@ 繰り返し回数 発生 %1$s を %2$s にスケジュール変更しました - %1$s %2$s 新しいタグを作成 新しいリストを作成 未分類 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c0a487f94..4a113c6fe 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -263,7 +263,6 @@ 여러회 반복 반복횟수 %1$s 이 %2$s 로 변경되었습니다 - %1$s %2$s 새 태그 만들기 새 목록 만들기 미분류 할일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 79f4c5bb7..845d4d544 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -258,7 +258,6 @@ Kartoti nustatytą kiekį kartų Įvyksta %1$s perplanuotas šiai datai: %2$s - %1$s %2$s metu Sukurti naują etiketę Sukurti naują sąrašą Nekategorizuotos diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 4b2756e50..12cc77686 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -325,7 +325,6 @@ Gjenta et antall ganger Inntreffer %1$s flyttet til %2$s - %1$s %2$s Opprett en ny etikett Opprett en ny liste Slett %s\? diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e140fefd4..d4efd43e8 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -258,7 +258,6 @@ Herhaal een aantal keer Keren %1$s opnieuw ingepland op %2$s - %1$s om %2$s Nieuw label aanmaken Nieuwe lijst aanmaken Niet gecategoriseerd diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 80dd53b2d..93e99fb4f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -272,7 +272,6 @@ Powtarzaj podaną ilość razy Występuje %1$s przełożone na %2$s - %1$s o %2$s Stwórz nowy tag Utwórz nową listę Na żadnej liście diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8f6f1a461..93aad6222 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -259,7 +259,6 @@ Repetir um número de vezes Ocorre %1$s remarcada para %2$s - %1$s as %2$s Criar nova etiqueta Criar nova lista Sem categoria diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1c4416598..8ad2c514c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -278,7 +278,6 @@ Повторять несколько раз Повторять «%1$s» перенесено на %2$s - %1$s в %2$s Создать новый тег Создать новый список Без тега diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 7a1e55f3e..774199ce6 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -259,7 +259,6 @@ Opakovať určitý počet krát Vyskytuje sa %1$s preložené na %2$s - %1$s, %2$s Vytvoriť nový štítok Vytvoriť nový zoznam Nezaradené diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2544b28c0..337843d0d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -367,7 +367,6 @@ datum färdigställt Repetera ett visst antal gånger Inträffar - %1$s vid %2$s Timer Kopiera till Google Drive Radavstånd diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 60600bccb..b00499318 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -264,7 +264,6 @@ Birkaç kez yinele Şu kadar gerçekleşir %1$s, %2$s için yeniden zamanlandı - %1$s saat %2$s Yeni etiket oluştur Yeni liste oluştur Kategorilendirilmemiş diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e630065f7..2ca502f51 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -261,7 +261,6 @@ Повторити кількість разів Станеться %1$s перенесено на %2$s - %1$s о %2$s Створити новий ярлик Новий список Без категорії diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0d0f4c0f6..62f41ddf5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -248,7 +248,6 @@ 重复多次 发生 %1$s 重新安排在 %2$s - %1$s 的 %2$s 新建标签 新建列表 未分类 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7679fa11a..0e5fb4a4c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -275,7 +275,6 @@ File %1$s contained %2$s.\n\n Repeat a number of times Occurs %1$s rescheduled for %2$s - %1$s at %2$s Create new tag Create new list Uncategorized