From 580142c9eaf7fafd4f15827545aaa7f4a1d03322 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Wed, 25 Sep 2019 21:47:30 +0200 Subject: ANDROID: Hook getAllStorageLocations() into JNI --- backends/platform/android/jni.cpp | 36 ++++++++++++++++++++++ backends/platform/android/jni.h | 4 +++ .../org/scummvm/scummvm/ExternalStorage.java | 2 +- .../android/org/scummvm/scummvm/ScummVM.java | 2 +- .../org/scummvm/scummvm/ScummVMActivity.java | 4 +-- 5 files changed, 44 insertions(+), 4 deletions(-) (limited to 'backends/platform/android') diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp index 2c27838f6a..8c330c0e89 100644 --- a/backends/platform/android/jni.cpp +++ b/backends/platform/android/jni.cpp @@ -86,6 +86,7 @@ jmethodID JNI::_MID_setWindowCaption = 0; jmethodID JNI::_MID_showVirtualKeyboard = 0; jmethodID JNI::_MID_showKeyboardControl = 0; jmethodID JNI::_MID_getSysArchives = 0; +jmethodID JNI::_MID_getAllStorageLocations = 0; jmethodID JNI::_MID_initSurface = 0; jmethodID JNI::_MID_deinitSurface = 0; @@ -531,6 +532,7 @@ void JNI::create(JNIEnv *env, jobject self, jobject asset_manager, FIND_METHOD(, showVirtualKeyboard, "(Z)V"); FIND_METHOD(, showKeyboardControl, "(Z)V"); FIND_METHOD(, getSysArchives, "()[Ljava/lang/String;"); + FIND_METHOD(, getAllStorageLocations, "()[Ljava/lang/String;"); FIND_METHOD(, initSurface, "()Ljavax/microedition/khronos/egl/EGLSurface;"); FIND_METHOD(, deinitSurface, "()V"); @@ -697,4 +699,38 @@ jstring JNI::getCurrentCharset(JNIEnv *env, jobject self) { return env->NewStringUTF("ISO-8859-1"); } +Common::Array JNI::getAllStorageLocations() { + Common::Array *res = new Common::Array(); + + JNIEnv *env = JNI::getEnv(); + + jobjectArray array = + (jobjectArray)env->CallObjectMethod(_jobj, _MID_getAllStorageLocations); + + if (env->ExceptionCheck()) { + LOGE("Error finding system archive path"); + + env->ExceptionDescribe(); + env->ExceptionClear(); + + return *res; + } + + jsize size = env->GetArrayLength(array); + for (jsize i = 0; i < size; ++i) { + jstring path_obj = (jstring)env->GetObjectArrayElement(array, i); + const char *path = env->GetStringUTFChars(path_obj, 0); + + if (path != 0) { + res->push_back(path); + env->ReleaseStringUTFChars(path_obj, path); + } + + env->DeleteLocalRef(path_obj); + } + + return *res; +} + + #endif diff --git a/backends/platform/android/jni.h b/backends/platform/android/jni.h index b6e5df819e..fe4b948070 100644 --- a/backends/platform/android/jni.h +++ b/backends/platform/android/jni.h @@ -30,6 +30,7 @@ #include "common/fs.h" #include "common/archive.h" +#include "common/array.h" class OSystem_Android; @@ -79,6 +80,8 @@ public: static inline int writeAudio(JNIEnv *env, jbyteArray &data, int offset, int size); + static Common::Array getAllStorageLocations(); + private: static JavaVM *_vm; // back pointer to (java) peer instance @@ -104,6 +107,7 @@ private: static jmethodID _MID_showVirtualKeyboard; static jmethodID _MID_showKeyboardControl; static jmethodID _MID_getSysArchives; + static jmethodID _MID_getAllStorageLocations; static jmethodID _MID_initSurface; static jmethodID _MID_deinitSurface; diff --git a/backends/platform/android/org/scummvm/scummvm/ExternalStorage.java b/backends/platform/android/org/scummvm/scummvm/ExternalStorage.java index 234fba9bff..d8bab31517 100644 --- a/backends/platform/android/org/scummvm/scummvm/ExternalStorage.java +++ b/backends/platform/android/org/scummvm/scummvm/ExternalStorage.java @@ -104,7 +104,7 @@ public class ExternalStorage { List mountHash = new ArrayList(10); - for (String mount : mMounts){ + for (String mount : mMounts) { File root = new File(mount); if (root.exists() && root.isDirectory() && root.canRead()) { File[] list = root.listFiles(); diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVM.java b/backends/platform/android/org/scummvm/scummvm/ScummVM.java index ea7bf5242d..34349d4606 100644 --- a/backends/platform/android/org/scummvm/scummvm/ScummVM.java +++ b/backends/platform/android/org/scummvm/scummvm/ScummVM.java @@ -63,7 +63,7 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable { abstract protected void showVirtualKeyboard(boolean enable); abstract protected void showKeyboardControl(boolean enable); abstract protected String[] getSysArchives(); - abstract protected List getAllStorageLocations(); + abstract protected String[] getAllStorageLocations(); public ScummVM(AssetManager asset_manager, SurfaceHolder holder) { _asset_manager = asset_manager; diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java index a955f02327..6978f6e3b0 100644 --- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java +++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java @@ -157,8 +157,8 @@ public class ScummVMActivity extends Activity { } @Override - protected List getAllStorageLocations() { - return _externalStorage.getAllStorageLocations(); + protected String[] getAllStorageLocations() { + return _externalStorage.getAllStorageLocations().toArray(new String[0]); } } -- cgit v1.2.3