2023-05-31 08:37:04 +02:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <jni.h>
|
|
|
|
|
|
|
|
#define ANDROID_STORAGE_FUNCTIONS(V) \
|
|
|
|
V(OpenContentUri, int, (const std::string& filepath, OpenMode openmode), open_content_uri, \
|
|
|
|
"openContentUri", "(Ljava/lang/String;Ljava/lang/String;)I")
|
|
|
|
|
|
|
|
#define ANDROID_SINGLE_PATH_DETERMINE_FUNCTIONS(V) \
|
2023-06-16 07:32:46 +02:00
|
|
|
V(GetSize, std::uint64_t, get_size, CallStaticLongMethod, "getSize", "(Ljava/lang/String;)J") \
|
|
|
|
V(IsDirectory, bool, is_directory, CallStaticBooleanMethod, "isDirectory", \
|
|
|
|
"(Ljava/lang/String;)Z") \
|
|
|
|
V(Exists, bool, file_exists, CallStaticBooleanMethod, "exists", "(Ljava/lang/String;)Z")
|
2023-05-31 08:37:04 +02:00
|
|
|
|
|
|
|
namespace Common::FS::Android {
|
|
|
|
|
|
|
|
static JavaVM* g_jvm = nullptr;
|
|
|
|
static jclass native_library = nullptr;
|
|
|
|
|
|
|
|
#define FR(FunctionName, ReturnValue, JMethodID, Caller, JMethodName, Signature) F(JMethodID)
|
|
|
|
#define FS(FunctionName, ReturnValue, Parameters, JMethodID, JMethodName, Signature) F(JMethodID)
|
|
|
|
#define F(JMethodID) static jmethodID JMethodID = nullptr;
|
|
|
|
ANDROID_SINGLE_PATH_DETERMINE_FUNCTIONS(FR)
|
|
|
|
ANDROID_STORAGE_FUNCTIONS(FS)
|
|
|
|
#undef F
|
|
|
|
#undef FS
|
|
|
|
#undef FR
|
|
|
|
|
|
|
|
enum class OpenMode {
|
|
|
|
Read,
|
|
|
|
Write,
|
|
|
|
ReadWrite,
|
|
|
|
WriteAppend,
|
|
|
|
WriteTruncate,
|
|
|
|
ReadWriteAppend,
|
|
|
|
ReadWriteTruncate,
|
|
|
|
Never
|
|
|
|
};
|
|
|
|
|
|
|
|
void RegisterCallbacks(JNIEnv* env, jclass clazz);
|
|
|
|
|
|
|
|
void UnRegisterCallbacks();
|
|
|
|
|
|
|
|
bool IsContentUri(const std::string& path);
|
|
|
|
|
|
|
|
#define FS(FunctionName, ReturnValue, Parameters, JMethodID, JMethodName, Signature) \
|
|
|
|
F(FunctionName, Parameters, ReturnValue)
|
|
|
|
#define F(FunctionName, Parameters, ReturnValue) ReturnValue FunctionName Parameters;
|
|
|
|
ANDROID_STORAGE_FUNCTIONS(FS)
|
|
|
|
#undef F
|
|
|
|
#undef FS
|
|
|
|
|
|
|
|
#define FR(FunctionName, ReturnValue, JMethodID, Caller, JMethodName, Signature) \
|
|
|
|
F(FunctionName, ReturnValue)
|
|
|
|
#define F(FunctionName, ReturnValue) ReturnValue FunctionName(const std::string& filepath);
|
|
|
|
ANDROID_SINGLE_PATH_DETERMINE_FUNCTIONS(FR)
|
|
|
|
#undef F
|
|
|
|
#undef FR
|
|
|
|
|
|
|
|
} // namespace Common::FS::Android
|