From 1c0e4af00a7090d67bf579d41fc34d81e384ac35 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Mon, 27 Jul 2020 21:56:12 +0300 Subject: [PATCH] [platform][android][ios] obtaining currency symbol by currency code is added. --- .../jni/com/mapswithme/platform/Localization.cpp | 12 ++++++++++++ android/src/com/mapswithme/util/Utils.java | 15 +++++++++++++++ platform/localization.hpp | 1 + platform/localization.mm | 11 +++++++++++ platform/localization_dummy.cpp | 2 ++ 5 files changed, 41 insertions(+) diff --git a/android/jni/com/mapswithme/platform/Localization.cpp b/android/jni/com/mapswithme/platform/Localization.cpp index 22fc591308..c1864744b5 100644 --- a/android/jni/com/mapswithme/platform/Localization.cpp +++ b/android/jni/com/mapswithme/platform/Localization.cpp @@ -48,4 +48,16 @@ std::string GetLocalizedString(std::string const & key) static auto const methodId = GetMethodId("getStringValueByKey"); return GetLocalizedStringByUtil(methodId, key); } + +std::string GetCurrencySymbol(std::string const & currencyCode) +{ + JNIEnv * env = jni::GetEnv(); + static auto const methodId = jni::GetStaticMethodID(env, g_utilsClazz, "getCurrencySymbol", + "(Ljava/lang/String;)Ljava/lang/String;"); + + jni::TScopedLocalRef currencyCodeRef(env, jni::ToJavaString(env, currencyCode)); + jni::TScopedLocalRef localizedStrRef( + env, env->CallStaticObjectMethod(g_utilsClazz, methodId, currencyCodeRef.get())); + return jni::ToNativeString(env, static_cast(localizedStrRef.get())); +} } // namespace platform diff --git a/android/src/com/mapswithme/util/Utils.java b/android/src/com/mapswithme/util/Utils.java index 6768ecd308..08c03f926d 100644 --- a/android/src/com/mapswithme/util/Utils.java +++ b/android/src/com/mapswithme/util/Utils.java @@ -616,6 +616,21 @@ public class Utils return text; } + @NonNull + public static String getCurrencySymbol(@NonNull String currencyCode) + { + try + { + return Currency.getInstance(currencyCode).getSymbol(Locale.getDefault()); + } + catch (Throwable e) + { + LOGGER.e(TAG, "Failed to obtain currency symbol by currency code = " + currencyCode, e); + } + + return currencyCode; + } + static String makeUrlSafe(@NonNull final String url) { return url.replaceAll("(token|password|key)=([^&]+)", "***"); diff --git a/platform/localization.hpp b/platform/localization.hpp index b73373249a..4521d95fa4 100644 --- a/platform/localization.hpp +++ b/platform/localization.hpp @@ -7,4 +7,5 @@ namespace platform extern std::string GetLocalizedTypeName(std::string const & type); extern std::string GetLocalizedBrandName(std::string const & brand); extern std::string GetLocalizedString(std::string const & key); +extern std::string GetCurrencySymbol(std::string const & currencyCode); } // namespace platform diff --git a/platform/localization.mm b/platform/localization.mm index da00397480..fa1927a868 100644 --- a/platform/localization.mm +++ b/platform/localization.mm @@ -25,4 +25,15 @@ std::string GetLocalizedString(std::string const & key) { return [NSLocalizedString(@(key.c_str()), @"") UTF8String]; } + +std::string GetCurrencySymbol(std::string const & currencyCode) +{ + NSLocale * locale = [NSLocale currentLocale]; + NSString * symbol = [locale displayNameForKey:NSLocaleCurrencySymbol + value:@(currencyCode.c_str())]; + if (!symbol) + return currencyCode; + + return [symbol UTF8String]; +} } // namespace platform diff --git a/platform/localization_dummy.cpp b/platform/localization_dummy.cpp index 640415ac77..e4c90ddea9 100644 --- a/platform/localization_dummy.cpp +++ b/platform/localization_dummy.cpp @@ -7,4 +7,6 @@ std::string GetLocalizedTypeName(std::string const & type) { return type; } std::string GetLocalizedBrandName(std::string const & brand) { return brand; } std::string GetLocalizedString(std::string const & key) { return key; } + +std::string GetCurrencySymbol(std::string const & currencyCode) { return currencyCode; } } // namespace platform