Skip to content

Commit bbed381

Browse files
committed
- add a few more filesystem functions specific for android
1 parent 790bf31 commit bbed381

3 files changed

Lines changed: 54 additions & 24 deletions

File tree

core/pen/source/android/file_system.cpp

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,19 @@
88
#include "pen.h"
99
#include "pen_string.h"
1010

11-
namespace pen
12-
{
13-
bool filesystem_file_exists(const c8* filename)
14-
{
15-
return false;
16-
}
11+
#include <sys/stat.h>
1712

18-
/*
19-
pen_error filesystem_read_file_to_buffer(const c8* filename, void** p_buffer, u32& buffer_size)
20-
{
21-
return PEN_ERR_FILE_NOT_FOUND;
22-
}
23-
*/
2413

14+
namespace pen
15+
{
2516
pen_error filesystem_enum_volumes(fs_tree_node& results)
2617
{
2718
return PEN_ERR_OK;
2819
}
2920

3021
void filesystem_toggle_hidden_files()
3122
{
32-
23+
// stub
3324
}
3425

3526
bool match_file(struct dirent* ent, s32 num_wildcards, va_list wildcards)
@@ -54,17 +45,13 @@ namespace pen
5445

5546
pen_error filesystem_getmtime(const c8* filename, u32& mtime_out)
5647
{
57-
return PEN_ERR_OK;
58-
}
59-
60-
size_t filesystem_getsize(const c8* filename)
61-
{
62-
return 0;
63-
}
48+
struct stat st;
49+
if (stat(filename, &st) == 0) {
50+
mtime_out = (u32)st.st_mtime; // modification time
51+
return PEN_ERR_OK;
52+
}
6453

65-
const c8* filesystem_get_user_directory()
66-
{
67-
return nullptr;
54+
return PEN_ERR_FILE_NOT_FOUND;
6855
}
6956

7057
const c8** filesystem_get_user_directory(s32& directory_depth)

core/pen/source/android/os.cpp

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
#include <EGL/egl.h>
1818
#include <EGL/eglext.h>
1919

20+
// setup diig android build
2021
// filesystem functions
2122
// openURL etc
22-
// sort out fmod version
2323

2424
// BLOG NOTES:
2525
// - gradle version, always changing, sdk etc bs bs bs
@@ -48,6 +48,7 @@
4848
// touch input events
4949
// orientation changes
5050
// debug info? on device
51+
// sort out fmod version
5152

5253
#define PEN_JNIFUNC(ret, actname, funcname) extern "C" JNIEXPORT ret JNICALL Java_cc_pmtech_##actname##_##funcname
5354

@@ -92,6 +93,7 @@ namespace
9293
{
9394
pen::window_frame window;
9495
pen::pen_creation_params params;
96+
Str user_dir;
9597
};
9698
pmtech_context s_pmtech_context;
9799
}
@@ -117,6 +119,13 @@ PEN_JNIFUNC(void, pen_1activity, register_1asset_1manager)(JNIEnv* env, jclass t
117119
s_android_context.m_asset_manager = AAssetManager_fromJava(env, asset_manager);
118120
}
119121

122+
123+
PEN_JNIFUNC(void, pen_1activity, set_1persistent_1data_1dir)(JNIEnv* env, jobject thiz, jstring cache_dir)
124+
{
125+
jboolean iscopy;
126+
s_pmtech_context.user_dir = env->GetStringUTFChars(cache_dir, &iscopy);
127+
}
128+
120129
PEN_JNIFUNC(void, SurfaceWrapper, render)(JNIEnv* env, jclass thiz, jobject caller)
121130
{
122131
pen::os_update();
@@ -303,6 +312,38 @@ namespace pen
303312
return false;
304313
}
305314

315+
const c8* filesystem_get_user_directory()
316+
{
317+
return s_pmtech_context.user_dir.c_str();
318+
}
319+
320+
bool filesystem_file_exists(const c8* filename)
321+
{
322+
AAsset* asset = AAssetManager_open(s_android_context.m_asset_manager, filename, AASSET_MODE_STREAMING);
323+
324+
if(asset)
325+
{
326+
AAsset_close(asset);
327+
return true;
328+
}
329+
330+
return false;
331+
}
332+
333+
size_t filesystem_getsize(const c8* filename)
334+
{
335+
AAsset* asset = AAssetManager_open(s_android_context.m_asset_manager, filename, AASSET_MODE_STREAMING);
336+
if(asset)
337+
{
338+
off64_t length = AAsset_getLength64(asset);
339+
AAsset_close(asset);
340+
341+
return length;
342+
}
343+
344+
return 0;
345+
}
346+
306347
pen_error filesystem_read_file_to_buffer(const c8* filename, void** p_buffer, u32& buffer_size)
307348
{
308349
AAsset* asset = AAssetManager_open(s_android_context.m_asset_manager, filename, AASSET_MODE_STREAMING);

core/template/android/activity/pen_activity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ public class pen_activity extends Activity {
224224

225225
public static native void entry();
226226
public static native void register_asset_manager(AssetManager asset_manager);
227+
public static native void set_persistent_data_dir(String cache_dir);
227228

228229
void set_immersive_mode()
229230
{
@@ -249,6 +250,7 @@ protected void onCreate(Bundle arg0) {
249250
entry();
250251

251252
// register asset manager
253+
set_persistent_data_dir(this.getCacheDir().getPath());
252254
register_asset_manager(getApplicationContext().getAssets());
253255

254256
// setup view / surface

0 commit comments

Comments
 (0)