forked from organicmaps/organicmaps
[android] Added passing the keyboard locale for UGCUpdate
This commit is contained in:
parent
e7d26e1957
commit
578f94373e
3 changed files with 35 additions and 14 deletions
|
@ -86,7 +86,7 @@ public:
|
|||
Init(env);
|
||||
|
||||
jobjectArray jratings = static_cast<jobjectArray>(env->GetObjectField(ugcUpdate, m_ratingArrayFieldId));
|
||||
int const length = env->GetArrayLength(jratings);
|
||||
auto const length = static_cast<size_t>(env->GetArrayLength(jratings));
|
||||
std::vector<ugc::RatingRecord> records;
|
||||
records.reserve(length);
|
||||
for (int i = 0; i < length; i++)
|
||||
|
@ -102,16 +102,25 @@ public:
|
|||
records.emplace_back(std::move(key), std::move(ratingValue));
|
||||
}
|
||||
jstring jtext = static_cast<jstring>(env->GetObjectField(ugcUpdate, m_ratingTextFieldId));
|
||||
jstring jlocale = static_cast<jstring>(env->GetObjectField(ugcUpdate, m_localeFieldId));
|
||||
std::string normalizedLocale = languages::Normalize(jni::ToNativeString(env, jlocale));
|
||||
// TODO: Set the list of keyboard's locales
|
||||
ugc::KeyboardText text(jni::ToNativeString(env, jtext), StringUtf8Multilang::GetLangIndex(normalizedLocale), {});
|
||||
jstring jdevicelocale = static_cast<jstring>(env->GetObjectField(ugcUpdate, m_deviceLocaleFieldId));
|
||||
jstring jkeyboardLocale = static_cast<jstring>(env->GetObjectField(ugcUpdate, m_keyboardLocaleFieldId));
|
||||
std::vector<uint8_t> keyboardLangs;
|
||||
keyboardLangs.push_back(ToNativeLangIndex(env, jkeyboardLocale));
|
||||
ugc::KeyboardText text(jni::ToNativeString(env, jtext), ToNativeLangIndex(env, jdevicelocale),
|
||||
keyboardLangs);
|
||||
jlong jtime = env->GetLongField(ugcUpdate, m_updateTimeFieldId);
|
||||
uint64_t timeSec = static_cast<uint64_t>(jtime / 1000);
|
||||
auto const timeSec = static_cast<time_t>(jtime / 1000);
|
||||
return ugc::UGCUpdate(records, text, std::chrono::system_clock::from_time_t(timeSec));
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
uint8_t ToNativeLangIndex(JNIEnv * env, jstring lang)
|
||||
{
|
||||
std::string normLocale = languages::Normalize(jni::ToNativeString(env, lang));
|
||||
return static_cast<uint8_t>(StringUtf8Multilang::GetLangIndex(normLocale));
|
||||
}
|
||||
|
||||
jobject ToJavaUGC(JNIEnv * env, ugc::UGC const & ugc)
|
||||
{
|
||||
jni::TScopedLocalObjectArrayRef ratings(env, ToJavaRatings(env, ugc.m_ratings));
|
||||
|
@ -130,12 +139,17 @@ private:
|
|||
jni::TScopedLocalRef text(env, jni::ToJavaString(env, ugcUpdate.m_text.m_text));
|
||||
std::string locale(StringUtf8Multilang::GetLangByCode(ugcUpdate.m_text.m_deviceLang));
|
||||
jni::TScopedLocalRef localeRef(env, jni::ToJavaString(env, locale));
|
||||
std::string keyboardLocale;
|
||||
auto const & keyboardLangs = ugcUpdate.m_text.m_keyboardLangs;
|
||||
if (!keyboardLangs.empty())
|
||||
keyboardLocale = StringUtf8Multilang::GetLangByCode(keyboardLangs.front());
|
||||
jni::TScopedLocalRef keyboardLocaleRef(env, jni::ToJavaString(env, keyboardLocale));
|
||||
|
||||
jobject result = nullptr;
|
||||
if (!ugcUpdate.IsEmpty())
|
||||
result = env->NewObject(m_ugcUpdateClass, m_ugcUpdateCtor, ratings.get(),
|
||||
text.get(), ugc::ToMillisecondsSinceEpoch(ugcUpdate.m_time),
|
||||
localeRef.get());
|
||||
localeRef.get(), keyboardLocaleRef.get());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -202,11 +216,13 @@ 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;JLjava/lang/String;)V");
|
||||
env, m_ugcUpdateClass, "([Lcom/mapswithme/maps/ugc/UGC$Rating;Ljava/lang/String;"
|
||||
"JLjava/lang/String;Ljava/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_deviceLocaleFieldId = env->GetFieldID(m_ugcUpdateClass, "mDeviceLocale", "Ljava/lang/String;");
|
||||
m_keyboardLocaleFieldId = env->GetFieldID(m_ugcUpdateClass, "mKeyboardLocale", "Ljava/lang/String;");
|
||||
m_ratingNameFieldId = env->GetFieldID(g_ratingClazz, "mName", "Ljava/lang/String;");
|
||||
m_ratingValueFieldId = env->GetFieldID(g_ratingClazz, "mValue", "F");
|
||||
m_initialized = true;
|
||||
|
@ -222,7 +238,8 @@ private:
|
|||
jfieldID m_ratingArrayFieldId;
|
||||
jfieldID m_ratingTextFieldId;
|
||||
jfieldID m_updateTimeFieldId;
|
||||
jfieldID m_localeFieldId;
|
||||
jfieldID m_deviceLocaleFieldId;
|
||||
jfieldID m_keyboardLocaleFieldId;
|
||||
jfieldID m_ratingNameFieldId;
|
||||
jfieldID m_ratingValueFieldId;
|
||||
|
||||
|
|
|
@ -97,7 +97,8 @@ 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(), Language.getDefaultLocale());
|
||||
System.currentTimeMillis(), Language.getDefaultLocale(),
|
||||
Language.getKeyboardLocale());
|
||||
FeatureId featureId = getArguments().getParcelable(ARG_FEATURE_ID);
|
||||
if (featureId == null)
|
||||
{
|
||||
|
|
|
@ -15,15 +15,18 @@ class UGCUpdate
|
|||
private String mText;
|
||||
private long mTimeMillis;
|
||||
@NonNull
|
||||
private final String mLocale;
|
||||
private final String mDeviceLocale;
|
||||
@NonNull
|
||||
private final String mKeyboardLocale;
|
||||
|
||||
UGCUpdate(@Nullable UGC.Rating[] ratings, @Nullable String text, long timeMillis,
|
||||
@NonNull String locale)
|
||||
@NonNull String deviceLocale, @NonNull String keyboardLocale)
|
||||
{
|
||||
mRatings = ratings;
|
||||
mText = text;
|
||||
mTimeMillis = timeMillis;
|
||||
mLocale = locale;
|
||||
mDeviceLocale = deviceLocale;
|
||||
mKeyboardLocale = keyboardLocale;
|
||||
}
|
||||
|
||||
public void setText(@Nullable String text)
|
||||
|
|
Loading…
Add table
Reference in a new issue