1 /* GENERATED SOURCE. DO NOT MODIFY. */ 2 // 2016 and later: Unicode, Inc. and others. 3 // License & terms of use: http://www.unicode.org/copyright.html#License 4 /* 5 ******************************************************************************* 6 * Copyright (C) 2009-2016, International Business Machines Corporation and 7 * others. All Rights Reserved. 8 ******************************************************************************* 9 */ 10 package android.icu.impl; 11 12 import java.util.Collections; 13 import java.util.Map; 14 15 import android.icu.text.CurrencyDisplayNames; 16 import android.icu.text.DecimalFormatSymbols; 17 import android.icu.util.ULocale; 18 19 /** 20 * @hide Only a subset of ICU is exposed in Android 21 */ 22 public class CurrencyData { 23 public static final CurrencyDisplayInfoProvider provider; 24 25 private CurrencyData() {} 26 27 public static interface CurrencyDisplayInfoProvider { 28 CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback); 29 boolean hasData(); 30 } 31 32 public static abstract class CurrencyDisplayInfo extends CurrencyDisplayNames { 33 public abstract Map<String, String> getUnitPatterns(); 34 public abstract CurrencyFormatInfo getFormatInfo(String isoCode); 35 public abstract CurrencySpacingInfo getSpacingInfo(); 36 } 37 38 public static final class CurrencyFormatInfo { 39 public final String currencyPattern; 40 public final String monetarySeparator; 41 public final String monetaryGroupingSeparator; 42 43 public CurrencyFormatInfo(String currencyPattern, String monetarySeparator, 44 String monetaryGroupingSeparator) { 45 this.currencyPattern = currencyPattern; 46 this.monetarySeparator = monetarySeparator; 47 this.monetaryGroupingSeparator = monetaryGroupingSeparator; 48 } 49 } 50 51 public static final class CurrencySpacingInfo { 52 private final String[][] symbols = new String[SpacingType.COUNT.ordinal()][SpacingPattern.COUNT.ordinal()]; 53 54 public static enum SpacingType { BEFORE, AFTER, COUNT }; 55 public static enum SpacingPattern { 56 CURRENCY_MATCH(DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH), 57 SURROUNDING_MATCH(DecimalFormatSymbols.CURRENCY_SPC_SURROUNDING_MATCH), 58 INSERT_BETWEEN(DecimalFormatSymbols.CURRENCY_SPC_INSERT), 59 COUNT; 60 61 SpacingPattern() {} 62 SpacingPattern(int value) { assert value == ordinal(); } 63 }; 64 65 public CurrencySpacingInfo() {} 66 67 public CurrencySpacingInfo(String... strings) { 68 assert strings.length == 6; 69 70 int k = 0; 71 for (int i=0; i<SpacingType.COUNT.ordinal(); i++) { 72 for (int j=0; j<SpacingPattern.COUNT.ordinal(); j++) { 73 symbols[i][j] = strings[k]; 74 k++; 75 } 76 } 77 } 78 79 public void setSymbolIfNull(SpacingType type, SpacingPattern pattern, String value) { 80 int i = type.ordinal(); 81 int j = pattern.ordinal(); 82 if (symbols[i][j] == null) { 83 symbols[i][j] = value; 84 } 85 } 86 87 public String[] getBeforeSymbols() { 88 return symbols[SpacingType.BEFORE.ordinal()]; 89 } 90 91 public String[] getAfterSymbols() { 92 return symbols[SpacingType.AFTER.ordinal()]; 93 } 94 95 private static final String DEFAULT_CUR_MATCH = "[:letter:]"; 96 private static final String DEFAULT_CTX_MATCH = "[:digit:]"; 97 private static final String DEFAULT_INSERT = " "; 98 99 public static final CurrencySpacingInfo DEFAULT = new CurrencySpacingInfo( 100 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT, 101 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT); 102 } 103 104 static { 105 CurrencyDisplayInfoProvider temp = null; 106 try { 107 Class<?> clzz = Class.forName("android.icu.impl.ICUCurrencyDisplayInfoProvider"); 108 temp = (CurrencyDisplayInfoProvider) clzz.newInstance(); 109 } catch (Throwable t) { 110 temp = new CurrencyDisplayInfoProvider() { 111 @Override 112 public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) { 113 return DefaultInfo.getWithFallback(withFallback); 114 } 115 116 @Override 117 public boolean hasData() { 118 return false; 119 } 120 }; 121 } 122 provider = temp; 123 } 124 125 public static class DefaultInfo extends CurrencyDisplayInfo { 126 private final boolean fallback; 127 128 private DefaultInfo(boolean fallback) { 129 this.fallback = fallback; 130 } 131 132 public static final CurrencyDisplayInfo getWithFallback(boolean fallback) { 133 return fallback ? FALLBACK_INSTANCE : NO_FALLBACK_INSTANCE; 134 } 135 136 @Override 137 public String getName(String isoCode) { 138 return fallback ? isoCode : null; 139 } 140 141 @Override 142 public String getPluralName(String isoCode, String pluralType) { 143 return fallback ? isoCode : null; 144 } 145 146 @Override 147 public String getSymbol(String isoCode) { 148 return fallback ? isoCode : null; 149 } 150 151 @Override 152 public Map<String, String> symbolMap() { 153 return Collections.emptyMap(); 154 } 155 156 @Override 157 public Map<String, String> nameMap() { 158 return Collections.emptyMap(); 159 } 160 161 @Override 162 public ULocale getULocale() { 163 return ULocale.ROOT; 164 } 165 166 @Override 167 public Map<String, String> getUnitPatterns() { 168 if (fallback) { 169 return Collections.emptyMap(); 170 } 171 return null; 172 } 173 174 @Override 175 public CurrencyFormatInfo getFormatInfo(String isoCode) { 176 return null; 177 } 178 179 @Override 180 public CurrencySpacingInfo getSpacingInfo() { 181 return fallback ? CurrencySpacingInfo.DEFAULT : null; 182 } 183 184 private static final CurrencyDisplayInfo FALLBACK_INSTANCE = new DefaultInfo(true); 185 private static final CurrencyDisplayInfo NO_FALLBACK_INSTANCE = new DefaultInfo(false); 186 } 187 } 188