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

Commit 3bd9f08a authored by vichang's avatar vichang Committed by Gerrit Code Review
Browse files

Merge "Use DateFormatSymbols directly instead of using LocaleData"

parents 1710dbd0 c744bd5f
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.text.format;
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.icu.text.DateFormatSymbols;
import android.icu.text.DateTimePatternGenerator;
import android.provider.Settings;
import android.text.SpannableStringBuilder;
@@ -475,6 +476,8 @@ public class DateFormat {
        int count;

        LocaleData localeData = LocaleData.get(Locale.getDefault());
        DateFormatSymbols dfs = getIcuDateFormatSymbols(Locale.getDefault());
        String[] amPm = dfs.getAmPmStrings();

        int len = inFormat.length();

@@ -496,7 +499,7 @@ public class DateFormat {
            switch (c) {
                case 'A':
                case 'a':
                    replacement = localeData.amPm[inDate.get(Calendar.AM_PM) - Calendar.AM];
                    replacement = amPm[inDate.get(Calendar.AM_PM) - Calendar.AM];
                    break;
                case 'd':
                    replacement = zeroPad(inDate.get(Calendar.DATE), count);
@@ -678,4 +681,16 @@ public class DateFormat {
    private static String zeroPad(int inValue, int inMinDigits) {
        return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
    }

    /**
     * We use Gregorian calendar for date formats in android.text.format and various UI widget
     * historically. It's a utility method to get an {@link DateFormatSymbols} instance. Note that
     * {@link DateFormatSymbols} has cache, and external cache is not needed unless same instance is
     * requested repeatedly in the performance critical code.
     *
     * @hide
     */
    public static DateFormatSymbols getIcuDateFormatSymbols(Locale locale) {
        return new DateFormatSymbols(android.icu.util.GregorianCalendar.class, locale);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -222,7 +222,8 @@ public class DateUtils
     */
    @Deprecated
    public static String getAMPMString(int ampm) {
        return LocaleData.get(Locale.getDefault()).amPm[ampm - Calendar.AM];
        String[] amPm = DateFormat.getIcuDateFormatSymbols(Locale.getDefault()).getAmPmStrings();
        return amPm[ampm - Calendar.AM];
    }

    /**
+11 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
package android.text.format;

import android.content.res.Resources;
import android.icu.text.DateFormatSymbols;

import com.android.i18n.timezone.ZoneInfoData;

@@ -55,11 +56,13 @@ class TimeFormatter {
     * The Locale for which the cached LocaleData and formats have been loaded.
     */
    private static Locale sLocale;
    private static DateFormatSymbols sDateFormatSymbols;
    private static LocaleData sLocaleData;
    private static String sTimeOnlyFormat;
    private static String sDateOnlyFormat;
    private static String sDateTimeFormat;

    private final DateFormatSymbols dateFormatSymbols;
    private final LocaleData localeData;
    private final String dateTimeFormat;
    private final String timeOnlyFormat;
@@ -74,6 +77,7 @@ class TimeFormatter {

            if (sLocale == null || !(locale.equals(sLocale))) {
                sLocale = locale;
                sDateFormatSymbols = DateFormat.getIcuDateFormatSymbols(locale);
                sLocaleData = LocaleData.get(locale);

                Resources r = Resources.getSystem();
@@ -82,6 +86,7 @@ class TimeFormatter {
                sDateTimeFormat = r.getString(com.android.internal.R.string.date_and_time);
            }

            this.dateFormatSymbols = sDateFormatSymbols;
            this.dateTimeFormat = sDateTimeFormat;
            this.timeOnlyFormat = sTimeOnlyFormat;
            this.dateOnlyFormat = sDateOnlyFormat;
@@ -310,12 +315,14 @@ class TimeFormatter {
                    outputBuilder.append('\n');
                    return false;
                case 'p':
                    modifyAndAppend((wallTime.getHour() >= (HOURSPERDAY / 2)) ? localeData.amPm[1]
                            : localeData.amPm[0], modifier);
                    modifyAndAppend((wallTime.getHour() >= (HOURSPERDAY / 2))
                            ? dateFormatSymbols.getAmPmStrings()[1]
                            : dateFormatSymbols.getAmPmStrings()[0], modifier);
                    return false;
                case 'P':
                    modifyAndAppend((wallTime.getHour() >= (HOURSPERDAY / 2)) ? localeData.amPm[1]
                            : localeData.amPm[0], FORCE_LOWER_CASE);
                    modifyAndAppend((wallTime.getHour() >= (HOURSPERDAY / 2))
                            ? dateFormatSymbols.getAmPmStrings()[1]
                            : dateFormatSymbols.getAmPmStrings()[0], FORCE_LOWER_CASE);
                    return false;
                case 'R':
                    formatInternal("%H:%M", wallTime, zoneInfoData);
+1 −3
Original line number Diff line number Diff line
@@ -29,8 +29,6 @@ import android.text.format.DateFormat;
import android.view.KeyEvent;
import android.view.View;

import libcore.icu.LocaleData;

import java.util.Collection;
import java.util.Locale;

@@ -228,7 +226,7 @@ public abstract class NumberKeyListener extends BaseKeyListener
        if (locale == null) {
            return false;
        }
        final String[] amPm = LocaleData.get(locale).amPm;
        final String[] amPm = DateFormat.getIcuDateFormatSymbols(locale).getAmPmStrings();
        for (int i = 0; i < amPm.length; i++) {
            for (int j = 0; j < amPm[i].length(); j++) {
                final char ch = amPm[i].charAt(j);
+7 −5
Original line number Diff line number Diff line
@@ -24,9 +24,11 @@ import android.annotation.Widget;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
import android.icu.text.DateFormatSymbols;
import android.icu.util.Calendar;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.util.Log;
import android.util.MathUtils;
@@ -39,8 +41,6 @@ import android.view.inspector.InspectableProperty;

import com.android.internal.R;

import libcore.icu.LocaleData;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Locale;
@@ -421,11 +421,13 @@ public class TimePicker extends FrameLayout {

    static String[] getAmPmStrings(Context context) {
        final Locale locale = context.getResources().getConfiguration().locale;
        final LocaleData d = LocaleData.get(locale);
        DateFormatSymbols dfs = DateFormat.getIcuDateFormatSymbols(locale);
        String[] amPm = dfs.getAmPmStrings();
        String[] narrowAmPm = dfs.getAmpmNarrowStrings();

        final String[] result = new String[2];
        result[0] = d.amPm[0].length() > 4 ? d.narrowAm : d.amPm[0];
        result[1] = d.amPm[1].length() > 4 ? d.narrowPm : d.amPm[1];
        result[0] = amPm[0].length() > 4 ? narrowAmPm[0] : amPm[0];
        result[1] = amPm[1].length() > 4 ? narrowAmPm[1] : amPm[1];
        return result;
    }

Loading