From 1cb7f79a9e86ff23c7b996fd6f58142a2073586f Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Fri, 30 Oct 2020 21:13:29 +0300 Subject: [PATCH] [android][jni] methods for units localization are added --- .../maps/bookmarks/data/BookmarkManager.cpp | 7 ++- .../jni/com/mapswithme/util/StringUtils.cpp | 55 ++++++++++++++++--- .../src/com/mapswithme/util/StringUtils.java | 10 ++++ 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index f8d36a0825..33114e4fa8 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -9,6 +9,7 @@ #include "coding/zip_creator.hpp" +#include "platform/localization.hpp" #include "platform/preferred_languages.hpp" #include "base/macros.hpp" @@ -898,8 +899,10 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetTrack( ASSERT(nTrack, ("Track must not be null with id:)", trackId)); - std::string formattedLength = measurement_utils::FormatDistance(nTrack->GetLengthMeters()); - + auto const localizedUnits = platform::GetLocalizedDistanceUnits(); + std::string formattedLength = measurement_utils::FormatDistanceWithLocalization(nTrack->GetLengthMeters(), + localizedUnits.m_high, + localizedUnits.m_low); dp::Color nColor = nTrack->GetColor(0); jint androidColor = shift(nColor.GetAlpha(), 24) + diff --git a/android/jni/com/mapswithme/util/StringUtils.cpp b/android/jni/com/mapswithme/util/StringUtils.cpp index 3bdc530a8e..284138e1d1 100644 --- a/android/jni/com/mapswithme/util/StringUtils.cpp +++ b/android/jni/com/mapswithme/util/StringUtils.cpp @@ -2,9 +2,22 @@ #include "indexer/search_string_utils.hpp" +#include "platform/localization.hpp" #include "platform/measurement_utils.hpp" #include "platform/settings.hpp" +#include + +namespace +{ +jobject MakeJavaPair(JNIEnv * env, std::string const & first, std::string const & second) +{ + static jclass const pairClass = jni::GetGlobalClassRef(env, "android/util/Pair"); + static jmethodID const pairCtor = jni::GetConstructorID(env, pairClass, "(Ljava/lang/Object;Ljava/lang/Object;)V"); + return env->NewObject(pairClass, pairCtor, jni::ToJavaString(env,first), jni::ToJavaString(env,second)); +} +} // namespace + extern "C" { JNIEXPORT jboolean JNICALL @@ -39,21 +52,49 @@ Java_com_mapswithme_util_StringUtils_nativeFilterContainsNormalized(JNIEnv * env JNIEXPORT jobject JNICALL Java_com_mapswithme_util_StringUtils_nativeFormatSpeedAndUnits(JNIEnv * env, jclass thiz, jdouble metersPerSecond) { - static jclass const pairClass = jni::GetGlobalClassRef(env, "android/util/Pair"); - static jmethodID const pairCtor = jni::GetConstructorID(env, pairClass, "(Ljava/lang/Object;Ljava/lang/Object;)V"); - measurement_utils::Units units; if (!settings::Get(settings::kMeasurementUnits, units)) units = measurement_utils::Units::Metric; - return env->NewObject(pairClass, pairCtor, - jni::ToJavaString(env, measurement_utils::FormatSpeedNumeric(metersPerSecond, units)), - jni::ToJavaString(env, measurement_utils::FormatSpeedUnits(units))); + return MakeJavaPair(env, measurement_utils::FormatSpeedNumeric(metersPerSecond, units), + measurement_utils::FormatSpeedUnits(units)); } JNIEXPORT jstring JNICALL -Java_com_mapswithme_util_StringUtils_nativeFormatDistance(JNIEnv *env, jclass thiz, +Java_com_mapswithme_util_StringUtils_nativeFormatDistance(JNIEnv * env, jclass thiz, jdouble distanceInMeters) { return jni::ToJavaString(env, measurement_utils::FormatDistance(distanceInMeters)); } + +JNIEXPORT jstring JNICALL +Java_com_mapswithme_util_StringUtils_nativeFormatDistanceWithLocalization(JNIEnv * env, jclass, + jdouble distanceInMeters, + jstring high, + jstring low) +{ + auto const distance = measurement_utils::FormatDistanceWithLocalization(distanceInMeters, + jni::ToNativeString(env, high), + jni::ToNativeString(env, low)); + return jni::ToJavaString(env, distance); +} + +JNIEXPORT jobject JNICALL +Java_com_mapswithme_util_StringUtils_nativeGetLocalizedDistanceUnits(JNIEnv * env, jclass) +{ + auto const localizedUnits = platform::GetLocalizedDistanceUnits(); + return MakeJavaPair(env, localizedUnits.m_high, localizedUnits.m_low); +} + +JNIEXPORT jobject JNICALL +Java_com_mapswithme_util_StringUtils_nativeGetLocalizedAltitudeUnits(JNIEnv * env, jclass) +{ + auto const localizedUnits = platform::GetLocalizedAltitudeUnits(); + return MakeJavaPair(env, localizedUnits.m_high, localizedUnits.m_low); +} + +JNIEXPORT jstring JNICALL +Java_com_mapswithme_util_StringUtils_nativeGetLocalizedSpeedUnits(JNIEnv * env, jclass) +{ + return jni::ToJavaString(env, platform::GetLocalizedSpeedUnits()); +} } // extern "C" diff --git a/android/src/com/mapswithme/util/StringUtils.java b/android/src/com/mapswithme/util/StringUtils.java index 956f2d6d8f..aff5af2cfc 100644 --- a/android/src/com/mapswithme/util/StringUtils.java +++ b/android/src/com/mapswithme/util/StringUtils.java @@ -4,6 +4,7 @@ import android.text.Editable; import android.text.TextWatcher; import android.util.Pair; +import androidx.annotation.NonNull; import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; @@ -23,6 +24,15 @@ public class StringUtils public static native Pair nativeFormatSpeedAndUnits(double metersPerSecond); public static native String nativeFormatDistance(double meters); + public static native String nativeFormatDistanceWithLocalization(double meters, + @NonNull String high, + @NonNull String low); + @NonNull + public static native Pair nativeGetLocalizedDistanceUnits(); + @NonNull + public static native Pair nativeGetLocalizedAltitudeUnits(); + @NonNull + public static native String nativeGetLocalizedSpeedUnits(); /** * Removes html tags, generated from edittext content after it's transformed to html.