Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99c406e4 authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Switch DateUtils and Time over to using the CLDR for all week and month names.

Change-Id: I92c73c269c6f90125cf834d434883595ba4b42d4
parent db9d339d
Loading
Loading
Loading
Loading
+29 −124
Original line number Diff line number Diff line
@@ -38,98 +38,6 @@ import libcore.icu.LocaleData;
public class DateUtils
{
    private static final Object sLock = new Object();
    private static final int[] sDaysLong = new int[] {
            com.android.internal.R.string.day_of_week_long_sunday,
            com.android.internal.R.string.day_of_week_long_monday,
            com.android.internal.R.string.day_of_week_long_tuesday,
            com.android.internal.R.string.day_of_week_long_wednesday,
            com.android.internal.R.string.day_of_week_long_thursday,
            com.android.internal.R.string.day_of_week_long_friday,
            com.android.internal.R.string.day_of_week_long_saturday,
        };
    private static final int[] sDaysMedium = new int[] {
            com.android.internal.R.string.day_of_week_medium_sunday,
            com.android.internal.R.string.day_of_week_medium_monday,
            com.android.internal.R.string.day_of_week_medium_tuesday,
            com.android.internal.R.string.day_of_week_medium_wednesday,
            com.android.internal.R.string.day_of_week_medium_thursday,
            com.android.internal.R.string.day_of_week_medium_friday,
            com.android.internal.R.string.day_of_week_medium_saturday,
        };
    private static final int[] sDaysShort = new int[] {
            com.android.internal.R.string.day_of_week_short_sunday,
            com.android.internal.R.string.day_of_week_short_monday,
            com.android.internal.R.string.day_of_week_short_tuesday,
            com.android.internal.R.string.day_of_week_short_wednesday,
            com.android.internal.R.string.day_of_week_short_thursday,
            com.android.internal.R.string.day_of_week_short_friday,
            com.android.internal.R.string.day_of_week_short_saturday,
        };
    private static final int[] sDaysShortest = new int[] {
            com.android.internal.R.string.day_of_week_shortest_sunday,
            com.android.internal.R.string.day_of_week_shortest_monday,
            com.android.internal.R.string.day_of_week_shortest_tuesday,
            com.android.internal.R.string.day_of_week_shortest_wednesday,
            com.android.internal.R.string.day_of_week_shortest_thursday,
            com.android.internal.R.string.day_of_week_shortest_friday,
            com.android.internal.R.string.day_of_week_shortest_saturday,
        };
    private static final int[] sMonthsStandaloneLong = new int [] {
            com.android.internal.R.string.month_long_standalone_january,
            com.android.internal.R.string.month_long_standalone_february,
            com.android.internal.R.string.month_long_standalone_march,
            com.android.internal.R.string.month_long_standalone_april,
            com.android.internal.R.string.month_long_standalone_may,
            com.android.internal.R.string.month_long_standalone_june,
            com.android.internal.R.string.month_long_standalone_july,
            com.android.internal.R.string.month_long_standalone_august,
            com.android.internal.R.string.month_long_standalone_september,
            com.android.internal.R.string.month_long_standalone_october,
            com.android.internal.R.string.month_long_standalone_november,
            com.android.internal.R.string.month_long_standalone_december,
        };
    private static final int[] sMonthsLong = new int [] {
            com.android.internal.R.string.month_long_january,
            com.android.internal.R.string.month_long_february,
            com.android.internal.R.string.month_long_march,
            com.android.internal.R.string.month_long_april,
            com.android.internal.R.string.month_long_may,
            com.android.internal.R.string.month_long_june,
            com.android.internal.R.string.month_long_july,
            com.android.internal.R.string.month_long_august,
            com.android.internal.R.string.month_long_september,
            com.android.internal.R.string.month_long_october,
            com.android.internal.R.string.month_long_november,
            com.android.internal.R.string.month_long_december,
        };
    private static final int[] sMonthsMedium = new int [] {
            com.android.internal.R.string.month_medium_january,
            com.android.internal.R.string.month_medium_february,
            com.android.internal.R.string.month_medium_march,
            com.android.internal.R.string.month_medium_april,
            com.android.internal.R.string.month_medium_may,
            com.android.internal.R.string.month_medium_june,
            com.android.internal.R.string.month_medium_july,
            com.android.internal.R.string.month_medium_august,
            com.android.internal.R.string.month_medium_september,
            com.android.internal.R.string.month_medium_october,
            com.android.internal.R.string.month_medium_november,
            com.android.internal.R.string.month_medium_december,
        };
    private static final int[] sMonthsShortest = new int [] {
            com.android.internal.R.string.month_shortest_january,
            com.android.internal.R.string.month_shortest_february,
            com.android.internal.R.string.month_shortest_march,
            com.android.internal.R.string.month_shortest_april,
            com.android.internal.R.string.month_shortest_may,
            com.android.internal.R.string.month_shortest_june,
            com.android.internal.R.string.month_shortest_july,
            com.android.internal.R.string.month_shortest_august,
            com.android.internal.R.string.month_shortest_september,
            com.android.internal.R.string.month_shortest_october,
            com.android.internal.R.string.month_shortest_november,
            com.android.internal.R.string.month_shortest_december,
        };
    private static Configuration sLastConfig;
    private static java.text.DateFormat sStatusTimeFormat;
    private static String sElapsedFormatMMSS;
@@ -309,18 +217,17 @@ public class DateUtils
     * @throws IndexOutOfBoundsException if the dayOfWeek is out of bounds.
     */
    public static String getDayOfWeekString(int dayOfWeek, int abbrev) {
        int[] list;
        LocaleData d = LocaleData.get(Locale.getDefault());
        String[] names;
        switch (abbrev) {
            case LENGTH_LONG:       list = sDaysLong;       break;
            case LENGTH_MEDIUM:     list = sDaysMedium;     break;
            case LENGTH_SHORT:      list = sDaysShort;      break;
            case LENGTH_SHORTER:    list = sDaysShort;      break;
            case LENGTH_SHORTEST:   list = sDaysShortest;   break;
            default:                list = sDaysMedium;     break;
            case LENGTH_LONG:       names = d.longWeekdayNames;  break;
            case LENGTH_MEDIUM:     names = d.shortWeekdayNames; break;
            case LENGTH_SHORT:      names = d.shortWeekdayNames; break; // TODO
            case LENGTH_SHORTER:    names = d.shortWeekdayNames; break; // TODO
            case LENGTH_SHORTEST:   names = d.tinyWeekdayNames;  break;
            default:                names = d.shortWeekdayNames; break;
        }

        Resources r = Resources.getSystem();
        return r.getString(list[dayOfWeek - Calendar.SUNDAY]);
        return names[dayOfWeek];
    }

    /**
@@ -344,22 +251,21 @@ public class DateUtils
     * @return Localized month of the year.
     */
    public static String getMonthString(int month, int abbrev) {
        // Note that here we use sMonthsMedium for MEDIUM, SHORT and SHORTER.
        // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
        // This is a shortcut to not spam the translators with too many variations
        // of the same string.  If we find that in a language the distinction
        // is necessary, we can can add more without changing this API.
        int[] list;
        LocaleData d = LocaleData.get(Locale.getDefault());
        String[] names;
        switch (abbrev) {
            case LENGTH_LONG:       list = sMonthsLong;     break;
            case LENGTH_MEDIUM:     list = sMonthsMedium;   break;
            case LENGTH_SHORT:      list = sMonthsMedium;   break;
            case LENGTH_SHORTER:    list = sMonthsMedium;   break;
            case LENGTH_SHORTEST:   list = sMonthsShortest; break;
            default:                list = sMonthsMedium;   break;
            case LENGTH_LONG:       names = d.longMonthNames;  break;
            case LENGTH_MEDIUM:     names = d.shortMonthNames; break;
            case LENGTH_SHORT:      names = d.shortMonthNames; break;
            case LENGTH_SHORTER:    names = d.shortMonthNames; break;
            case LENGTH_SHORTEST:   names = d.tinyMonthNames;  break;
            default:                names = d.shortMonthNames; break;
        }

        Resources r = Resources.getSystem();
        return r.getString(list[month - Calendar.JANUARY]);
        return names[month];
    }

    /**
@@ -377,23 +283,22 @@ public class DateUtils
     * @hide Pending API council approval
     */
    public static String getStandaloneMonthString(int month, int abbrev) {
        // Note that here we use sMonthsMedium for MEDIUM, SHORT and SHORTER.
        // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
        // This is a shortcut to not spam the translators with too many variations
        // of the same string.  If we find that in a language the distinction
        // is necessary, we can can add more without changing this API.
        int[] list;
        LocaleData d = LocaleData.get(Locale.getDefault());
        String[] names;
        switch (abbrev) {
            case LENGTH_LONG:       list = sMonthsStandaloneLong;
            case LENGTH_LONG:       names = d.longStandAloneMonthNames;
                                                            break;
            case LENGTH_MEDIUM:     list = sMonthsMedium;   break;
            case LENGTH_SHORT:      list = sMonthsMedium;   break;
            case LENGTH_SHORTER:    list = sMonthsMedium;   break;
            case LENGTH_SHORTEST:   list = sMonthsShortest; break;
            default:                list = sMonthsMedium;   break;
            case LENGTH_MEDIUM:     names = d.shortMonthNames; break;
            case LENGTH_SHORT:      names = d.shortMonthNames; break;
            case LENGTH_SHORTER:    names = d.shortMonthNames; break;
            case LENGTH_SHORTEST:   names = d.tinyMonthNames;  break;
            default:                names = d.shortMonthNames; break;
        }

        Resources r = Resources.getSystem();
        return r.getString(list[month - Calendar.JANUARY]);
        return names[month];
    }

    /**
+11 −65
Original line number Diff line number Diff line
@@ -319,76 +319,22 @@ public class Time {
            Locale locale = Locale.getDefault();

            if (sLocale == null || locale == null || !(locale.equals(sLocale))) {
                Resources r = Resources.getSystem();
                LocaleData localeData = LocaleData.get(locale);

                sAm = localeData.amPm[0];
                sPm = localeData.amPm[1];

                sShortMonths = localeData.shortMonthNames;
                sLongMonths = localeData.longMonthNames;
                sLongStandaloneMonths = localeData.longStandAloneMonthNames;
                sShortWeekdays = localeData.shortWeekdayNames;
                sLongWeekdays = localeData.longWeekdayNames;

                sShortMonths = new String[] {
                    r.getString(com.android.internal.R.string.month_medium_january),
                    r.getString(com.android.internal.R.string.month_medium_february),
                    r.getString(com.android.internal.R.string.month_medium_march),
                    r.getString(com.android.internal.R.string.month_medium_april),
                    r.getString(com.android.internal.R.string.month_medium_may),
                    r.getString(com.android.internal.R.string.month_medium_june),
                    r.getString(com.android.internal.R.string.month_medium_july),
                    r.getString(com.android.internal.R.string.month_medium_august),
                    r.getString(com.android.internal.R.string.month_medium_september),
                    r.getString(com.android.internal.R.string.month_medium_october),
                    r.getString(com.android.internal.R.string.month_medium_november),
                    r.getString(com.android.internal.R.string.month_medium_december),
                };
                sLongMonths = new String[] {
                    r.getString(com.android.internal.R.string.month_long_january),
                    r.getString(com.android.internal.R.string.month_long_february),
                    r.getString(com.android.internal.R.string.month_long_march),
                    r.getString(com.android.internal.R.string.month_long_april),
                    r.getString(com.android.internal.R.string.month_long_may),
                    r.getString(com.android.internal.R.string.month_long_june),
                    r.getString(com.android.internal.R.string.month_long_july),
                    r.getString(com.android.internal.R.string.month_long_august),
                    r.getString(com.android.internal.R.string.month_long_september),
                    r.getString(com.android.internal.R.string.month_long_october),
                    r.getString(com.android.internal.R.string.month_long_november),
                    r.getString(com.android.internal.R.string.month_long_december),
                };
                sLongStandaloneMonths = new String[] {
                    r.getString(com.android.internal.R.string.month_long_standalone_january),
                    r.getString(com.android.internal.R.string.month_long_standalone_february),
                    r.getString(com.android.internal.R.string.month_long_standalone_march),
                    r.getString(com.android.internal.R.string.month_long_standalone_april),
                    r.getString(com.android.internal.R.string.month_long_standalone_may),
                    r.getString(com.android.internal.R.string.month_long_standalone_june),
                    r.getString(com.android.internal.R.string.month_long_standalone_july),
                    r.getString(com.android.internal.R.string.month_long_standalone_august),
                    r.getString(com.android.internal.R.string.month_long_standalone_september),
                    r.getString(com.android.internal.R.string.month_long_standalone_october),
                    r.getString(com.android.internal.R.string.month_long_standalone_november),
                    r.getString(com.android.internal.R.string.month_long_standalone_december),
                };
                sShortWeekdays = new String[] {
                    r.getString(com.android.internal.R.string.day_of_week_medium_sunday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_monday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_tuesday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_wednesday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_thursday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_friday),
                    r.getString(com.android.internal.R.string.day_of_week_medium_saturday),
                };
                sLongWeekdays = new String[] {
                    r.getString(com.android.internal.R.string.day_of_week_long_sunday),
                    r.getString(com.android.internal.R.string.day_of_week_long_monday),
                    r.getString(com.android.internal.R.string.day_of_week_long_tuesday),
                    r.getString(com.android.internal.R.string.day_of_week_long_wednesday),
                    r.getString(com.android.internal.R.string.day_of_week_long_thursday),
                    r.getString(com.android.internal.R.string.day_of_week_long_friday),
                    r.getString(com.android.internal.R.string.day_of_week_long_saturday),
                };
                Resources r = Resources.getSystem();
                sTimeOnlyFormat = r.getString(com.android.internal.R.string.time_of_day);
                sDateOnlyFormat = r.getString(com.android.internal.R.string.month_day_year);
                sDateTimeFormat = r.getString(com.android.internal.R.string.date_and_time);

                LocaleData localeData = LocaleData.get(locale);
                sAm = localeData.amPm[0];
                sPm = localeData.amPm[1];

                sLocale = locale;
            }

+7 −2
Original line number Diff line number Diff line
@@ -239,31 +239,36 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This,
        jobjectArray ja;
        ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortMonthsField);
        for (int i = 0; i < 12; i++) {
            // Calendar.JANUARY == 0.
            js_mon[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
            locale.mon[i] = env->GetStringUTFChars(js_mon[i], NULL);
        }

        ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longMonthsField);
        for (int i = 0; i < 12; i++) {
            // Calendar.JANUARY == 0.
            js_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
            locale.month[i] = env->GetStringUTFChars(js_month[i], NULL);
        }

        ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longStandaloneMonthsField);
        for (int i = 0; i < 12; i++) {
            // Calendar.JANUARY == 0.
            js_standalone_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
            locale.standalone_month[i] = env->GetStringUTFChars(js_standalone_month[i], NULL);
        }

        ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField);
        for (int i = 0; i < 7; i++) {
            js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
            // Calendar.SUNDAY == 1, and there's an empty string in element 0.
            js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
            locale.wday[i] = env->GetStringUTFChars(js_wday[i], NULL);
        }

        ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longWeekdaysField);
        for (int i = 0; i < 7; i++) {
            js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
            // Calendar.SUNDAY == 1, and there's an empty string in element 0.
            js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
            locale.weekday[i] = env->GetStringUTFChars(js_weekday[i], NULL);
        }

+0 −84
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="month_long_standalone_january">Januarie</string>
    <string name="month_long_standalone_february">Februarie</string>
    <string name="month_long_standalone_march">Maart</string>
    <string name="month_long_standalone_april">April</string>
    <string name="month_long_standalone_may">Mei</string>
    <string name="month_long_standalone_june">Junie</string>
    <string name="month_long_standalone_july">Julie</string>
    <string name="month_long_standalone_august">Augustus</string>
    <string name="month_long_standalone_september">September</string>
    <string name="month_long_standalone_october">Oktober</string>
    <string name="month_long_standalone_november">November</string>
    <string name="month_long_standalone_december">Desember</string>

    <string name="month_long_january">Januarie</string>
    <string name="month_long_february">Februarie</string>
    <string name="month_long_march">Maart</string>
    <string name="month_long_april">April</string>
    <string name="month_long_may">Mei</string>
    <string name="month_long_june">Junie</string>
    <string name="month_long_july">Julie</string>
    <string name="month_long_august">Augustus</string>
    <string name="month_long_september">September</string>
    <string name="month_long_october">Oktober</string>
    <string name="month_long_november">November</string>
    <string name="month_long_december">Desember</string>

    <string name="month_medium_january">Jan</string>
    <string name="month_medium_february">Feb</string>
    <string name="month_medium_march">Mar</string>
    <string name="month_medium_april">Apr</string>
    <string name="month_medium_may">Mei</string>
    <string name="month_medium_june">Jun</string>
    <string name="month_medium_july">Jul</string>
    <string name="month_medium_august">Aug</string>
    <string name="month_medium_september">Sep</string>
    <string name="month_medium_october">Okt</string>
    <string name="month_medium_november">Nov</string>
    <string name="month_medium_december">Des</string>

    <string name="month_shortest_january">1</string>
    <string name="month_shortest_february">2</string>
    <string name="month_shortest_march">3</string>
    <string name="month_shortest_april">4</string>
    <string name="month_shortest_may">5</string>
    <string name="month_shortest_june">6</string>
    <string name="month_shortest_july">7</string>
    <string name="month_shortest_august">8</string>
    <string name="month_shortest_september">9</string>
    <string name="month_shortest_october">10</string>
    <string name="month_shortest_november">11</string>
    <string name="month_shortest_december">12</string>

    <string name="day_of_week_long_sunday">Sondag</string>
    <string name="day_of_week_long_monday">Maandag</string>
    <string name="day_of_week_long_tuesday">Dinsdag</string>
    <string name="day_of_week_long_wednesday">Woensdag</string>
    <string name="day_of_week_long_thursday">Donderdag</string>
    <string name="day_of_week_long_friday">Vrydag</string>
    <string name="day_of_week_long_saturday">Saterdag</string>

    <string name="day_of_week_medium_sunday">So</string>
    <string name="day_of_week_medium_monday">Ma</string>
    <string name="day_of_week_medium_tuesday">Di</string>
    <string name="day_of_week_medium_wednesday">Wo</string>
    <string name="day_of_week_medium_thursday">Do</string>
    <string name="day_of_week_medium_friday">Vr</string>
    <string name="day_of_week_medium_saturday">Sa</string>

    <string name="day_of_week_short_sunday">So</string>
    <string name="day_of_week_short_monday">Ma</string>
    <string name="day_of_week_short_tuesday">Di</string>
    <string name="day_of_week_short_wednesday">Wo</string>
    <string name="day_of_week_short_thursday">Do</string>
    <string name="day_of_week_short_friday">Vr</string>
    <string name="day_of_week_short_saturday">Sa</string>

    <string name="day_of_week_shortest_sunday">1</string>
    <string name="day_of_week_shortest_monday">2</string>
    <string name="day_of_week_shortest_tuesday">3</string>
    <string name="day_of_week_shortest_wednesday">4</string>
    <string name="day_of_week_shortest_thursday">5</string>
    <string name="day_of_week_shortest_friday">6</string>
    <string name="day_of_week_shortest_saturday">7</string>

    <string name="hour_minute_24">%-k:%M</string>
    <string name="hour_minute_ampm">%-l:%M %p</string>
    <string name="hour_minute_cap_ampm">%-l:%M %^p</string>
+0 −84

File changed.

Preview size limit exceeded, changes collapsed.

Loading