Explorar el Código

refactor VCMIDirs for Android

removes inheritance from VCMIDirsXDG to get rid of defining M_*_DIR variables
Andrey Filipenkov hace 2 años
padre
commit
2ced633ad8
Se han modificado 1 ficheros con 54 adiciones y 55 borrados
  1. 54 55
      lib/VCMIDirs.cpp

+ 54 - 55
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<bfs::path> 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<bfs::path> 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<bfs::path> 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<bfs::path> 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<bfs::path> VCMIDirsAndroid::dataPaths() const
-{
-	std::vector<bfs::path> 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.