This commit is contained in:
izzy2lost
2025-10-26 06:57:49 -04:00
parent df94a09e28
commit 1e1c8371cf
2 changed files with 68 additions and 2 deletions
+23 -2
View File
@@ -1,4 +1,23 @@
#include "libultraship/libultraship.h"
#include <string>
#ifdef __ANDROID__
#include <jni.h>
extern "C" {
// Forward declare the JNI function to get save directory
const char* Android_GetSaveDir();
}
#endif
static std::string GetSaveFilePath() {
#ifdef __ANDROID__
const char* saveDir = Android_GetSaveDir();
if (saveDir != nullptr) {
return std::string(saveDir) + "/default.sav";
}
#endif
return "default.sav";
}
extern "C" {
@@ -10,7 +29,8 @@ int32_t osEepromLongRead(OSMesgQueue* mq, uint8_t address, uint8_t* buffer, int3
u8 content[512];
s32 ret = -1;
FILE* fp = fopen("default.sav", "rb");
std::string savePath = GetSaveFilePath();
FILE* fp = fopen(savePath.c_str(), "rb");
if (fp == NULL) {
return -1;
}
@@ -34,7 +54,8 @@ int32_t osEepromLongWrite(OSMesgQueue* mq, uint8_t address, uint8_t* buffer, int
}
memcpy(content + address * 8, buffer, length);
FILE* fp = fopen("default.sav", "wb");
std::string savePath = GetSaveFilePath();
FILE* fp = fopen(savePath.c_str(), "wb");
if (fp == NULL) {
return -1;
}
+45
View File
@@ -913,6 +913,51 @@ extern "C" void GameEngine_Free(void* ptr) {
#ifdef __ANDROID__
#include <jni.h>
static const char* sCachedSaveDir = nullptr;
extern "C" const char* Android_GetSaveDir() {
if (sCachedSaveDir != nullptr) {
return sCachedSaveDir;
}
JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv();
if (env == nullptr) {
return nullptr;
}
jclass mainActivityClass = env->FindClass("com/starship/android/MainActivity");
if (mainActivityClass == nullptr) {
return nullptr;
}
jmethodID getSaveDirMethod = env->GetStaticMethodID(mainActivityClass, "getSaveDir", "()Ljava/lang/String;");
if (getSaveDirMethod == nullptr) {
env->DeleteLocalRef(mainActivityClass);
return nullptr;
}
jstring jSaveDir = (jstring)env->CallStaticObjectMethod(mainActivityClass, getSaveDirMethod);
if (jSaveDir == nullptr) {
env->DeleteLocalRef(mainActivityClass);
return nullptr;
}
const char* saveDirCStr = env->GetStringUTFChars(jSaveDir, nullptr);
if (saveDirCStr != nullptr) {
// Cache the save directory path
static std::string cachedPath = saveDirCStr;
sCachedSaveDir = cachedPath.c_str();
env->ReleaseStringUTFChars(jSaveDir, saveDirCStr);
}
env->DeleteLocalRef(jSaveDir);
env->DeleteLocalRef(mainActivityClass);
return sCachedSaveDir;
}
extern "C" JNIEXPORT void JNICALL
Java_com_starship_android_MainActivity_nativeSetAppDirs(JNIEnv* env, jclass, jstring jpath) {
// No-op: paths resolved via SDL_AndroidGetInternalStoragePath in GameEngine::GameEngine()