| /* |
| * Copyright (C) 2023 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.content.Context; |
| import android.icu.util.ULocale; |
| import android.os.LocaleList; |
| 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; |
| |
| import java.util.Locale; |
| |
| /** Provides utils for regional preferences. */ |
| public class RegionalPreferencesDataUtils { |
| static final String DEFAULT_VALUE = "default"; |
| |
| static String getDefaultUnicodeExtensionData(Context contxt, String type) { |
| // 1. Check cache data in Settings provider. |
| String record = Settings.System.getString( |
| contxt.getContentResolver(), Settings.System.LOCALE_PREFERENCES); |
| String result = ""; |
| |
| if (!TextUtils.isEmpty(record)) { |
| result = Locale.forLanguageTag(record).getUnicodeLocaleType(type); |
| } |
| // 2. Check cache data in default Locale(ICU lib). |
| if (TextUtils.isEmpty(result)) { |
| result = Locale.getDefault(Locale.Category.FORMAT).getUnicodeLocaleType(type); |
| } |
| |
| return result == null ? DEFAULT_VALUE : result; |
| } |
| |
| static void savePreference(Context context, String type, String value) { |
| saveToSettingsProvider(context, type, value); |
| saveToSystem(type, value); |
| } |
| |
| private static void saveToSettingsProvider(Context context, String type, String value) { |
| String record = Settings.System.getString( |
| context.getContentResolver(), Settings.System.LOCALE_PREFERENCES); |
| |
| record = record == null ? "" : record; |
| |
| Settings.System.putString( |
| context.getContentResolver(), |
| Settings.System.LOCALE_PREFERENCES, |
| addUnicodeKeywordToLocale(record, type, value).toLanguageTag()); |
| } |
| |
| private static void saveToSystem(String type, String value) { |
| LocaleList localeList = LocaleList.getDefault(); |
| Locale[] resultLocales = new Locale[localeList.size()]; |
| for (int i = 0; i < localeList.size(); i++) { |
| resultLocales[i] = addUnicodeKeywordToLocale(localeList.get(i), type, value); |
| } |
| LocalePicker.updateLocales(new LocaleList(resultLocales)); |
| } |
| |
| private static Locale addUnicodeKeywordToLocale(Locale locale, String type, String value) { |
| return new Locale.Builder() |
| .setLocale(locale) |
| .setUnicodeLocaleKeyword(type, value) |
| .build(); |
| } |
| |
| private static Locale addUnicodeKeywordToLocale(String languageTag, String type, String value) { |
| return addUnicodeKeywordToLocale(Locale.forLanguageTag(languageTag), type, value); |
| } |
| |
| static String temperatureUnitsConverter(Context context, String unit) { |
| switch (unit) { |
| case LocalePreferences.TemperatureUnit.CELSIUS: |
| return context.getString(R.string.celsius_temperature_unit); |
| case LocalePreferences.TemperatureUnit.FAHRENHEIT: |
| return context.getString(R.string.fahrenheit_temperature_unit); |
| default: |
| return context.getString(R.string.default_string_of_regional_preference); |
| } |
| } |
| |
| static String dayConverter(Context context, String day) { |
| switch (day) { |
| case LocalePreferences.FirstDayOfWeek.MONDAY: |
| return context.getString(R.string.monday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.TUESDAY: |
| return context.getString(R.string.tuesday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.WEDNESDAY: |
| return context.getString(R.string.wednesday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.THURSDAY: |
| return context.getString(R.string.thursday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.FRIDAY: |
| return context.getString(R.string.friday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.SATURDAY: |
| return context.getString(R.string.saturday_first_day_of_week); |
| case LocalePreferences.FirstDayOfWeek.SUNDAY: |
| return context.getString(R.string.sunday_first_day_of_week); |
| default: |
| return context.getString(R.string.default_string_of_regional_preference); |
| } |
| } |
| } |