1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Add get_distribution_name() and get_version() to OS

supports: LinuxBSD, Windows, macOS, iOS, Android, UWP

Co-authored-by: bruvzg
This commit is contained in:
MJacred
2022-09-16 11:14:14 +02:00
parent d1b2a191ab
commit ac9786c525
18 changed files with 218 additions and 0 deletions

View File

@@ -44,6 +44,7 @@
#include "net_socket_android.h"
#include <dlfcn.h>
#include <sys/system_properties.h>
#include "java_godot_io_wrapper.h"
#include "java_godot_wrapper.h"
@@ -175,6 +176,79 @@ String OS_Android::get_name() const {
return "Android";
}
String OS_Android::get_system_property(const char *key) const {
static String value;
char value_str[PROP_VALUE_MAX];
if (__system_property_get(key, value_str)) {
value = String(value_str);
}
return value;
}
String OS_Android::get_distribution_name() const {
if (!get_system_property("ro.havoc.version").is_empty()) {
return "Havoc OS";
} else if (!get_system_property("org.pex.version").is_empty()) { // Putting before "Pixel Experience", because it's derivating from it.
return "Pixel Extended";
} else if (!get_system_property("org.pixelexperience.version").is_empty()) {
return "Pixel Experience";
} else if (!get_system_property("ro.potato.version").is_empty()) {
return "POSP";
} else if (!get_system_property("ro.xtended.version").is_empty()) {
return "Project-Xtended";
} else if (!get_system_property("org.evolution.version").is_empty()) {
return "Evolution X";
} else if (!get_system_property("ro.corvus.version").is_empty()) {
return "Corvus-Q";
} else if (!get_system_property("ro.pa.version").is_empty()) {
return "Paranoid Android";
} else if (!get_system_property("ro.crdroid.version").is_empty()) {
return "crDroid Android";
} else if (!get_system_property("ro.syberia.version").is_empty()) {
return "Syberia Project";
} else if (!get_system_property("ro.arrow.version").is_empty()) {
return "ArrowOS";
} else if (!get_system_property("ro.lineage.version").is_empty()) { // Putting LineageOS last, just in case any derivative writes to "ro.lineage.version".
return "LineageOS";
}
if (!get_system_property("ro.modversion").is_empty()) { // Handles other Android custom ROMs.
return vformat("%s %s", get_name(), "Custom ROM");
}
// Handles stock Android.
return get_name();
}
String OS_Android::get_version() const {
const Vector<const char *> roms = { "ro.havoc.version", "org.pex.version", "org.pixelexperience.version",
"ro.potato.version", "ro.xtended.version", "org.evolution.version", "ro.corvus.version", "ro.pa.version",
"ro.crdroid.version", "ro.syberia.version", "ro.arrow.version", "ro.lineage.version" };
for (int i = 0; i < roms.size(); i++) {
static String rom_version = get_system_property(roms[i]);
if (!rom_version.is_empty()) {
return rom_version;
}
}
static String mod_version = get_system_property("ro.modversion"); // Handles other Android custom ROMs.
if (!mod_version.is_empty()) {
return mod_version;
}
// Handles stock Android.
static String sdk_version = get_system_property("ro.build.version.sdk_int");
static String build = get_system_property("ro.build.version.incremental");
if (!sdk_version.is_empty()) {
if (!build.is_empty()) {
return vformat("%s.%s", sdk_version, build);
}
return sdk_version;
}
return "";
}
MainLoop *OS_Android::get_main_loop() const {
return main_loop;
}