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

Commit 9087c5d2 authored by Victor Chang's avatar Victor Chang Committed by Automerger Merge Worker
Browse files

Merge "a.t.f.DateFormat behaves consistently with j.t.DateFormat in en, en-US...

Merge "a.t.f.DateFormat behaves consistently with j.t.DateFormat in en, en-US locale" am: db93b81c am: 17859107 am: 7e767cc9 am: d3bffa0c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2519640



Change-Id: I36072e6b3867100d1fd2edf7beb2cd74cfa12269
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3cf51e2a d3bffa0c
Loading
Loading
Loading
Loading
+26 −6
Original line number Diff line number Diff line
@@ -24,12 +24,12 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.icu.text.DateFormatSymbols;
import android.icu.text.DateTimePatternGenerator;
import android.icu.util.ULocale;
import android.os.Build;
import android.provider.Settings;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.SpannedString;
import android.text.TextUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -265,11 +265,13 @@ public class DateFormat {
     * @return a string pattern suitable for use with {@link java.text.SimpleDateFormat}.
     */
    public static String getBestDateTimePattern(Locale locale, String skeleton) {
        DateTimePatternGenerator dtpg = DateTimePatternGenerator.getInstance(locale);
        ULocale uLocale = ULocale.forLocale(locale);
        DateTimePatternGenerator dtpg = DateTimePatternGenerator.getInstance(uLocale);
        boolean allowDuplicateFields = !CompatChanges.isChangeEnabled(
                DISALLOW_DUPLICATE_FIELD_IN_SKELETON);
        return dtpg.getBestPattern(skeleton, DateTimePatternGenerator.MATCH_NO_OPTIONS,
        String pattern = dtpg.getBestPattern(skeleton, DateTimePatternGenerator.MATCH_NO_OPTIONS,
                allowDuplicateFields);
        return getCompatibleEnglishPattern(uLocale, pattern);
    }

    /**
@@ -303,10 +305,11 @@ public class DateFormat {
     */
    @UnsupportedAppUsage
    public static String getTimeFormatString(Context context, int userHandle) {
        DateTimePatternGenerator dtpg = DateTimePatternGenerator.getInstance(
                context.getResources().getConfiguration().locale);
        return is24HourFormat(context, userHandle) ? dtpg.getBestPattern("Hm")
        ULocale uLocale = ULocale.forLocale(context.getResources().getConfiguration().locale);
        DateTimePatternGenerator dtpg = DateTimePatternGenerator.getInstance(uLocale);
        String pattern = is24HourFormat(context, userHandle) ? dtpg.getBestPattern("Hm")
            : dtpg.getBestPattern("hm");
        return getCompatibleEnglishPattern(uLocale, pattern);
    }

    /**
@@ -713,4 +716,21 @@ public class DateFormat {
    public static DateFormatSymbols getIcuDateFormatSymbols(Locale locale) {
        return new DateFormatSymbols(android.icu.util.GregorianCalendar.class, locale);
    }

    /**
     * See http://b/266731719. It mirrors the implementation in
     * {@link libcore.icu.SimpleDateFormatData.DateTimeFormatStringGenerator#postProcessPattern}
     */
    private static String getCompatibleEnglishPattern(ULocale locale, String pattern) {
        if (pattern == null || locale == null || !"en".equals(locale.getLanguage())) {
            return pattern;
        }

        String region = locale.getCountry();
        if (region != null && !region.isEmpty() && !"US".equals(region)) {
            return pattern;
        }

        return pattern.replace('\u202f', ' ');
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -156,8 +156,8 @@ public class DateFormatTest {
    @DisableCompatChanges({DateFormat.DISALLOW_DUPLICATE_FIELD_IN_SKELETON})
    public void testGetBestDateTimePattern_enableDuplicateField() {
        // en-US uses 12-hour format by default.
        assertEquals("h:mm\u202fa", DateFormat.getBestDateTimePattern(Locale.US, "jmma"));
        assertEquals("h:mm\u202fa", DateFormat.getBestDateTimePattern(Locale.US, "ahmma"));
        assertEquals("h:mm a", DateFormat.getBestDateTimePattern(Locale.US, "jmma"));
        assertEquals("h:mm a", DateFormat.getBestDateTimePattern(Locale.US, "ahmma"));
    }

    private static void assertIllegalArgumentException(Locale l, String skeleton) {
+5 −5
Original line number Diff line number Diff line
@@ -139,16 +139,16 @@ public class DateUtilsTest {
                fixedTime, java.text.DateFormat.SHORT, java.text.DateFormat.FULL));

        final long hourDuration = 2 * 60 * 60 * 1000;
        assertEquals("5:30:15\u202fAM Greenwich Mean Time", DateUtils.formatSameDayTime(
        assertEquals("5:30:15 AM Greenwich Mean Time", DateUtils.formatSameDayTime(
                fixedTime + hourDuration, fixedTime, java.text.DateFormat.FULL,
                java.text.DateFormat.FULL));
        assertEquals("5:30:15\u202fAM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
        assertEquals("5:30:15 AM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
                fixedTime, java.text.DateFormat.FULL, java.text.DateFormat.DEFAULT));
        assertEquals("5:30:15\u202fAM GMT", DateUtils.formatSameDayTime(fixedTime + hourDuration,
        assertEquals("5:30:15 AM GMT", DateUtils.formatSameDayTime(fixedTime + hourDuration,
                fixedTime, java.text.DateFormat.FULL, java.text.DateFormat.LONG));
        assertEquals("5:30:15\u202fAM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
        assertEquals("5:30:15 AM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
                fixedTime, java.text.DateFormat.FULL, java.text.DateFormat.MEDIUM));
        assertEquals("5:30\u202fAM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
        assertEquals("5:30 AM", DateUtils.formatSameDayTime(fixedTime + hourDuration,
                fixedTime, java.text.DateFormat.FULL, java.text.DateFormat.SHORT));
    }