mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
[Android] Implement native file picker support
This commit is contained in:
parent
0dfd18c84b
commit
b2130efb31
12 changed files with 318 additions and 7 deletions
|
@ -68,6 +68,7 @@ GodotJavaWrapper::GodotJavaWrapper(JNIEnv *p_env, jobject p_activity, jobject p_
|
|||
_set_clipboard = p_env->GetMethodID(godot_class, "setClipboard", "(Ljava/lang/String;)V");
|
||||
_has_clipboard = p_env->GetMethodID(godot_class, "hasClipboard", "()Z");
|
||||
_show_input_dialog = p_env->GetMethodID(godot_class, "showInputDialog", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
||||
_show_file_picker = p_env->GetMethodID(godot_class, "showFilePicker", "(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;)V");
|
||||
_request_permission = p_env->GetMethodID(godot_class, "requestPermission", "(Ljava/lang/String;)Z");
|
||||
_request_permissions = p_env->GetMethodID(godot_class, "requestPermissions", "()Z");
|
||||
_get_granted_permissions = p_env->GetMethodID(godot_class, "getGrantedPermissions", "()[Ljava/lang/String;");
|
||||
|
@ -286,6 +287,29 @@ Error GodotJavaWrapper::show_input_dialog(const String &p_title, const String &p
|
|||
}
|
||||
}
|
||||
|
||||
Error GodotJavaWrapper::show_file_picker(const String &p_current_directory, const String &p_filename, int p_mode, const Vector<String> &p_filters) {
|
||||
if (_show_file_picker) {
|
||||
JNIEnv *env = get_jni_env();
|
||||
ERR_FAIL_NULL_V(env, ERR_UNCONFIGURED);
|
||||
jstring j_current_directory = env->NewStringUTF(p_current_directory.utf8().get_data());
|
||||
jstring j_filename = env->NewStringUTF(p_filename.utf8().get_data());
|
||||
jint j_mode = p_mode;
|
||||
jobjectArray j_filters = env->NewObjectArray(p_filters.size(), env->FindClass("java/lang/String"), nullptr);
|
||||
for (int i = 0; i < p_filters.size(); ++i) {
|
||||
jstring j_filter = env->NewStringUTF(p_filters[i].utf8().get_data());
|
||||
env->SetObjectArrayElement(j_filters, i, j_filter);
|
||||
env->DeleteLocalRef(j_filter);
|
||||
}
|
||||
env->CallVoidMethod(godot_instance, _show_file_picker, j_current_directory, j_filename, j_mode, j_filters);
|
||||
env->DeleteLocalRef(j_current_directory);
|
||||
env->DeleteLocalRef(j_filename);
|
||||
env->DeleteLocalRef(j_filters);
|
||||
return OK;
|
||||
} else {
|
||||
return ERR_UNCONFIGURED;
|
||||
}
|
||||
}
|
||||
|
||||
bool GodotJavaWrapper::request_permission(const String &p_name) {
|
||||
if (_request_permission) {
|
||||
JNIEnv *env = get_jni_env();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue