1857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta/*
2857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Copyright (C) 2014 The Android Open Source Project
3857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta *
4857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * you may not use this file except in compliance with the License.
6857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * You may obtain a copy of the License at
7857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta *
8857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta *
10857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software
11857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * See the License for the specific language governing permissions and
14857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * limitations under the License.
15857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta */
16857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta
175cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Guptapackage com.android.layoutlib.bridge.android;
18857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta
1982c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Guptaimport com.android.layoutlib.bridge.impl.RenderAction;
2082c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta
21d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Guptaimport android.icu.util.ULocale;
22857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta
23d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Guptaimport java.util.Locale;
24857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta
25857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta/**
265cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * This class provides an alternate implementation for {@code java.util.Locale#toLanguageTag}
275cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * which is only available after Java 6.
28857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta *
295cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * The create tool re-writes references to the above mentioned method to this one. Hence it's
305cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * imperative that this class is not deleted unless the create tool is modified.
31857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta */
325cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta@SuppressWarnings("UnusedDeclaration")
335cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Guptapublic class AndroidLocale {
34857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta
355cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta    public static String toLanguageTag(Locale locale)  {
36857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta        return ULocale.forLocale(locale).toLanguageTag();
37857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta    }
38b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta
39b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    public static String adjustLanguageCode(String languageCode) {
40b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        String adjusted = languageCode.toLowerCase(Locale.US);
41b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        // Map new language codes to the obsolete language
42b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        // codes so the correct resource bundles will be used.
43b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        if (languageCode.equals("he")) {
44b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta            adjusted = "iw";
45b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        } else if (languageCode.equals("id")) {
46b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta            adjusted = "in";
47b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        } else if (languageCode.equals("yi")) {
48b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta            adjusted = "ji";
49b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        }
50b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta
51b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        return adjusted;
52b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    }
53b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta
54b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    public static Locale forLanguageTag(String tag) {
55b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        return ULocale.forLanguageTag(tag).toLocale();
56b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    }
57b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta
58b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    public static String getScript(Locale locale) {
59b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta        return ULocale.forLocale(locale).getScript();
60b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta    }
6182c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta
6282c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta    public static Locale getDefault() {
6382c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta        BridgeContext context = RenderAction.getCurrentContext();
6482c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta        if (context != null) {
6582c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta            Locale locale = context.getConfiguration().locale;
6682c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta            if (locale != null) {
6782c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta                return locale;
6882c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta            }
6982c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta        }
7082c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta        return Locale.getDefault();
7182c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta    }
72857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta}
73