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 1701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanupackage android.support.v4.os; 1801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 1901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanuimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; 2001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 2101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanuimport android.support.annotation.RestrictTo; 2201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 2301f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanuimport java.util.Locale; 2401f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 2501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu/** 2601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu * Helper to deal with new {@link Locale} APIs in a backwards compatible fashion. 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("-")) { 3601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu String[] args = str.split("-"); 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("_")) { 4501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu String[] args = str.split("_"); 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(); 6501f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu if (country != null && !country.equals("")) { 6601f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu buf.append("-"); 6701f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu buf.append(locale.getCountry()); 6801f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 6901f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu 7001f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu return buf.toString(); 7101f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu } 7201f7e32cdf00e64181661c34a3190b70ad4c79afAndrei Stingaceanu} 73