12ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
42ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/*
52ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *******************************************************************************
6f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert * Copyright (C) 2009-2016, International Business Machines Corporation and
7f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert * others. All Rights Reserved.
82ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *******************************************************************************
92ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */
102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpackage android.icu.impl;
112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Collections;
132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Map;
142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.text.CurrencyDisplayNames;
16f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport android.icu.text.DecimalFormatSymbols;
172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.util.ULocale;
182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
191537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller/**
201537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * @hide Only a subset of ICU is exposed in Android
21836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller */
222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpublic class CurrencyData {
232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static final CurrencyDisplayInfoProvider provider;
242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
25f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    private CurrencyData() {}
26f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static interface CurrencyDisplayInfoProvider {
282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback);
292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        boolean hasData();
302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static abstract class CurrencyDisplayInfo extends CurrencyDisplayNames {
332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public abstract Map<String, String> getUnitPatterns();
342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public abstract CurrencyFormatInfo getFormatInfo(String isoCode);
352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public abstract CurrencySpacingInfo getSpacingInfo();
3605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public abstract String getNarrowSymbol(String isoCode);
372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static final class CurrencyFormatInfo {
4005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public final String isoCode;
412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public final String currencyPattern;
4205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public final String monetaryDecimalSeparator;
43f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public final String monetaryGroupingSeparator;
442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
4505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public CurrencyFormatInfo(String isoCode, String currencyPattern, String monetarySeparator,
46f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                String monetaryGroupingSeparator) {
4705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            this.isoCode = isoCode;
482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            this.currencyPattern = currencyPattern;
4905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            this.monetaryDecimalSeparator = monetarySeparator;
502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            this.monetaryGroupingSeparator = monetaryGroupingSeparator;
512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static final class CurrencySpacingInfo {
55f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        private final String[][] symbols = new String[SpacingType.COUNT.ordinal()][SpacingPattern.COUNT.ordinal()];
56f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
5705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public boolean hasBeforeCurrency = false;
5805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public boolean hasAfterCurrency = false;
5905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
60f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public static enum SpacingType { BEFORE, AFTER, COUNT };
61f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public static enum SpacingPattern {
62f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            CURRENCY_MATCH(DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH),
63f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            SURROUNDING_MATCH(DecimalFormatSymbols.CURRENCY_SPC_SURROUNDING_MATCH),
64f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            INSERT_BETWEEN(DecimalFormatSymbols.CURRENCY_SPC_INSERT),
65f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            COUNT;
66f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
67f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            SpacingPattern() {}
68f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            SpacingPattern(int value) { assert value == ordinal(); }
69f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        };
70f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
71f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public CurrencySpacingInfo() {}
72f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
73f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public CurrencySpacingInfo(String... strings) {
74f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            assert strings.length == 6;
75f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
76f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            int k = 0;
77f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            for (int i=0; i<SpacingType.COUNT.ordinal(); i++) {
78f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                for (int j=0; j<SpacingPattern.COUNT.ordinal(); j++) {
79f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    symbols[i][j] = strings[k];
80f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    k++;
81f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                }
82f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            }
83f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
84f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
85f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public void setSymbolIfNull(SpacingType type, SpacingPattern pattern, String value) {
86f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            int i = type.ordinal();
87f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            int j = pattern.ordinal();
88f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            if (symbols[i][j] == null) {
89f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                symbols[i][j] = value;
90f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            }
912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
93f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public String[] getBeforeSymbols() {
94f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            return symbols[SpacingType.BEFORE.ordinal()];
95f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
96f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
97f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        public String[] getAfterSymbols() {
98f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            return symbols[SpacingType.AFTER.ordinal()];
99f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
1002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private static final String DEFAULT_CUR_MATCH = "[:letter:]";
1022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private static final String DEFAULT_CTX_MATCH = "[:digit:]";
1032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private static final String DEFAULT_INSERT = " ";
1042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public static final CurrencySpacingInfo DEFAULT = new CurrencySpacingInfo(
1062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT,
1072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                DEFAULT_CUR_MATCH, DEFAULT_CTX_MATCH, DEFAULT_INSERT);
1082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    static {
1112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        CurrencyDisplayInfoProvider temp = null;
1122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        try {
1132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            Class<?> clzz = Class.forName("android.icu.impl.ICUCurrencyDisplayInfoProvider");
1142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            temp = (CurrencyDisplayInfoProvider) clzz.newInstance();
1152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        } catch (Throwable t) {
1162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            temp = new CurrencyDisplayInfoProvider() {
117f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                @Override
1182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                public CurrencyDisplayInfo getInstance(ULocale locale, boolean withFallback) {
1192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                    return DefaultInfo.getWithFallback(withFallback);
1202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                }
1212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
122f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                @Override
1232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                public boolean hasData() {
1242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                    return false;
1252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                }
1262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            };
1272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        provider = temp;
1292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public static class DefaultInfo extends CurrencyDisplayInfo {
1322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private final boolean fallback;
1332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private DefaultInfo(boolean fallback) {
1352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            this.fallback = fallback;
1362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public static final CurrencyDisplayInfo getWithFallback(boolean fallback) {
1392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return fallback ? FALLBACK_INSTANCE : NO_FALLBACK_INSTANCE;
1402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public String getName(String isoCode) {
1442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return fallback ? isoCode : null;
1452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public String getPluralName(String isoCode, String pluralType) {
1492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return fallback ? isoCode : null;
1502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public String getSymbol(String isoCode) {
1542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return fallback ? isoCode : null;
15505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
15605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
15705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        @Override
15805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        public String getNarrowSymbol(String isoCode) {
15905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            return fallback ? isoCode : null;
1602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public Map<String, String> symbolMap() {
1642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return Collections.emptyMap();
1652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public Map<String, String> nameMap() {
1692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return Collections.emptyMap();
1702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public ULocale getULocale() {
1742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return ULocale.ROOT;
1752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public Map<String, String> getUnitPatterns() {
1792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            if (fallback) {
1802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                return Collections.emptyMap();
1812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            }
1822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return null;
1832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public CurrencyFormatInfo getFormatInfo(String isoCode) {
1872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return null;
1882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        @Override
1912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        public CurrencySpacingInfo getSpacingInfo() {
1922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller            return fallback ? CurrencySpacingInfo.DEFAULT : null;
1932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        }
1942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private static final CurrencyDisplayInfo FALLBACK_INSTANCE = new DefaultInfo(true);
1962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        private static final CurrencyDisplayInfo NO_FALLBACK_INSTANCE = new DefaultInfo(false);
1972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller}
199