From fee82ce2883af4627dd23060cf76226594925482 Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Wed, 4 Sep 2013 12:07:05 +0200 Subject: [PATCH] Fetch language/region code, fix bug in VFSGetFileInfo --- android/app-android.cpp | 3 ++- .../com/henrikrydgard/libnative/NativeActivity.java | 6 ++++-- .../src/com/henrikrydgard/libnative/NativeApp.java | 2 +- file/zip_read.cpp | 5 ++++- i18n/i18n.cpp | 11 +++++++++++ i18n/i18n.h | 1 + 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/android/app-android.cpp b/android/app-android.cpp index 696e8005d0..59f10dff0d 100644 --- a/android/app-android.cpp +++ b/android/app-android.cpp @@ -143,7 +143,7 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_audioConfig } extern "C" void Java_com_henrikrydgard_libnative_NativeApp_init - (JNIEnv *env, jclass, jint xxres, jint yyres, jint dpi, jstring jdevicetype, jstring japkpath, + (JNIEnv *env, jclass, jint xxres, jint yyres, jint dpi, jstring jdevicetype, jstring jlangRegion, jstring japkpath, jstring jdataDir, jstring jexternalDir, jstring jlibraryDir, jstring jinstallID, jboolean juseNativeAudio) { jniEnvUI = env; @@ -167,6 +167,7 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_init VFSRegister("", new ZipAssetReader(apkPath.c_str(), "assets/")); systemName = GetJavaString(env, jdevicetype); + langRegion = GetJavaString(env, jlangRegion); std::string externalDir = GetJavaString(env, jexternalDir); std::string user_data_path = GetJavaString(env, jdataDir) + "/"; diff --git a/android/src/com/henrikrydgard/libnative/NativeActivity.java b/android/src/com/henrikrydgard/libnative/NativeActivity.java index ae72ed4e40..f0cb66d8d6 100644 --- a/android/src/com/henrikrydgard/libnative/NativeActivity.java +++ b/android/src/com/henrikrydgard/libnative/NativeActivity.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.RandomAccessFile; import java.lang.reflect.Field; import java.util.List; +import java.util.Locale; import java.util.UUID; import android.annotation.SuppressLint; @@ -193,10 +194,11 @@ public class NativeActivity extends Activity { int dpi = metrics.densityDpi; String deviceType = Build.MANUFACTURER + ":" + Build.MODEL; - + String languageRegion = Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry(); + // INIT! NativeApp.audioConfig(optimalFramesPerBuffer, optimalSampleRate); - NativeApp.init(scrWidth, scrHeight, dpi, deviceType, apkFilePath, dataDir, externalStorageDir, libraryDir, installID, useOpenSL); + NativeApp.init(scrWidth, scrHeight, dpi, deviceType, languageRegion, apkFilePath, dataDir, externalStorageDir, libraryDir, installID, useOpenSL); Log.i(TAG, "Device: " + deviceType); Log.i(TAG, "W : " + scrWidth + " H: " + scrHeight + " rate: " + scrRefreshRate + " fmt: " + scrPixelFormat + " dpi: " + dpi); diff --git a/android/src/com/henrikrydgard/libnative/NativeApp.java b/android/src/com/henrikrydgard/libnative/NativeApp.java index 62e9e3af5b..a39e00ea45 100644 --- a/android/src/com/henrikrydgard/libnative/NativeApp.java +++ b/android/src/com/henrikrydgard/libnative/NativeApp.java @@ -1,7 +1,7 @@ package com.henrikrydgard.libnative; public class NativeApp { - public static native void init(int xxres, int yyres, int dpi, String deviceType, String apkPath, String dataDir, String externalDir, String libraryDir, String installID, boolean useOpenSL); + public static native void init(int xxres, int yyres, int dpi, String deviceType, String languageRegion, String apkPath, String dataDir, String externalDir, String libraryDir, String installID, boolean useOpenSL); public static native void resized(int xxres, int yyres); diff --git a/file/zip_read.cpp b/file/zip_read.cpp index 4d2664d442..44c9ac491f 100644 --- a/file/zip_read.cpp +++ b/file/zip_read.cpp @@ -278,7 +278,10 @@ bool VFSGetFileInfo(const char *path, FileInfo *info) int prefix_len = (int)strlen(entries[i].prefix); if (prefix_len >= fn_len) continue; if (0 == memcmp(path, entries[i].prefix, prefix_len)) { - return entries[i].reader->GetFileInfo(path + prefix_len, info); + if (entries[i].reader->GetFileInfo(path + prefix_len, info)) + return true; + else + continue; } } ELOG("Missing filesystem for %s", path); diff --git a/i18n/i18n.cpp b/i18n/i18n.cpp index 7bfa5ae5d7..44d2769fa5 100644 --- a/i18n/i18n.cpp +++ b/i18n/i18n.cpp @@ -1,6 +1,7 @@ #include "base/logging.h" #include "i18n/i18n.h" #include "file/ini_file.h" +#include "file/vfs.h" I18NRepo i18nrepo; @@ -56,6 +57,16 @@ std::string I18NRepo::GetIniPath(const std::string &languageID) const { return "lang/" + languageID + ".ini"; } +bool I18NRepo::IniExists(const std::string &languageID) const { + FileInfo info; + if (!VFSGetFileInfo(GetIniPath(languageID).c_str(), &info)) + return false; + if (!info.exists) + return false; + return true; +} + + bool I18NRepo::LoadIni(const std::string &languageID) { IniFile ini; if (!ini.LoadFromVFS(GetIniPath(languageID))) { diff --git a/i18n/i18n.h b/i18n/i18n.h index b91d6840da..052f6221c4 100644 --- a/i18n/i18n.h +++ b/i18n/i18n.h @@ -62,6 +62,7 @@ public: I18NRepo() {} ~I18NRepo(); + bool IniExists(const std::string &languageID) const; bool LoadIni(const std::string &languageID); // NOT the filename! void SaveIni(const std::string &languageID);