Re-implement ICU.getCurrencyCode without accessing the ICU resource directly

Re-implement by CurrencyMetaInfo.
java.util.Currency isn't reimplemented by android.icu.util.Currency
because java.util considers country code only, but ICU4J Currency will
try to consider locale extension, and also making best guess.

The previous CL added the test and continue to pass after this CL.

The below is the result of Currency#getInstance with each locale from
Locale.getAvailableLocales(). The result is the same before and after
this change.

===========================
    ca-AD AD EUR
    ar-AE AE AED
    en-AE AE AED
    fa-AF AF AFN
    ps-AF AF AFN
    uz-Arab-AF AF AFN
    en-AG AG XCD
    en-AI AI XCD
    sq-AL AL ALL
    hy-AM AM AMD
    ln-AO AO AOA
    pt-AO AO AOA
    es-AR AR ARS
    en-AS AS USD
    de-AT AT EUR
    en-AT AT EUR
    en-AU AU AUD
    nl-AW AW AWG
    sv-AX AX EUR
    az-Cyrl-AZ AZ AZN
    az-Latn-AZ AZ AZN
    bs-Cyrl-BA BA BAM
    bs-Latn-BA BA BAM
    hr-BA BA BAM
    sr-Cyrl-BA BA BAM
    sr-Latn-BA BA BAM
    en-BB BB BBD
    bn-BD BD BDT
    ccp-BD BD BDT
    de-BE BE EUR
    en-BE BE EUR
    fr-BE BE EUR
    nl-BE BE EUR
    ff-Latn-BF BF XOF
    fr-BF BF XOF
    bg-BG BG BGN
    ar-BH BH BHD
    en-BI BI BIF
    fr-BI BI BIF
    rn-BI BI BIF
    fr-BJ BJ XOF
    yo-BJ BJ XOF
    fr-BL BL EUR
    en-BM BM BMD
    ms-BN BN BND
    es-BO BO BOB
    qu-BO BO BOB
    nl-BQ BQ USD
    es-BR BR BRL
    pt-BR BR BRL
    en-BS BS BSD
    dz-BT BT BTN
    en-BW BW BWP
    be-BY BY BYN
    ru-BY BY BYN
    en-BZ BZ BZD
    es-BZ BZ BZD
    en-CA CA CAD
    fr-CA CA CAD
    en-CC CC AUD
    fr-CD CD CDF
    ln-CD CD CDF
    lu-CD CD CDF
    sw-CD CD CDF
    fr-CF CF XAF
    ln-CF CF XAF
    sg-CF CF XAF
    fr-CG CG XAF
    ln-CG CG XAF
    de-CH CH CHF
    en-CH CH CHF
    fr-CH CH CHF
    gsw-CH CH CHF
    it-CH CH CHF
    pt-CH CH CHF
    rm-CH CH CHF
    wae-CH CH CHF
    fr-CI CI XOF
    en-CK CK NZD
    es-CL CL CLP
    agq-CM CM XAF
    bas-CM CM XAF
    dua-CM CM XAF
    en-CM CM XAF
    ewo-CM CM XAF
    ff-Latn-CM CM XAF
    fr-CM CM XAF
    jgo-CM CM XAF
    kkj-CM CM XAF
    ksf-CM CM XAF
    mgo-CM CM XAF
    mua-CM CM XAF
    nmg-CM CM XAF
    nnh-CM CM XAF
    yav-CM CM XAF
    bo-CN CN CNY
    ii-CN CN CNY
    ug-CN CN CNY
    yue-Hans-CN CN CNY
    zh-Hans-CN CN CNY
    es-CO CO COP
    es-CR CR CRC
    es-CU CU CUP
    kea-CV CV CVE
    pt-CV CV CVE
    nl-CW CW ANG
    en-CX CX AUD
    el-CY CY EUR
    en-CY CY EUR
    tr-CY CY EUR
    cs-CZ CZ CZK
    de-DE DE EUR
    dsb-DE DE EUR
    en-DE DE EUR
    hsb-DE DE EUR
    ksh-DE DE EUR
    nds-DE DE EUR
    en-DG DG USD
    ar-DJ DJ DJF
    fr-DJ DJ DJF
    so-DJ DJ DJF
    da-DK DK DKK
    en-DK DK DKK
    fo-DK DK DKK
    en-DM DM XCD
    es-DO DO DOP
    ar-DZ DZ DZD
    fr-DZ DZ DZD
    kab-DZ DZ DZD
    es-EA EA EUR
    es-EC EC USD
    qu-EC EC USD
    et-EE EE EUR
    ar-EG EG EGP
    ar-EH EH MAD
    ar-ER ER ERN
    en-ER ER ERN
    ti-ER ER ERN
    ast-ES ES EUR
    ca-ES ES EUR
    es-ES ES EUR
    eu-ES ES EUR
    gl-ES ES EUR
    am-ET ET ETB
    om-ET ET ETB
    so-ET ET ETB
    ti-ET ET ETB
    en-FI FI EUR
    fi-FI FI EUR
    se-FI FI EUR
    smn-FI FI EUR
    sv-FI FI EUR
    en-FJ FJ FJD
    en-FK FK FKP
    en-FM FM USD
    fo-FO FO DKK
    br-FR FR EUR
    ca-FR FR EUR
    fr-FR FR EUR
    gsw-FR FR EUR
    fr-GA GA XAF
    cy-GB GB GBP
    en-GB GB GBP
    ga-GB GB GBP
    gd-GB GB GBP
    kw-GB GB GBP
    en-GD GD XCD
    ka-GE GE GEL
    os-GE GE GEL
    fr-GF GF EUR
    en-GG GG GBP
    ak-GH GH GHS
    ee-GH GH GHS
    en-GH GH GHS
    ff-Latn-GH GH GHS
    ha-GH GH GHS
    en-GI GI GIP
    da-GL GL DKK
    kl-GL GL DKK
    en-GM GM GMD
    ff-Latn-GM GM GMD
    ff-Latn-GN GN GNF
    fr-GN GN GNF
    fr-GP GP EUR
    es-GQ GQ XAF
    fr-GQ GQ XAF
    pt-GQ GQ XAF
    el-GR GR EUR
    es-GT GT GTQ
    en-GU GU USD
    ff-Latn-GW GW XOF
    pt-GW GW XOF
    en-GY GY GYD
    en-HK HK HKD
    yue-Hant-HK HK HKD
    zh-Hans-HK HK HKD
    zh-Hant-HK HK HKD
    es-HN HN HNL
    hr-HR HR HRK
    fr-HT HT HTG
    hu-HU HU HUF
    es-IC IC EUR
    id-ID ID IDR
    jv-ID ID IDR
    en-IE IE EUR
    ga-IE IE EUR
    ar-IL IL ILS
    en-IL IL ILS
    he-IL IL ILS
    en-IM IM GBP
    gv-IM IM GBP
    as-IN IN INR
    bn-IN IN INR
    bo-IN IN INR
    brx-IN IN INR
    ccp-IN IN INR
    en-IN IN INR
    gu-IN IN INR
    hi-IN IN INR
    kn-IN IN INR
    kok-IN IN INR
    ks-IN IN INR
    ml-IN IN INR
    mr-IN IN INR
    ne-IN IN INR
    or-IN IN INR
    pa-Guru-IN IN INR
    ta-IN IN INR
    te-IN IN INR
    ur-IN IN INR
    en-IO IO USD
    ar-IQ IQ IQD
    ckb-IQ IQ IQD
    lrc-IQ IQ IQD
    ckb-IR IR IRR
    fa-IR IR IRR
    lrc-IR IR IRR
    mzn-IR IR IRR
    is-IS IS ISK
    ca-IT IT EUR
    de-IT IT EUR
    fur-IT IT EUR
    it-IT IT EUR
    en-JE JE GBP
    en-JM JM JMD
    ar-JO JO JOD
    ja-JP JP JPY
    dav-KE KE KES
    ebu-KE KE KES
    en-KE KE KES
    guz-KE KE KES
    kam-KE KE KES
    ki-KE KE KES
    kln-KE KE KES
    luo-KE KE KES
    luy-KE KE KES
    mas-KE KE KES
    mer-KE KE KES
    om-KE KE KES
    saq-KE KE KES
    so-KE KE KES
    sw-KE KE KES
    teo-KE KE KES
    ky-KG KG KGS
    ru-KG KG KGS
    km-KH KH KHR
    en-KI KI AUD
    ar-KM KM KMF
    fr-KM KM KMF
    en-KN KN XCD
    ko-KP KP KPW
    ko-KR KR KRW
    ar-KW KW KWD
    en-KY KY KYD
    kk-KZ KZ KZT
    ru-KZ KZ KZT
    lo-LA LA LAK
    ar-LB LB LBP
    en-LC LC XCD
    de-LI LI CHF
    gsw-LI LI CHF
    si-LK LK LKR
    ta-LK LK LKR
    en-LR LR LRD
    ff-Latn-LR LR LRD
    vai-Latn-LR LR LRD
    vai-Vaii-LR LR LRD
    en-LS LS ZAR
    lt-LT LT EUR
    de-LU LU EUR
    fr-LU LU EUR
    lb-LU LU EUR
    pt-LU LU EUR
    lv-LV LV EUR
    ar-LY LY LYD
    ar-MA MA MAD
    fr-MA MA MAD
    shi-Latn-MA MA MAD
    shi-Tfng-MA MA MAD
    tzm-MA MA MAD
    zgh-MA MA MAD
    fr-MC MC EUR
    ro-MD MD MDL
    ru-MD MD MDL
    sr-Cyrl-ME ME EUR
    sr-Latn-ME ME EUR
    fr-MF MF EUR
    en-MG MG MGA
    fr-MG MG MGA
    mg-MG MG MGA
    en-MH MH USD
    mk-MK MK MKD
    sq-MK MK MKD
    bm-ML ML XOF
    fr-ML ML XOF
    khq-ML ML XOF
    ses-ML ML XOF
    my-MM MM MMK
    mn-MN MN MNT
    en-MO MO MOP
    pt-MO MO MOP
    zh-Hans-MO MO MOP
    zh-Hant-MO MO MOP
    en-MP MP USD
    fr-MQ MQ EUR
    ar-MR MR MRU
    ff-Latn-MR MR MRU
    fr-MR MR MRU
    en-MS MS XCD
    en-MT MT EUR
    mt-MT MT EUR
    en-MU MU MUR
    fr-MU MU MUR
    mfe-MU MU MUR
    en-MW MW MWK
    es-MX MX MXN
    en-MY MY MYR
    ms-MY MY MYR
    ta-MY MY MYR
    mgh-MZ MZ MZN
    pt-MZ MZ MZN
    seh-MZ MZ MZN
    af-NA NA NAD
    en-NA NA NAD
    naq-NA NA NAD
    fr-NC NC XPF
    dje-NE NE XOF
    ff-Latn-NE NE XOF
    fr-NE NE XOF
    ha-NE NE XOF
    twq-NE NE XOF
    en-NF NF AUD
    en-NG NG NGN
    ff-Latn-NG NG NGN
    ha-NG NG NGN
    ig-NG NG NGN
    yo-NG NG NGN
    es-NI NI NIO
    en-NL NL EUR
    fy-NL NL EUR
    nds-NL NL EUR
    nl-NL NL EUR
    nb-NO NO NOK
    nn-NO NO NOK
    se-NO NO NOK
    ne-NP NP NPR
    en-NR NR AUD
    en-NU NU NZD
    en-NZ NZ NZD
    mi-NZ NZ NZD
    ar-OM OM OMR
    es-PA PA PAB
    es-PE PE PEN
    qu-PE PE PEN
    fr-PF PF XPF
    en-PG PG PGK
    ceb-PH PH PHP
    en-PH PH PHP
    es-PH PH PHP
    fil-PH PH PHP
    en-PK PK PKR
    pa-Arab-PK PK PKR
    ps-PK PK PKR
    sd-PK PK PKR
    ur-PK PK PKR
    pl-PL PL PLN
    fr-PM PM EUR
    en-PN PN NZD
    en-PR PR USD
    es-PR PR USD
    ar-PS PS ILS
    pt-PT PT EUR
    en-PW PW USD
    es-PY PY PYG
    ar-QA QA QAR
    fr-RE RE EUR
    ro-RO RO RON
    sr-Cyrl-RS RS RSD
    sr-Latn-RS RS RSD
    ce-RU RU RUB
    os-RU RU RUB
    ru-RU RU RUB
    sah-RU RU RUB
    tt-RU RU RUB
    en-RW RW RWF
    fr-RW RW RWF
    rw-RW RW RWF
    ar-SA SA SAR
    en-SB SB SBD
    en-SC SC SCR
    fr-SC SC SCR
    ar-SD SD SDG
    en-SD SD SDG
    en-SE SE SEK
    se-SE SE SEK
    sv-SE SE SEK
    en-SG SG SGD
    ms-SG SG SGD
    ta-SG SG SGD
    zh-Hans-SG SG SGD
    en-SH SH SHP
    en-SI SI EUR
    sl-SI SI EUR
    nb-SJ SJ NOK
    sk-SK SK EUR
    en-SL SL SLL
    ff-Latn-SL SL SLL
    it-SM SM EUR
    dyo-SN SN XOF
    ff-Latn-SN SN XOF
    fr-SN SN XOF
    wo-SN SN XOF
    ar-SO SO SOS
    so-SO SO SOS
    nl-SR SR SRD
    ar-SS SS SSP
    en-SS SS SSP
    nus-SS SS SSP
    pt-ST ST STN
    es-SV SV USD
    en-SX SX ANG
    nl-SX SX ANG
    ar-SY SY SYP
    fr-SY SY SYP
    en-SZ SZ SZL
    en-TC TC USD
    ar-TD TD XAF
    fr-TD TD XAF
    ee-TG TG XOF
    fr-TG TG XOF
    th-TH TH THB
    tg-TJ TJ TJS
    en-TK TK NZD
    pt-TL TL USD
    tk-TM TM TMT
    ar-TN TN TND
    fr-TN TN TND
    en-TO TO TOP
    to-TO TO TOP
    ku-TR TR TRY
    tr-TR TR TRY
    en-TT TT TTD
    en-TV TV AUD
    zh-Hant-TW TW TWD
    asa-TZ TZ TZS
    bez-TZ TZ TZS
    en-TZ TZ TZS
    jmc-TZ TZ TZS
    kde-TZ TZ TZS
    ksb-TZ TZ TZS
    lag-TZ TZ TZS
    mas-TZ TZ TZS
    rof-TZ TZ TZS
    rwk-TZ TZ TZS
    sbp-TZ TZ TZS
    sw-TZ TZ TZS
    vun-TZ TZ TZS
    ru-UA UA UAH
    uk-UA UA UAH
    cgg-UG UG UGX
    en-UG UG UGX
    lg-UG UG UGX
    nyn-UG UG UGX
    sw-UG UG UGX
    teo-UG UG UGX
    xog-UG UG UGX
    en-UM UM USD
    chr-US US USD
    en-US US USD
    en-US-POSIX US USD
    es-US US USD
    haw-US US USD
    lkt-US US USD
    es-UY UY UYU
    uz-Cyrl-UZ UZ UZS
    uz-Latn-UZ UZ UZS
    it-VA VA EUR
    en-VC VC XCD
    es-VE VE VES
    en-VG VG USD
    en-VI VI USD
    vi-VN VN VND
    en-VU VU VUV
    fr-VU VU VUV
    fr-WF WF XPF
    en-WS WS WST
    sq-XK XK EUR
    sr-Cyrl-XK XK EUR
    sr-Latn-XK XK EUR
    ar-YE YE YER
    fr-YT YT EUR
    af-ZA ZA ZAR
    en-ZA ZA ZAR
    xh-ZA ZA ZAR
    zu-ZA ZA ZAR
    bem-ZM ZM ZMW
    en-ZM ZM ZMW
    en-ZW ZW USD
    nd-ZW ZW USD
    sn-ZW ZW USD

    null currency:

    throw IllegalArgumentException:
    af
    agq
    ak
    am
    ar
    ar-001
    ar-XB
    as
    asa
    ast
    az
    az-Cyrl
    az-Latn
    bas
    be
    bem
    bez
    bg
    bm
    bn
    bo
    br
    brx
    bs
    bs-Cyrl
    bs-Latn
    ca
    ccp
    ce
    ceb
    cgg
    chr
    ckb
    cs
    cy
    da
    dav
    de
    dje
    dsb
    dua
    dyo
    dz
    ebu
    ee
    el
    en
    en-001
    en-150
    en-XA
    eo
    eo-001
    es
    es-419
    et
    eu
    ewo
    fa
    ff
    ff-Latn
    fi
    fil
    fo
    fr
    fur
    fy
    ga
    gd
    gl
    gsw
    gu
    guz
    gv
    ha
    haw
    he
    hi
    hr
    hsb
    hu
    hy
    ia
    ia-001
    id
    ig
    ii
    is
    it
    ja
    jgo
    jmc
    jv
    ka
    kab
    kam
    kde
    kea
    khq
    ki
    kk
    kkj
    kl
    kln
    km
    kn
    ko
    kok
    ks
    ksb
    ksf
    ksh
    ku
    kw
    ky
    lag
    lb
    lg
    lkt
    ln
    lo
    lrc
    lt
    lu
    luo
    luy
    lv
    mas
    mer
    mfe
    mg
    mgh
    mgo
    mi
    mk
    ml
    mn
    mr
    ms
    mt
    mua
    my
    mzn
    naq
    nb
    nd
    nds
    ne
    nl
    nmg
    nn
    nnh
    nus
    nyn
    om
    or
    os
    pa
    pa-Arab
    pa-Guru
    pl
    ps
    pt
    qu
    rm
    rn
    ro
    rof
    ru
    rw
    rwk
    sah
    saq
    sbp
    sd
    se
    seh
    ses
    sg
    shi
    shi-Latn
    shi-Tfng
    si
    sk
    sl
    smn
    sn
    so
    sq
    sr
    sr-Cyrl
    sr-Latn
    sv
    sw
    ta
    te
    teo
    tg
    th
    ti
    tk
    to
    tr
    tt
    twq
    tzm
    ug
    uk
    ur
    uz
    uz-Arab
    uz-Cyrl
    uz-Latn
    vai
    vai-Latn
    vai-Vaii
    vi
    vun
    wae
    wo
    xh
    xog
    yav
    yi
    yi-001
    yo
    yue
    yue-Hans
    yue-Hant
    zgh
    zh
    zh-Hans
    zh-Hant
    zu

    throw NullPointerException:
===========================
Bug: 144560585
Test: atest CtsLibcoreTestCases:libcore.java.util.CurrencyTest CtsLibcoreTestCases:libcore.libcore.icu.ICUCurrencyTest CtsLibcoreTestCases:org.apache.harmony.tests.java.util.CurrencyTest
Change-Id: Iacd55920132e557287c02be5c5ba9c7f7ad5e970

Change-Id: I8eb1162b37b892e40ed1c0bd49d84eb1f771700c
2 files changed