Merge "[Use] Replace settings LocalePreference with androidx LocalePreference" into udc-dev
diff --git a/src/com/android/settings/regionalpreferences/FirstDayOfWeekController.java b/src/com/android/settings/regionalpreferences/FirstDayOfWeekController.java
index 1ebd166..574e62f 100644
--- a/src/com/android/settings/regionalpreferences/FirstDayOfWeekController.java
+++ b/src/com/android/settings/regionalpreferences/FirstDayOfWeekController.java
@@ -19,6 +19,8 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import androidx.core.text.util.LocalePreferences;
+
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 
diff --git a/src/com/android/settings/regionalpreferences/LocalePreferences.java b/src/com/android/settings/regionalpreferences/LocalePreferences.java
deleted file mode 100644
index 2006221..0000000
--- a/src/com/android/settings/regionalpreferences/LocalePreferences.java
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.regionalpreferences;
-import android.icu.number.LocalizedNumberFormatter;
-import android.icu.number.NumberFormatter;
-import android.icu.text.DateFormat;
-import android.icu.text.DateTimePatternGenerator;
-import android.icu.util.MeasureUnit;
-import android.os.Build.VERSION;
-
-import androidx.annotation.DoNotInline;
-import androidx.annotation.NonNull;
-import androidx.annotation.OptIn;
-import androidx.annotation.RestrictTo;
-import androidx.annotation.StringDef;
-import androidx.core.os.BuildCompat;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Locale;
-import java.util.Locale.Category;
-
-/**
- * TODO(b/263861083) This is a temp file and will replace it to Androidx version.
- * Provides friendly APIs to get the user's locale preferences. The data can refer to
- * external/cldr/common/main/en.xml.
- */
-public final class LocalePreferences {
-    private static final String TAG = LocalePreferences.class.getSimpleName();
-
-    /** APIs to get the user's preference of the hour cycle. */
-    public static class HourCycle {
-        private static final String U_EXTENSION_OF_HOUR_CYCLE = "hc";
-
-        /** 12 Hour System (0-11) */
-        public static final String H11 = "h11";
-        /** 12 Hour System (1-12) */
-        public static final String H12 = "h12";
-        /** 24 Hour System (0-23) */
-        public static final String H23 = "h23";
-        /** 24 Hour System (1-24) */
-        public static final String H24 = "h24";
-        /** Default hour cycle for the locale */
-        public static final String DEFAULT = "";
-
-        /** @hide */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @StringDef({
-                H11,
-                H12,
-                H23,
-                H24,
-                DEFAULT
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface HourCycleTypes {
-        }
-
-        private HourCycle() {
-        }
-    }
-
-    /**
-     * Return the user's preference of the hour cycle which is from
-     * {@link Locale#getDefault(Locale.Category)}. The returned result is resolved and
-     * bases on the {@code Locale#getDefault(Locale.Category)}. E.g. "h23"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @HourCycle.HourCycleTypes
-    public static String getHourCycle() {
-        return getHourCycle(true);
-    }
-
-    /**
-     * Return the hour cycle setting of the inputted {@link Locale}. The returned result is resolved
-     * and bases on the inputted {@code Locale}.
-     * E.g. "h23"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @HourCycle.HourCycleTypes
-    public static String getHourCycle(@NonNull Locale locale) {
-        return getHourCycle(locale, true);
-    }
-
-    /**
-     * Return the user's preference of the hour cycle which is from
-     * {@link Locale#getDefault(Locale.Category)}. E.g. "h23"
-     *
-     * @param resolved If the {@code Locale#getDefault(Locale.Category)} contains hour cycle subtag,
-     *                 this argument is ignored. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain hour cycle subtag
-     *                 and the resolved argument is true, this function tries to find the default
-     *                 hour cycle for the {@code Locale#getDefault(Locale.Category)}. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain hour cycle subtag
-     *                 and the resolved argument is false, this function returns empty string
-     *                 i.e. HourCycle.Default.
-     * @return {@link HourCycle.HourCycleTypes} If the malformed hour cycle format was specified
-     * in the hour cycle subtag, e.g. en-US-u-hc-h32, this function returns empty string
-     * i.e. HourCycle.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @HourCycle.HourCycleTypes
-    public static String getHourCycle(
-            boolean resolved) {
-        return getHourCycle(Api33Impl.getDefaultLocale(), resolved);
-    }
-
-    /**
-     * Return the hour cycle setting of the inputted {@link Locale}. E.g. "en-US-u-hc-h23".
-     *
-     * @param locale   The {@code Locale} to get the hour cycle.
-     * @param resolved If the given {@code Locale} contains hour cycle subtag, this argument is
-     *                 ignored. If the given {@code Locale} doesn't contain hour cycle subtag and
-     *                 the resolved argument is true, this function tries to find the default
-     *                 hour cycle for the given {@code Locale}. If the given {@code Locale} doesn't
-     *                 contain hour cycle subtag and the resolved argument is false, this function
-     *                 return empty string i.e. HourCycle.Default.
-     * @return {@link HourCycle.HourCycleTypes} If the malformed hour cycle format was specified
-     * in the hour cycle subtag, e.g. en-US-u-hc-h32, this function returns empty string
-     * i.e. HourCycle.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @HourCycle.HourCycleTypes
-    public static String getHourCycle(@NonNull Locale locale, boolean resolved) {
-        if (!BuildCompat.isAtLeastT()) {
-            throw new IllegalArgumentException("not a valid extension: " + VERSION.SDK_INT);
-        }
-        return Api33Impl.getHourCycle(locale, resolved);
-    }
-
-    /** APIs to get the user's preference of Calendar. */
-    public static class CalendarType {
-        private static final String U_EXTENSION_OF_CALENDAR = "ca";
-        /** Chinese Calendar */
-        public static final String CHINESE = "chinese";
-        /** Dangi Calendar (Korea Calendar) */
-        public static final String DANGI = "dangi";
-        /** Gregorian Calendar */
-        public static final String GREGORIAN = "gregorian";
-        /** Hebrew Calendar */
-        public static final String HEBREW = "hebrew";
-        /** Indian National Calendar */
-        public static final String INDIAN = "indian";
-        /** Islamic Calendar */
-        public static final String ISLAMIC = "islamic";
-        /** Islamic Calendar (tabular, civil epoch) */
-        public static final String ISLAMIC_CIVIL = "islamic-civil";
-        /** Islamic Calendar (Saudi Arabia, sighting) */
-        public static final String ISLAMIC_RGSA = "islamic-rgsa";
-        /** Islamic Calendar (tabular, astronomical epoch) */
-        public static final String ISLAMIC_TBLA = "islamic-tbla";
-        /** Islamic Calendar (Umm al-Qura) */
-        public static final String ISLAMIC_UMALQURA = "islamic-umalqura";
-        /** Persian Calendar */
-        public static final String PERSIAN = "persian";
-        /** Default calendar for the locale */
-        public static final String DEFAULT = "";
-
-        /** @hide */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @StringDef({
-                CHINESE,
-                DANGI,
-                GREGORIAN,
-                HEBREW,
-                INDIAN,
-                ISLAMIC,
-                ISLAMIC_CIVIL,
-                ISLAMIC_RGSA,
-                ISLAMIC_TBLA,
-                ISLAMIC_UMALQURA,
-                PERSIAN,
-                DEFAULT
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface CalendarTypes {
-        }
-
-        private CalendarType() {
-        }
-    }
-
-    /**
-     * Return the user's preference of the calendar type which is from {@link
-     * Locale#getDefault(Locale.Category)}. The returned result is resolved and bases on
-     * the {@code Locale#getDefault(Locale.Category)} settings. E.g. "chinese"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @CalendarType.CalendarTypes
-    public static String getCalendarType() {
-        return getCalendarType(true);
-    }
-
-    /**
-     * Return the calendar type of the inputted {@link Locale}. The returned result is resolved and
-     * bases on the inputted {@link Locale} settings.
-     * E.g. "chinese"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @CalendarType.CalendarTypes
-    public static String getCalendarType(@NonNull Locale locale) {
-        return getCalendarType(locale, true);
-    }
-
-    /**
-     * Return the user's preference of the calendar type which is from {@link
-     * Locale#getDefault(Locale.Category)}. E.g. "chinese"
-     *
-     * @param resolved If the {@code Locale#getDefault(Locale.Category)} contains calendar type
-     *                 subtag, this argument is ignored. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain calendar type
-     *                 subtag and the resolved argument is true, this function tries to find
-     *                 the default calendar type for the
-     *                 {@code Locale#getDefault(Locale.Category)}. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain calendar type
-     *                 subtag and the resolved argument is false, this function returns empty string
-     *                 i.e. CalendarTypes.Default.
-     * @return {@link CalendarType.CalendarTypes} If the malformed calendar type format was
-     * specified in the calendar type subtag, e.g. en-US-u-ca-calendar, this function returns
-     * empty string i.e. CalendarTypes.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @CalendarType.CalendarTypes
-    public static String getCalendarType(boolean resolved) {
-        return getCalendarType(Api33Impl.getDefaultLocale(), resolved);
-    }
-
-    /**
-     * Return the calendar type of the inputted {@link Locale}. E.g. "chinese"
-     *
-     * @param locale   The {@link Locale} to get the calendar type.
-     * @param resolved If the given {@code Locale} contains calendar type subtag, this argument is
-     *                 ignored. If the given {@code Locale} doesn't contain calendar type subtag and
-     *                 the resolved argument is true, this function tries to find the default
-     *                 calendar type for the given {@code Locale}. If the given {@code Locale}
-     *                 doesn't contain calendar type subtag and the resolved argument is false, this
-     *                 function return empty string i.e. CalendarTypes.Default.
-     * @return {@link CalendarType.CalendarTypes} If the malformed calendar type format was
-     * specified in the calendar type subtag, e.g. en-US-u-ca-calendar, this function returns
-     * empty string i.e. CalendarTypes.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @CalendarType.CalendarTypes
-    public static String getCalendarType(@NonNull Locale locale, boolean resolved) {
-        if (!BuildCompat.isAtLeastT()) {
-            throw new IllegalArgumentException("not a valid extension: " + VERSION.SDK_INT);
-        }
-        return Api33Impl.getCalendarType(locale, resolved);
-    }
-
-    /** APIs to get the user's preference of temperature unit. */
-    public static class TemperatureUnit {
-        private static final String U_EXTENSION_OF_TEMPERATURE_UNIT = "mu";
-        /** Celsius */
-        public static final String CELSIUS = "celsius";
-        /** Fahrenheit */
-        public static final String FAHRENHEIT = "fahrenhe";
-        /** Kelvin */
-        public static final String KELVIN = "kelvin";
-        /** Default Temperature for the locale */
-        public static final String DEFAULT = "";
-
-        /** @hide */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @StringDef({
-                CELSIUS,
-                FAHRENHEIT,
-                KELVIN,
-                DEFAULT
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface TemperatureUnits {
-        }
-
-        private TemperatureUnit() {
-        }
-    }
-
-    /**
-     * Return the user's preference of the temperature unit which is from {@link
-     * Locale#getDefault(Locale.Category)}. The returned result is resolved and bases on the
-     * {@code Locale#getDefault(Locale.Category)} settings. E.g. "fahrenhe"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @TemperatureUnit.TemperatureUnits
-    public static String getTemperatureUnit() {
-        return getTemperatureUnit(true);
-    }
-
-    /**
-     * Return the temperature unit of the inputted {@link Locale}. The returned result is resolved
-     * and bases on the inputted {@code Locale} settings. E.g. "fahrenhe"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @TemperatureUnit.TemperatureUnits
-    public static String getTemperatureUnit(
-            @NonNull Locale locale) {
-        return getTemperatureUnit(locale, true);
-    }
-
-    /**
-     * Return the user's preference of the temperature unit which is from {@link
-     * Locale#getDefault(Locale.Category)}. E.g. "fahrenhe"
-     *
-     * @param resolved If the {@code Locale#getDefault(Locale.Category)} contains temperature unit
-     *                 subtag, this argument is ignored. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain temperature unit
-     *                 subtag and the resolved argument is true, this function tries to find
-     *                 the default temperature unit for the
-     *                 {@code Locale#getDefault(Locale.Category)}. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain temperature unit
-     *                 subtag and the resolved argument is false, this function returns empty string
-     *                 i.e. TemperatureUnits.Default.
-     * @return {@link TemperatureUnit.TemperatureUnits} If the malformed temperature unit format was
-     * specified in the temperature unit subtag, e.g. en-US-u-mu-temperature, this function returns
-     * empty string i.e. TemperatureUnits.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @TemperatureUnit.TemperatureUnits
-    public static String getTemperatureUnit(boolean resolved) {
-        return getTemperatureUnit(Api33Impl.getDefaultLocale(), resolved);
-    }
-
-    /**
-     * Return the temperature unit of the inputted {@link Locale}. E.g. "fahrenheit"
-     *
-     * @param locale   The {@link Locale} to get the temperature unit.
-     * @param resolved If the given {@code Locale} contains temperature unit subtag, this argument
-     *                 is ignored. If the given {@code Locale} doesn't contain temperature unit
-     *                 subtag and the resolved argument is true, this function tries to find
-     *                 the default temperature unit for the given {@code Locale}. If the given
-     *                 {@code Locale} doesn't contain temperature unit subtag and the resolved
-     *                 argument is false, this function return empty string
-     *                 i.e. TemperatureUnits.Default.
-     * @return {@link TemperatureUnit.TemperatureUnits} If the malformed temperature unit format was
-     * specified in the temperature unit subtag, e.g. en-US-u-mu-temperature, this function returns
-     * empty string i.e. TemperatureUnits.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @TemperatureUnit.TemperatureUnits
-    public static String getTemperatureUnit(@NonNull Locale locale, boolean resolved) {
-        if (!BuildCompat.isAtLeastT()) {
-            throw new IllegalArgumentException("not a valid extension: " + VERSION.SDK_INT);
-        }
-        return Api33Impl.getTemperatureUnit(locale, resolved);
-    }
-
-    /** APIs to get the user's preference of the first day of week. */
-    public static class FirstDayOfWeek {
-        private static final String U_EXTENSION_OF_FIRST_DAY_OF_WEEK = "fw";
-        /** Sunday */
-        public static final String SUNDAY = "sun";
-        /** Monday */
-        public static final String MONDAY = "mon";
-        /** Tuesday */
-        public static final String TUESDAY = "tue";
-        /** Wednesday */
-        public static final String WEDNESDAY = "wed";
-        /** Thursday */
-        public static final String THURSDAY = "thu";
-        /** Friday */
-        public static final String FRIDAY = "fri";
-        /** Saturday */
-        public static final String SATURDAY = "sat";
-        /** Default first day of week for the locale */
-        public static final String DEFAULT = "";
-
-        /** @hide */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @StringDef({
-                SUNDAY,
-                MONDAY,
-                TUESDAY,
-                WEDNESDAY,
-                THURSDAY,
-                FRIDAY,
-                SATURDAY,
-                DEFAULT
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface Days {
-        }
-
-        private FirstDayOfWeek() {
-        }
-    }
-
-    /**
-     * Return the user's preference of the first day of week which is from
-     * {@link Locale#getDefault(Locale.Category)}. The returned result is resolved and bases on the
-     * {@code Locale#getDefault(Locale.Category)} settings. E.g. "sun"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @FirstDayOfWeek.Days
-    public static String getFirstDayOfWeek() {
-        return getFirstDayOfWeek(true);
-    }
-
-    /**
-     * Return the first day of week of the inputted {@link Locale}. The returned result is resolved
-     * and bases on the inputted {@code Locale} settings.
-     * E.g. "sun"
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    public static @FirstDayOfWeek.Days String getFirstDayOfWeek(@NonNull Locale locale) {
-        return getFirstDayOfWeek(locale, true);
-    }
-
-    /**
-     * Return the user's preference of the first day of week which is from {@link
-     * Locale#getDefault(Locale.Category)}. E.g. "sun"
-     *
-     * @param resolved If the {@code Locale#getDefault(Locale.Category)} contains first day of week
-     *                 subtag, this argument is ignored. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain first day of week
-     *                 subtag and the resolved argument is true, this function tries to find
-     *                 the default first day of week for the
-     *                 {@code Locale#getDefault(Locale.Category)}. If the
-     *                 {@code Locale#getDefault(Locale.Category)} doesn't contain first day of week
-     *                 subtag and the resolved argument is false, this function returns empty string
-     *                 i.e. Days.Default.
-     * @return {@link FirstDayOfWeek.Days} If the malformed first day of week format was specified
-     * in the first day of week subtag, e.g. en-US-u-fw-days, this function returns empty string
-     * i.e. Days.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @FirstDayOfWeek.Days
-    public static String getFirstDayOfWeek(boolean resolved) {
-        return getFirstDayOfWeek(Api33Impl.getDefaultLocale(), resolved);
-    }
-
-    /**
-     * Return the first day of week of the inputted {@link Locale}. E.g. "sun"
-     *
-     * @param locale   The {@link Locale} to get the first day of week.
-     * @param resolved If the given {@code Locale} contains first day of week subtag, this argument
-     *                 is ignored. If the given {@code Locale} doesn't contain first day of week
-     *                 subtag and the resolved argument is true, this function tries to find
-     *                 the default first day of week for the given {@code Locale}. If the given
-     *                 {@code Locale} doesn't contain first day of week subtag and the resolved
-     *                 argument is false, this function return empty string i.e. Days.Default.
-     * @return {@link FirstDayOfWeek.Days} If the malformed first day of week format was
-     * specified in the first day of week subtag, e.g. en-US-u-fw-days, this function returns
-     * empty string i.e. Days.Default.
-     */
-    @NonNull
-    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
-    @FirstDayOfWeek.Days
-    public static String getFirstDayOfWeek(
-            @NonNull Locale locale, boolean resolved) {
-        if (!BuildCompat.isAtLeastT()) {
-            throw new IllegalArgumentException("not a valid extension: " + VERSION.SDK_INT);
-        }
-
-        return Api33Impl.getFirstDayOfWeek(locale, resolved);
-    }
-
-    private static class Api33Impl {
-        @DoNotInline
-        @HourCycle.HourCycleTypes
-        static String getHourCycle(@NonNull Locale locale,
-                boolean resolved) {
-            String hc = locale.getUnicodeLocaleType(HourCycle.U_EXTENSION_OF_HOUR_CYCLE);
-            if (hc != null) {
-                return hc;
-            }
-            if (!resolved) {
-                return HourCycle.DEFAULT;
-            }
-
-            return getHourCycleType(
-                    DateTimePatternGenerator.getInstance(locale).getDefaultHourCycle());
-
-        }
-
-        @DoNotInline
-        @CalendarType.CalendarTypes
-        static String getCalendarType(@NonNull Locale locale, boolean resolved) {
-            String ca = locale.getUnicodeLocaleType(CalendarType.U_EXTENSION_OF_CALENDAR);
-            if (ca != null) {
-                return ca;
-            }
-            if (!resolved) {
-                return CalendarType.DEFAULT;
-            }
-
-            return android.icu.util.Calendar.getInstance(locale).getType();
-        }
-
-        @DoNotInline
-        @TemperatureUnit.TemperatureUnits
-        static String getTemperatureUnit(@NonNull Locale locale, boolean resolved) {
-            String mu =
-                    locale.getUnicodeLocaleType(TemperatureUnit.U_EXTENSION_OF_TEMPERATURE_UNIT);
-            if (mu != null) {
-                return mu;
-            }
-            if (!resolved) {
-                return TemperatureUnit.DEFAULT;
-            }
-
-            return getResolvedTemperatureUnit(locale);
-        }
-
-        @DoNotInline
-        @FirstDayOfWeek.Days
-        static String getFirstDayOfWeek(@NonNull Locale locale, boolean resolved) {
-            String mu =
-                    locale.getUnicodeLocaleType(FirstDayOfWeek.U_EXTENSION_OF_FIRST_DAY_OF_WEEK);
-            if (mu != null) {
-                return mu;
-            }
-            if (!resolved) {
-                return FirstDayOfWeek.DEFAULT;
-            }
-            // TODO(b/262294472) Use {@code android.icu.util.Calendar} instead of
-            //  {@code java.util.Calendar}.
-            return getStringOfFirstDayOfWeek(
-                    java.util.Calendar.getInstance(locale).getFirstDayOfWeek());
-        }
-
-        @DoNotInline
-        static Locale getDefaultLocale() {
-            return Locale.getDefault(Category.FORMAT);
-        }
-
-        private static String getStringOfFirstDayOfWeek(int fw) {
-            String[] arrDays = {
-                    FirstDayOfWeek.SUNDAY,
-                    FirstDayOfWeek.MONDAY,
-                    FirstDayOfWeek.TUESDAY,
-                    FirstDayOfWeek.WEDNESDAY,
-                    FirstDayOfWeek.THURSDAY,
-                    FirstDayOfWeek.FRIDAY,
-                    FirstDayOfWeek.SATURDAY};
-
-            return fw >= 1 && fw <= 7 ? arrDays[fw - 1] : FirstDayOfWeek.DEFAULT;
-        }
-
-        @HourCycle.HourCycleTypes
-        private static String getHourCycleType(
-                DateFormat.HourCycle hourCycle) {
-            switch (hourCycle) {
-                case HOUR_CYCLE_11:
-                    return HourCycle.H11;
-                case HOUR_CYCLE_12:
-                    return HourCycle.H12;
-                case HOUR_CYCLE_23:
-                    return HourCycle.H23;
-                case HOUR_CYCLE_24:
-                    return HourCycle.H24;
-                default:
-                    return HourCycle.DEFAULT;
-            }
-        }
-
-        @TemperatureUnit.TemperatureUnits
-        private static String getResolvedTemperatureUnit(@NonNull Locale locale) {
-            LocalizedNumberFormatter nf = NumberFormatter.with()
-                    .usage("temperature")
-                    .unit(MeasureUnit.CELSIUS)
-                    .locale(locale);
-            String unit = nf.format(1).getOutputUnit().getIdentifier();
-            if (unit.contains(TemperatureUnit.FAHRENHEIT)) {
-                return TemperatureUnit.FAHRENHEIT;
-            }
-            return unit;
-        }
-
-        private Api33Impl() {
-        }
-    }
-
-    private LocalePreferences() {
-    }
-}
diff --git a/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtils.java b/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtils.java
index 32e00b4..d1ae40b 100644
--- a/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtils.java
+++ b/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtils.java
@@ -22,6 +22,8 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 
+import androidx.core.text.util.LocalePreferences;
+
 import com.android.internal.app.LocalePicker;
 import com.android.settings.R;
 
diff --git a/src/com/android/settings/regionalpreferences/TemperatureUnitController.java b/src/com/android/settings/regionalpreferences/TemperatureUnitController.java
index 9fbf69b..4b0f22c 100644
--- a/src/com/android/settings/regionalpreferences/TemperatureUnitController.java
+++ b/src/com/android/settings/regionalpreferences/TemperatureUnitController.java
@@ -19,6 +19,8 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import androidx.core.text.util.LocalePreferences;
+
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtilsTest.java b/tests/unit/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtilsTest.java
index 85272e4..c9571be 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtilsTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/RegionalPreferencesDataUtilsTest.java
@@ -22,6 +22,7 @@
 import android.os.LocaleList;
 import android.provider.Settings;
 
+import androidx.core.text.util.LocalePreferences;
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.internal.app.LocalePicker;