101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu/* 201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * Copyright (C) 2017 The Android Open Source Project 301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * 401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * Licensed under the Apache License, Version 2.0 (the "License"); 501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * you may not use this file except in compliance with the License. 601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * You may obtain a copy of the License at 701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * 801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * http://www.apache.org/licenses/LICENSE-2.0 901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * 1001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * Unless required by applicable law or agreed to in writing, software 1101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * distributed under the License is distributed on an "AS IS" BASIS, 1201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * See the License for the specific language governing permissions and 1401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * limitations under the License. 1501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu */ 1601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.core.os; 1801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; 2001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 21ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo; 2201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 2301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanuimport java.util.Locale; 2401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 2501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu/** 26645e5c8aa6b31961c5f73f3d30bb5261d5e04aebKirill Grouchnikov * Helper to deal with new {@link Locale} APIs. 2701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * 2801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * @hide 2901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu */ 3001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu@RestrictTo(LIBRARY_GROUP) 3101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanufinal class LocaleHelper { 3201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 3301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu // Simpleton implementation for Locale.forLanguageTag(...) 3401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu static Locale forLanguageTag(String str) { 3501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu if (str.contains("-")) { 36244232024786c3715124b4488fd48722f10c22fbAurimas Liutikas String[] args = str.split("-", -1); 3701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu if (args.length > 2) { 3801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0], args[1], args[2]); 3901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else if (args.length > 1) { 4001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0], args[1]); 4101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else if (args.length == 1) { 4201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0]); 4301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 4401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else if (str.contains("_")) { 45244232024786c3715124b4488fd48722f10c22fbAurimas Liutikas String[] args = str.split("_", -1); 4601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu if (args.length > 2) { 4701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0], args[1], args[2]); 4801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else if (args.length > 1) { 4901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0], args[1]); 5001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else if (args.length == 1) { 5101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(args[0]); 5201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 5301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } else { 5401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return new Locale(str); 5501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 5601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 5701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu throw new IllegalArgumentException("Can not parse language tag: [" + str + "]"); 5801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 5901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 6001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu // Simpleton implementation for Locale.toLanguageTag(...) 6101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu static String toLanguageTag(Locale locale) { 6201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu StringBuilder buf = new StringBuilder(); 6301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu buf.append(locale.getLanguage()); 6401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu final String country = locale.getCountry(); 65a952a61ad2cb360aa00285f1ce33fc5bedbf376dAurimas Liutikas if (country != null && !country.isEmpty()) { 6601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu buf.append("-"); 6701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu buf.append(locale.getCountry()); 6801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 6901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 7001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return buf.toString(); 7101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 720f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton 730f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton private LocaleHelper() { 740f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton } 7501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu} 76