Files
Aerofoil/AerofoilAndroid/app/jni/main/GpFileSystem_Android.h

59 lines
2.2 KiB
C
Raw Permalink Normal View History

#pragma once
#include "IGpFileSystem.h"
#include "GpCoreDefs.h"
2020-10-13 00:15:56 -04:00
#include <jni.h>
#include <string>
2020-10-13 00:15:56 -04:00
struct IGpMutex;
2020-10-24 10:03:12 -04:00
class GpFileSystem_Android final : public IGpFileSystem
{
public:
GpFileSystem_Android();
2020-10-13 00:15:56 -04:00
~GpFileSystem_Android();
void InitJNI();
void ShutdownJNI();
bool FileExists(PortabilityLayer::VirtualDirectory_t virtualDirectory, const char *path) override;
2021-03-07 04:24:13 -05:00
bool FileLocked(PortabilityLayer::VirtualDirectory_t virtualDirectory, const char *path, bool &exists) override;
2020-10-13 00:15:56 -04:00
GpIOStream *OpenFileNested(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* subPaths, size_t numSubPaths, bool writeAccess, GpFileCreationDisposition_t createDisposition) override;
bool DeleteFile(PortabilityLayer::VirtualDirectory_t virtualDirectory, const char *path, bool &existed) override;
IGpDirectoryCursor *ScanDirectoryNested(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* paths, size_t numPaths) override;
2020-10-13 00:15:56 -04:00
bool ValidateFilePath(const char *path, size_t pathLen) const override;
bool ValidateFilePathUnicodeChar(uint32_t ch) const override;
2020-10-24 10:03:12 -04:00
void SetDelayCallback(DelayCallback_t delayCallback) override;
void PostSourceExportRequest(bool cancelled, int fd, jobject pfd);
void ClosePFD(jobject pfd);
static GpFileSystem_Android *GetInstance();
private:
IGpDirectoryCursor *ScanAssetDirectory(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* paths, size_t numPaths);
IGpDirectoryCursor *ScanStorageDirectory(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* paths, size_t numPaths);
2020-10-13 00:15:56 -04:00
2020-10-24 10:03:12 -04:00
bool OpenSourceExportFD(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* paths, size_t numPaths, int &fd, jobject &pfd);
bool ResolvePath(PortabilityLayer::VirtualDirectory_t virtualDirectory, char const* const* paths, size_t numPaths, std::string &resolution, bool &isAsset);
2020-10-24 10:03:12 -04:00
DelayCallback_t m_delayCallback;
2020-10-13 00:15:56 -04:00
jobject m_activity;
jmethodID m_scanAssetDirectoryMID;
jmethodID m_selectSourceExportPathMID;
2020-10-24 10:03:12 -04:00
jmethodID m_closeSourceExportPFDMID;
IGpMutex *m_sourceExportMutex;
2020-10-24 10:03:12 -04:00
int m_sourceExportFD;
bool m_sourceExportWaiting;
bool m_sourceExportCancelled;
jobject m_sourceExportPFD;
2020-10-13 00:15:56 -04:00
static GpFileSystem_Android ms_instance;
};