diff --git a/android/jni/com/mapswithme/maps/ugc/UGC.cpp b/android/jni/com/mapswithme/maps/ugc/UGC.cpp index 0ce4f93da3..739b89b1aa 100644 --- a/android/jni/com/mapswithme/maps/ugc/UGC.cpp +++ b/android/jni/com/mapswithme/maps/ugc/UGC.cpp @@ -102,8 +102,9 @@ public: records.emplace_back(std::move(key), std::move(ratingValue)); } jstring jtext = static_cast(env->GetObjectField(ugcUpdate, m_ratingTextFieldId)); - ugc::Text text(jni::ToNativeString(env, jtext), - StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm())); + jstring jlocale = static_cast(env->GetObjectField(ugcUpdate, m_localeFieldId)); + std::string normalizedLocale = languages::Normalize(jni::ToNativeString(env, jlocale)); + ugc::Text text(jni::ToNativeString(env, jtext), StringUtf8Multilang::GetLangIndex(normalizedLocale)); jlong jtime = env->GetLongField(ugcUpdate, m_updateTimeFieldId); uint64_t timeSec = static_cast(jtime / 1000); return ugc::UGCUpdate(records, text, std::chrono::system_clock::from_time_t(timeSec)); @@ -126,11 +127,14 @@ private: { jni::TScopedLocalObjectArrayRef ratings(env, ToJavaRatings(env, ugcUpdate.m_ratings)); jni::TScopedLocalRef text(env, jni::ToJavaString(env, ugcUpdate.m_text.m_text)); + std::string locale(StringUtf8Multilang::GetLangByCode(ugcUpdate.m_text.m_lang)); + jni::TScopedLocalRef localeRef(env, jni::ToJavaString(env, locale)); jobject result = nullptr; if (!ugcUpdate.IsEmpty()) result = env->NewObject(m_ugcUpdateClass, m_ugcUpdateCtor, ratings.get(), - text.get(), ugc::ToMillisecondsSinceEpoch(ugcUpdate.m_time)); + text.get(), ugc::ToMillisecondsSinceEpoch(ugcUpdate.m_time), + localeRef.get()); return result; } @@ -197,10 +201,11 @@ private: m_ugcUpdateClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/ugc/UGCUpdate"); m_ugcUpdateCtor = jni::GetConstructorID( - env, m_ugcUpdateClass, "([Lcom/mapswithme/maps/ugc/UGC$Rating;Ljava/lang/String;J)V"); + env, m_ugcUpdateClass, "([Lcom/mapswithme/maps/ugc/UGC$Rating;Ljava/lang/String;JLjava/lang/String;)V"); m_ratingArrayFieldId = env->GetFieldID(m_ugcUpdateClass, "mRatings", "[Lcom/mapswithme/maps/ugc/UGC$Rating;"); m_ratingTextFieldId = env->GetFieldID(m_ugcUpdateClass, "mText", "Ljava/lang/String;"); m_updateTimeFieldId = env->GetFieldID(m_ugcUpdateClass, "mTimeMillis", "J"); + m_localeFieldId = env->GetFieldID(m_ugcUpdateClass, "mLocale", "Ljava/lang/String;"); m_ratingNameFieldId = env->GetFieldID(g_ratingClazz, "mName", "Ljava/lang/String;"); m_ratingValueFieldId = env->GetFieldID(g_ratingClazz, "mValue", "F"); m_initialized = true; @@ -216,6 +221,7 @@ private: jfieldID m_ratingArrayFieldId; jfieldID m_ratingTextFieldId; jfieldID m_updateTimeFieldId; + jfieldID m_localeFieldId; jfieldID m_ratingNameFieldId; jfieldID m_ratingValueFieldId; diff --git a/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java b/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java index cb0d8e1686..381163a3b9 100644 --- a/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java +++ b/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java @@ -14,6 +14,7 @@ import com.mapswithme.maps.R; import com.mapswithme.maps.auth.BaseMwmAuthorizationFragment; import com.mapswithme.maps.bookmarks.data.FeatureId; import com.mapswithme.maps.widget.ToolbarController; +import com.mapswithme.util.Language; import com.mapswithme.util.UiUtils; import com.mapswithme.util.statistics.Statistics; @@ -92,7 +93,7 @@ public class UGCEditorFragment extends BaseMwmAuthorizationFragment UGC.Rating[] ratings = new UGC.Rating[modifiedRatings.size()]; modifiedRatings.toArray(ratings); UGCUpdate update = new UGCUpdate(ratings, mReviewEditText.getText().toString(), - System.currentTimeMillis()); + System.currentTimeMillis(), Language.getKeyboardLocale()); FeatureId featureId = getArguments().getParcelable(ARG_FEATURE_ID); if (featureId == null) throw new AssertionError("Feature ID must be passed to this fragment!"); diff --git a/android/src/com/mapswithme/maps/ugc/UGCUpdate.java b/android/src/com/mapswithme/maps/ugc/UGCUpdate.java index da5a1628bc..9a5b278785 100644 --- a/android/src/com/mapswithme/maps/ugc/UGCUpdate.java +++ b/android/src/com/mapswithme/maps/ugc/UGCUpdate.java @@ -14,12 +14,16 @@ class UGCUpdate @Nullable private String mText; private long mTimeMillis; + @NonNull + private final String mLocale; - UGCUpdate(@Nullable UGC.Rating[] ratings, @Nullable String text, long timeMillis) + UGCUpdate(@Nullable UGC.Rating[] ratings, @Nullable String text, long timeMillis, + @NonNull String locale) { mRatings = ratings; mText = text; mTimeMillis = timeMillis; + mLocale = locale; } public void setText(@Nullable String text)