aboutsummaryrefslogtreecommitdiff
path: root/src/porting_android.cpp
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2022-05-17 22:12:00 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2022-05-17 22:12:00 +0200
commit21df26984da91143c15587f5a03c98d68c3adc4e (patch)
treeaaa707a628ad331f67890023dffe1b4f60dd01d3 /src/porting_android.cpp
parentb09fc5de5cdb021f43ad32b7e3f50dc75c0bc622 (diff)
parenteabf05758e3ba5f6f4bb1b8d1d1f02179b84e410 (diff)
downloaddragonfireclient-21df26984da91143c15587f5a03c98d68c3adc4e.tar.xz
Merge branch 'master' of https://github.com/minetest/minetest
Diffstat (limited to 'src/porting_android.cpp')
-rw-r--r--src/porting_android.cpp67
1 files changed, 27 insertions, 40 deletions
diff --git a/src/porting_android.cpp b/src/porting_android.cpp
index 29e95b8ca..c71fe5ad8 100644
--- a/src/porting_android.cpp
+++ b/src/porting_android.cpp
@@ -152,48 +152,35 @@ static std::string javaStringToUTF8(jstring js)
return str;
}
-// Calls static method if obj is NULL
-static std::string getAndroidPath(
- jclass cls, jobject obj, jmethodID mt_getAbsPath, const char *getter)
-{
- // Get getter method
- jmethodID mt_getter;
- if (obj)
- mt_getter = jnienv->GetMethodID(cls, getter, "()Ljava/io/File;");
- else
- mt_getter = jnienv->GetStaticMethodID(cls, getter, "()Ljava/io/File;");
-
- // Call getter
- jobject ob_file;
- if (obj)
- ob_file = jnienv->CallObjectMethod(obj, mt_getter);
- else
- ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter);
-
- // Call getAbsolutePath
- auto js_path = (jstring) jnienv->CallObjectMethod(ob_file, mt_getAbsPath);
-
- return javaStringToUTF8(js_path);
-}
-
void initializePathsAndroid()
{
- // Get Environment class
- jclass cls_Env = jnienv->FindClass("android/os/Environment");
- // Get File class
- jclass cls_File = jnienv->FindClass("java/io/File");
- // Get getAbsolutePath method
- jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File,
- "getAbsolutePath", "()Ljava/lang/String;");
- std::string path_storage = getAndroidPath(cls_Env, nullptr,
- mt_getAbsPath, "getExternalStorageDirectory");
-
- path_user = path_storage + DIR_DELIM + PROJECT_NAME_C;
- path_share = path_storage + DIR_DELIM + PROJECT_NAME_C;
- path_locale = path_share + DIR_DELIM + "locale";
- path_cache = getAndroidPath(nativeActivity,
- app_global->activity->clazz, mt_getAbsPath, "getCacheDir");
- migrateCachePath();
+ // Set user and share paths
+ {
+ jmethodID getUserDataPath = jnienv->GetMethodID(nativeActivity,
+ "getUserDataPath", "()Ljava/lang/String;");
+ FATAL_ERROR_IF(getUserDataPath==nullptr,
+ "porting::initializePathsAndroid unable to find Java getUserDataPath method");
+ jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, getUserDataPath);
+ const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr);
+ path_user = javachars;
+ path_share = javachars;
+ path_locale = path_share + DIR_DELIM + "locale";
+ jnienv->ReleaseStringUTFChars((jstring) result, javachars);
+ }
+
+ // Set cache path
+ {
+ jmethodID getCachePath = jnienv->GetMethodID(nativeActivity,
+ "getCachePath", "()Ljava/lang/String;");
+ FATAL_ERROR_IF(getCachePath==nullptr,
+ "porting::initializePathsAndroid unable to find Java getCachePath method");
+ jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, getCachePath);
+ const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr);
+ path_cache = javachars;
+ jnienv->ReleaseStringUTFChars((jstring) result, javachars);
+
+ migrateCachePath();
+ }
}
void showInputDialog(const std::string &acceptButton, const std::string &hint,