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 public abstract String getNarrowSymbol(String isoCode); 37 } 38 39 public static final class CurrencyFormatInfo { 40 public final String isoCode; 41 public final String currencyPattern; 42 public final String monetaryDecimalSeparator; 43 public final String monetaryGroupingSeparator; 44 45 public CurrencyFormatInfo(String isoCode, String currencyPattern, String monetarySeparator, 46 String monetaryGroupingSeparator) { 47 this.isoCode = isoCode; 48 this.currencyPattern = currencyPattern; 49 this.monetaryDecimalSeparator = monetarySeparator; 50 this.monetaryGroupingSeparator = monetaryGroupingSeparator; 51 } 52 } 53 54 public static final class CurrencySpacingInfo { 55 private final String[][] symbols = new String[SpacingType.COUNT.ordinal()][SpacingPattern.COUNT.ordinal()]; 56 57 public boolean hasBeforeCurrency = false; 58 public boolean hasAfterCurrency = false; 59 60 public static enum SpacingType { BEFORE, AFTER, COUNT }; 61 public static enum SpacingPattern { 62 CURRENCY_MATCH(DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH), 63 SURROUNDING_MATCH(DecimalFormatSymbols.CURRENCY_SPC_SURROUNDING_MATCH), 64 INSERT_BETWEEN(DecimalFormatSymbols.CURRENCY_SPC_INSERT), 65 COUNT; 66 67 SpacingPattern() {} 68 SpacingPattern(int value) { assert value == ordinal(); } 69 }; 70 71 public CurrencySpacingInfo() {} 72 73 public CurrencySpacingInfo(String... strings) { 74 assert strings.length == 6; 75 76 int k = 0; 77 for (int i=0; i<SpacingType.COUNT.ordinal(); i++) { 78 for (int j=0; j<SpacingPattern.COUNT.ordinal(); j++) { 79 symbols[i][j] = strings[k]; 80 k++; 81 } 82 } 83 } 84 85 public void setSymbolIfNull(SpacingType type, SpacingPattern pattern, String value) { 86 int i = type.ordinal(); 87 int j = pattern.ordinal(); 88 if (symbols[i][j] == null) { 89 symbols[i][j] = value; 90 } 91 } 92 93 public String[] getBeforeSymbols() { 94 return symbols[SpacingType.BEFORE.ordinal()]; 95 } 96 97 public String[] getAfterSymbols() { 98 return symbols[SpacingType.AFTER.ordinal()]; 99 } 100 101 private static final String DEFAULT_CUR_MATCH = "[:letter:]"; 102 private static final String DEFAULT_CTX_MATCH = "[:digit:]"; 103 private static final String DEFAULT_INSERT = " "; 104 105 public static final CurrencySpacingInfo DEFAULT = new CurrencySpacingInfo( 106 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT, 107 DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT); 108 } 109 110 static { 111 CurrencyDisplayInfoProvider temp = null; 112 try { 113 Class<?> clzz = Class.forName("android.icu.impl.ICUCurrencyDisplayInfoProvider"); 114 temp = (CurrencyDisplayInfoProvider) clzz.newInstance(); 115 } catch (Throwable t) { 116 temp = new CurrencyDisplayInfoProvider() { 117 @Override 118 public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) { 119 return DefaultInfo.getWithFallback(withFallback); 120 } 121 122 @Override 123 public boolean hasData() { 124 return false; 125 } 126 }; 127 } 128 provider = temp; 129 } 130 131 public static class DefaultInfo extends CurrencyDisplayInfo { 132 private final boolean fallback; 133 134 private DefaultInfo(boolean fallback) { 135 this.fallback = fallback; 136 } 137 138 public static final CurrencyDisplayInfo getWithFallback(boolean fallback) { 139 return fallback ? FALLBACK_INSTANCE : NO_FALLBACK_INSTANCE; 140 } 141 142 @Override 143 public String getName(String isoCode) { 144 return fallback ? isoCode : null; 145 } 146 147 @Override 148 public String getPluralName(String isoCode, String pluralType) { 149 return fallback ? isoCode : null; 150 } 151 152 @Override 153 public String getSymbol(String isoCode) { 154 return fallback ? isoCode : null; 155 } 156 157 @Override 158 public String getNarrowSymbol(String isoCode) { 159 return fallback ? isoCode : null; 160 } 161 162 @Override 163 public Map<String, String> symbolMap() { 164 return Collections.emptyMap(); 165 } 166 167 @Override 168 public Map<String, String> nameMap() { 169 return Collections.emptyMap(); 170 } 171 172 @Override 173 public ULocale getULocale() { 174 return ULocale.ROOT; 175 } 176 177 @Override 178 public Map<String, String> getUnitPatterns() { 179 if (fallback) { 180 return Collections.emptyMap(); 181 } 182 return null; 183 } 184 185 @Override 186 public CurrencyFormatInfo getFormatInfo(String isoCode) { 187 return null; 188 } 189 190 @Override 191 public CurrencySpacingInfo getSpacingInfo() { 192 return fallback ? CurrencySpacingInfo.DEFAULT : null; 193 } 194 195 private static final CurrencyDisplayInfo FALLBACK_INSTANCE = new DefaultInfo(true); 196 private static final CurrencyDisplayInfo NO_FALLBACK_INSTANCE = new DefaultInfo(false); 197 } 198 } 199