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

Commit da5838aa authored by vichang's avatar vichang Committed by Automerger Merge Worker
Browse files

Merge "Use DateFormatSymbols directly instead of using LocaleData" am: 3bd9f08a

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

Change-Id: Ie21a4ad21d4af2417f7495039582938a124403f5
parents c3fb05c1 3bd9f08a
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