Better handling of empty/incomplete content stream
[zxing.git] / android / src / com / google / zxing / client / android / LocaleManager.java
1 /*
2  * Copyright (C) 2008 ZXing authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.google.zxing.client.android;
18
19 import java.util.Locale;
20 import java.util.Map;
21 import java.util.HashMap;
22
23 /**
24  * Handles any locale-specific logic for the client.
25  *
26  * @author Sean Owen
27  */
28 public final class LocaleManager {
29   private static final String DEFAULT_TLD = "com";
30   private static final Map<Locale,String> GOOGLE_COUNTRY_TLD;
31   static {
32     GOOGLE_COUNTRY_TLD = new HashMap<Locale,String>();
33     GOOGLE_COUNTRY_TLD.put(Locale.CANADA, "ca");
34     GOOGLE_COUNTRY_TLD.put(Locale.CHINA, "cn");
35     GOOGLE_COUNTRY_TLD.put(Locale.FRANCE, "fr");
36     GOOGLE_COUNTRY_TLD.put(Locale.GERMANY, "de");
37     GOOGLE_COUNTRY_TLD.put(Locale.ITALY, "it");
38     GOOGLE_COUNTRY_TLD.put(Locale.JAPAN, "co.jp");
39     GOOGLE_COUNTRY_TLD.put(Locale.KOREA, "co.kr");
40     GOOGLE_COUNTRY_TLD.put(Locale.TAIWAN, "de");
41     GOOGLE_COUNTRY_TLD.put(Locale.UK, "co.uk");
42   }
43
44   // Google Product Search for mobile is available in fewer countries than web search.
45   private static final Map<Locale,String> GOOGLE_PRODUCT_SEARCH_COUNTRY_TLD;
46   static {
47     GOOGLE_PRODUCT_SEARCH_COUNTRY_TLD = new HashMap<Locale,String>();
48     GOOGLE_PRODUCT_SEARCH_COUNTRY_TLD.put(Locale.UK, "co.uk");
49     GOOGLE_PRODUCT_SEARCH_COUNTRY_TLD.put(Locale.GERMANY, "de");
50   }
51
52   private static final Map<Locale,String> GOOGLE_BOOK_SEARCH_COUNTRY_TLD;
53   static {
54     GOOGLE_BOOK_SEARCH_COUNTRY_TLD = new HashMap<Locale,String>();
55     GOOGLE_BOOK_SEARCH_COUNTRY_TLD.putAll(GOOGLE_COUNTRY_TLD);
56     GOOGLE_BOOK_SEARCH_COUNTRY_TLD.remove(Locale.CHINA);
57   }
58
59   private LocaleManager() {}
60
61   /**
62    * @return country-specific TLD suffix appropriate for the current default locale
63    *  (e.g. "co.uk" for the United Kingdom)
64    */
65   public static String getCountryTLD() {
66     return doGetTLD(GOOGLE_COUNTRY_TLD);
67   }
68
69   /**
70    * The same as above, but specifically for Google Product Search.
71    * @return The top-level domain to use.
72    */
73   public static String getProductSearchCountryTLD() {
74     return doGetTLD(GOOGLE_PRODUCT_SEARCH_COUNTRY_TLD);
75   }
76
77   /**
78    * The same as above, but specifically for Google Book Search.
79    * @return The top-level domain to use.
80    */
81   public static String getBookSearchCountryTLD() {
82     return doGetTLD(GOOGLE_BOOK_SEARCH_COUNTRY_TLD);
83   }
84
85
86   private static String doGetTLD(Map<Locale,String> map) {
87     Locale locale = Locale.getDefault();
88     if (locale == null) {
89       return DEFAULT_TLD;
90     }
91     String tld = map.get(locale);
92     if (tld == null) {
93       return DEFAULT_TLD;
94     }
95     return tld;
96   }
97 }