]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/porting_android.cpp
Allow resetting celestial vault elements by leaving its arguments empty (#11922)
[dragonfireclient.git] / src / porting_android.cpp
index 2c91df2356edea4dd5f9f9025eb32de16bed7dc6..c71fe5ad88e1c733de7a9a7afceee4d7163139db 100644 (file)
@@ -152,47 +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_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,
@@ -213,6 +201,18 @@ void showInputDialog(const std::string &acceptButton, const std::string &hint,
                        jacceptButton, jhint, jcurrent, jeditType);
 }
 
+void openURIAndroid(const std::string &url)
+{
+       jmethodID url_open = jnienv->GetMethodID(nativeActivity, "openURI",
+               "(Ljava/lang/String;)V");
+
+       FATAL_ERROR_IF(url_open == nullptr,
+               "porting::openURIAndroid unable to find java openURI method");
+
+       jstring jurl = jnienv->NewStringUTF(url.c_str());
+       jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl);
+}
+
 int getInputDialogState()
 {
        jmethodID dialogstate = jnienv->GetMethodID(nativeActivity,