Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/jni/Android.mk1
-rw-r--r--android/jni/com/mapswithme/platform/Language.cpp47
-rw-r--r--android/src/com/mapswithme/maps/MWMActivity.java11
-rw-r--r--platform/preferred_languages.cpp5
4 files changed, 51 insertions, 13 deletions
diff --git a/android/jni/Android.mk b/android/jni/Android.mk
index a30de29342..abc4f8119e 100644
--- a/android/jni/Android.mk
+++ b/android/jni/Android.mk
@@ -36,6 +36,7 @@ LOCAL_SRC_FILES := \
com/mapswithme/maps/Lifecycle.cpp \
com/mapswithme/platform/Platform.cpp \
com/mapswithme/platform/HttpThread.cpp \
+ com/mapswithme/platform/Language.cpp \
com/mapswithme/jni/jni_thread.cpp \
com/mapswithme/jni/jni_method.cpp \
nv_thread/nv_thread.cpp \
diff --git a/android/jni/com/mapswithme/platform/Language.cpp b/android/jni/com/mapswithme/platform/Language.cpp
new file mode 100644
index 0000000000..348f23d6a7
--- /dev/null
+++ b/android/jni/com/mapswithme/platform/Language.cpp
@@ -0,0 +1,47 @@
+#include <jni.h>
+
+#include "../../../../../base/assert.hpp"
+#include "../../../../../base/logging.hpp"
+
+#include "../../../../../std/string.hpp"
+
+/// Defined and initialized in MWMActivity.cpp
+extern JavaVM * g_jvm;
+
+#define DEFAULT_LANG "en"
+
+/// This function is called from native c++ code
+string GetAndroidSystemLanguage()
+{
+ JNIEnv * env = 0;
+ if (!g_jvm || g_jvm->AttachCurrentThread(&env, 0) || !env)
+ {
+ LOG(LWARNING, ("Can't attach thread"));
+ return DEFAULT_LANG;
+ }
+
+ jclass localeClass = env->FindClass("java/util/Locale");
+ ASSERT(localeClass, ("Can't find java class java/util/Locale"));
+
+ jmethodID localeGetDefaultId = env->GetStaticMethodID(localeClass, "getDefault", "()Ljava/util/Locale;");
+ ASSERT(localeGetDefaultId, ("Can't find static java/util/Locale.getDefault() method"));
+
+ jobject localeInstance = env->CallStaticObjectMethod(localeClass, localeGetDefaultId);
+ ASSERT(localeInstance, ("Locale.getDefault() returned NULL"));
+
+ jmethodID localeGetLanguageId = env->GetMethodID(localeClass, "getLanguage", "()Ljava/lang/String;");
+ ASSERT(localeGetLanguageId, ("Can't find java/util/Locale.getLanguage() method"));
+
+ jstring langString = (jstring)env->CallObjectMethod(localeInstance, localeGetLanguageId);
+ ASSERT(langString, ("Locale.getLanguage() returned NULL"));
+
+ char const * langUtf8 = env->GetStringUTFChars(langString, 0);
+ string result(DEFAULT_LANG);
+ if (langUtf8 != 0)
+ {
+ result = langUtf8;
+ env->ReleaseStringUTFChars(langString, langUtf8);
+ }
+ g_jvm->DetachCurrentThread();
+ return result;
+}
diff --git a/android/src/com/mapswithme/maps/MWMActivity.java b/android/src/com/mapswithme/maps/MWMActivity.java
index 6623cdd4ee..9ed769cc0c 100644
--- a/android/src/com/mapswithme/maps/MWMActivity.java
+++ b/android/src/com/mapswithme/maps/MWMActivity.java
@@ -146,15 +146,6 @@ public class MWMActivity extends NvEventQueueActivity implements
startActivity(new Intent(this, DownloadUI.class));
}
- private void setupLanguages()
- {
- /*
- * Log.d(TAG, "Default Language : " + Locale.getDefault().getLanguage());
- * for (Locale l : Locale.getAvailableLocales()) Log.d(TAG, l.getLanguage()
- * + " : " + l.getVariant() + " : " + l.toString());
- */
- }
-
@Override
public void onCreate(Bundle savedInstanceState)
{
@@ -174,8 +165,6 @@ public class MWMActivity extends NvEventQueueActivity implements
nativeInit(metrics.densityDpi, getAppBundlePath(), extStoragePath, getTmpPath(), extTmpPath, getSettingsPath());
- setupLanguages();
-
checkMeasurementSystem();
m_timer = new VideoTimer();
diff --git a/platform/preferred_languages.cpp b/platform/preferred_languages.cpp
index f78dde9548..cde6ae00cc 100644
--- a/platform/preferred_languages.cpp
+++ b/platform/preferred_languages.cpp
@@ -20,7 +20,8 @@
#include "../std/cstdlib.hpp"
#elif defined(OMIM_OS_ANDROID)
- /// @TODO
+ /// Body for this function is inside android/jni sources
+ string GetAndroidSystemLanguage();
#else
#error "Define language preferences for your platform"
@@ -155,7 +156,7 @@ void SystemPreferredLanguages(vector<string> & languages)
languages.push_back(p);
#elif defined(OMIM_OS_ANDROID)
- /// @TODO
+ languages.push_back(GetAndroidSystemLanguage());
#else
#error "Define language preferences for your platform"