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