diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-05-04 13:24:02 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-05-04 13:24:02 -0300 |
commit | fbbe7dcdfbd09fc6ef5614dea2183481a27e4f4e (patch) | |
tree | 4e783f0e4347a2f612e6b85398c83a492d7b090f /platform/android/dir_access_jandroid.cpp | |
parent | 7f5b744b92256e42aa3c700ee88d8318732935c6 (diff) | |
parent | 6f8bd899311d459b9e391b4acf72ccfa5cc1d806 (diff) |
Merge remote-tracking branch 'origin/master'
Conflicts:
drivers/windows/dir_access_windows.cpp
Diffstat (limited to 'platform/android/dir_access_jandroid.cpp')
-rw-r--r-- | platform/android/dir_access_jandroid.cpp | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp index 98f20b2636..2b5fc6a50a 100644 --- a/platform/android/dir_access_jandroid.cpp +++ b/platform/android/dir_access_jandroid.cpp @@ -5,7 +5,7 @@ /* GODOT ENGINE */ /* http://www.godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur. */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ @@ -31,11 +31,15 @@ #include "dir_access_jandroid.h" #include "file_access_jandroid.h" #include "thread_jandroid.h" +#include "print_string.h" + + jobject DirAccessJAndroid::io=NULL; jclass DirAccessJAndroid::cls=NULL; jmethodID DirAccessJAndroid::_dir_open=NULL; jmethodID DirAccessJAndroid::_dir_next=NULL; jmethodID DirAccessJAndroid::_dir_close=NULL; +jmethodID DirAccessJAndroid::_dir_is_dir=NULL; DirAccess *DirAccessJAndroid::create_fs() { @@ -67,43 +71,18 @@ String DirAccessJAndroid::get_next(){ if (!str) return ""; - int sl = env->GetStringLength(str); - if (sl==0) { - env->DeleteLocalRef((jobject)str); - return ""; - } - - CharString cs; - cs.resize(sl+1); - env->GetStringRegion(str,0,sl,(jchar*)&cs[0]); - cs[sl]=0; - - String ret; - ret.parse_utf8(&cs[0]); + String ret = String::utf8(env->GetStringUTFChars( (jstring)str, NULL )); env->DeleteLocalRef((jobject)str); - return ret; } bool DirAccessJAndroid::current_is_dir() const{ - JNIEnv *env = ThreadAndroid::get_env(); - String sd; - if (current_dir=="") - sd=current; - else - sd=current_dir+"/"+current; - - jstring js = env->NewStringUTF(sd.utf8().get_data()); - - int res = env->CallIntMethod(io,_dir_open,js); - if (res<=0) - return false; - env->CallObjectMethod(io,_dir_close,res); + JNIEnv *env = ThreadAndroid::get_env(); + return env->CallBooleanMethod(io,_dir_is_dir,id); - return true; } bool DirAccessJAndroid::current_is_hidden() const { @@ -142,24 +121,31 @@ Error DirAccessJAndroid::change_dir(String p_dir){ String new_dir; + if (p_dir!="res://" && p_dir.length()>1 && p_dir.ends_with("/")) + p_dir=p_dir.substr(0,p_dir.length()-1); + if (p_dir.begins_with("/")) new_dir=p_dir.substr(1,p_dir.length()); else if (p_dir.begins_with("res://")) new_dir=p_dir.substr(6,p_dir.length()); - else //relative - new_dir=new_dir+"/"+p_dir; + else if (current_dir=="") + new_dir=p_dir; + else + new_dir=current_dir.plus_file(p_dir); + //print_line("new dir is: "+new_dir); //test if newdir exists new_dir=new_dir.simplify_path(); jstring js = env->NewStringUTF(new_dir.utf8().get_data()); int res = env->CallIntMethod(io,_dir_open,js); + env->DeleteLocalRef(js); if (res<=0) return ERR_INVALID_PARAMETER; env->CallObjectMethod(io,_dir_close,res); - + current_dir=new_dir; return OK; } @@ -176,7 +162,7 @@ bool DirAccessJAndroid::file_exists(String p_file){ if (current_dir=="") sd=p_file; else - sd=current_dir+"/"+p_file; + sd=current_dir.plus_file(p_file); FileAccessJAndroid *f = memnew(FileAccessJAndroid); bool exists = f->file_exists(sd); @@ -190,12 +176,19 @@ bool DirAccessJAndroid::dir_exists(String p_dir) { JNIEnv *env = ThreadAndroid::get_env(); String sd; + + if (current_dir=="") sd=p_dir; - else - sd=current_dir+"/"+p_dir; + else { + if (p_dir.is_rel_path()) + sd=current_dir.plus_file(p_dir); + else + sd=fix_path(p_dir); + } + + String path=sd.simplify_path(); - String path=fix_path(sd).simplify_path(); if (path.begins_with("/")) path=path.substr(1,path.length()); else if (path.begins_with("res://")) @@ -203,6 +196,7 @@ bool DirAccessJAndroid::dir_exists(String p_dir) { jstring js = env->NewStringUTF(path.utf8().get_data()); int res = env->CallIntMethod(io,_dir_open,js); + env->DeleteLocalRef(js); if (res<=0) return false; @@ -256,6 +250,10 @@ void DirAccessJAndroid::setup( jobject p_io) { if(_dir_close != 0) { __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_close ok!!"); } + _dir_is_dir = env->GetMethodID(cls, "dir_is_dir", "(I)Z"); + if(_dir_is_dir != 0) { + __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_is_dir ok!!"); + } // (*env)->CallVoidMethod(env,obj,aMethodID, myvar); } |