diff --git a/lib/VCMIDirs.cpp b/lib/VCMIDirs.cpp index a0ac3f6d0..b7dc8944b 100644 --- a/lib/VCMIDirs.cpp +++ b/lib/VCMIDirs.cpp @@ -13,6 +13,8 @@ #ifdef VCMI_IOS #include "iOS_utils.h" +#elif defined(VCMI_ANDROID) +#include "CAndroidVMHelper.h" #endif VCMI_LIB_NAMESPACE_BEGIN @@ -60,11 +62,6 @@ void IVCMIDirs::init() bfs::create_directories(userSavePath()); } -#ifdef VCMI_ANDROID -#include "CAndroidVMHelper.h" - -#endif - #ifdef VCMI_WINDOWS #ifdef __MINGW32__ @@ -529,6 +526,57 @@ std::vector VCMIDirsOSX::dataPaths() const bfs::path VCMIDirsOSX::libraryPath() const { return "."; } bfs::path VCMIDirsOSX::binaryPath() const { return "."; } #endif // VCMI_IOS, VCMI_MAC + +#elif defined(VCMI_ANDROID) +class VCMIDirsAndroid : public IVCMIDirsUNIX +{ + std::string basePath; + std::string internalPath; + std::string nativePath; +public: + std::string libraryName(const std::string & basename) const override; + bfs::path fullLibraryPath(const std::string & desiredFolder, const std::string & baseLibName) const override; + bfs::path binaryPath() const override; + bfs::path libraryPath() const override; + bfs::path userDataPath() const override; + bfs::path userCachePath() const override; + bfs::path userConfigPath() const override; + + std::vector dataPaths() const override; + + void init() override; +}; + +std::string VCMIDirsAndroid::libraryName(const std::string & basename) const { return "lib" + basename + ".so"; } +bfs::path VCMIDirsAndroid::binaryPath() const { return "."; } +bfs::path VCMIDirsAndroid::libraryPath() const { return nativePath; } +bfs::path VCMIDirsAndroid::userDataPath() const { return basePath; } +bfs::path VCMIDirsAndroid::userCachePath() const { return userDataPath() / "cache"; } +bfs::path VCMIDirsAndroid::userConfigPath() const { return userDataPath() / "config"; } + +bfs::path VCMIDirsAndroid::fullLibraryPath(const std::string & desiredFolder, const std::string & baseLibName) const +{ + // ignore passed folder (all libraries in android are dumped into a single folder) + return libraryPath() / libraryName(baseLibName); +} + +std::vector VCMIDirsAndroid::dataPaths() const +{ + return { + internalPath, + userDataPath(), + }; +} + +void VCMIDirsAndroid::init() +{ + // asks java code to retrieve needed paths from environment + CAndroidVMHelper envHelper; + basePath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "dataRoot"); + internalPath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "internalDataRoot"); + nativePath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "nativePath"); + IVCMIDirsUNIX::init(); +} #elif defined(VCMI_XDG) class VCMIDirsXDG : public IVCMIDirsUNIX { @@ -636,56 +684,7 @@ bfs::path VCMIDirsXDG::binaryPath() const std::string VCMIDirsXDG::libraryName(const std::string& basename) const { return "lib" + basename + ".so"; } -#ifdef VCMI_ANDROID - -class VCMIDirsAndroid : public VCMIDirsXDG -{ - std::string basePath; - std::string internalPath; - std::string nativePath; -public: - bfs::path fullLibraryPath(const std::string & desiredFolder, const std::string & baseLibName) const override; - bfs::path libraryPath() const override; - bfs::path userDataPath() const override; - bfs::path userCachePath() const override; - bfs::path userConfigPath() const override; - - std::vector dataPaths() const override; - - void init() override; -}; - -bfs::path VCMIDirsAndroid::libraryPath() const { return nativePath; } -bfs::path VCMIDirsAndroid::userDataPath() const { return basePath; } -bfs::path VCMIDirsAndroid::userCachePath() const { return userDataPath() / "cache"; } -bfs::path VCMIDirsAndroid::userConfigPath() const { return userDataPath() / "config"; } - -bfs::path VCMIDirsAndroid::fullLibraryPath(const std::string & desiredFolder, const std::string & baseLibName) const -{ - // ignore passed folder (all libraries in android are dumped into a single folder) - return libraryPath() / libraryName(baseLibName); -} - -std::vector VCMIDirsAndroid::dataPaths() const -{ - std::vector paths(2); - paths.push_back(internalPath); - paths.push_back(userDataPath()); - return paths; -} - -void VCMIDirsAndroid::init() -{ - // asks java code to retrieve needed paths from environment - CAndroidVMHelper envHelper; - basePath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "dataRoot"); - internalPath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "internalDataRoot"); - nativePath = envHelper.callStaticStringMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "nativePath"); - IVCMIDirs::init(); -} - -#endif // VCMI_ANDROID -#endif // VCMI_APPLE, VCMI_XDG +#endif // VCMI_APPLE, VCMI_ANDROID, VCMI_XDG #endif // VCMI_WINDOWS, VCMI_UNIX // Getters for interfaces are separated for clarity.