Merge pull request #13232 from endragor/android-multiple-icons

Allow to specify multiple resolution Android icons
This commit is contained in:
Rémi Verschelde 2017-11-24 08:07:28 +01:00 committed by GitHub
commit 679b64fe48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -192,6 +192,19 @@ static const char *android_perms[] = {
NULL
};
struct LauncherIcon {
char *option_id;
char *export_path;
};
static const LauncherIcon launcher_icons[] = {
{ "launcher_icons/xxxhdpi_192x192", "res/drawable-xxxhdpi-v4/icon.png" },
{ "launcher_icons/xxhdpi_144x144", "res/drawable-xxhdpi-v4/icon.png" },
{ "launcher_icons/xhdpi_96x96", "res/drawable-xhdpi-v4/icon.png" },
{ "launcher_icons/hdpi_72x72", "res/drawable-hdpi-v4/icon.png" },
{ "launcher_icons/mdpi_48x48", "res/drawable-mdpi-v4/icon.png" }
};
class EditorExportAndroid : public EditorExportPlatform {
GDCLASS(EditorExportAndroid, EditorExportPlatform)
@ -1002,7 +1015,6 @@ public:
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "version/name"), "1.0"));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/unique_name"), "org.godotengine.$genname"));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/icon", PROPERTY_HINT_FILE, "png"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/signed"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "screen/orientation", PROPERTY_HINT_ENUM, "Landscape,Portrait"), 0));
@ -1010,6 +1022,11 @@ public:
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_normal"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_large"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true));
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icons[i].option_id, PROPERTY_HINT_FILE, "png"), ""));
}
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release", PROPERTY_HINT_GLOBAL_FILE, "keystore"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_user"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_password"), ""));
@ -1390,23 +1407,20 @@ public:
}
if (file == "res/drawable/icon.png") {
String icon = p_preset->get("package/icon");
icon = icon.strip_edges();
bool found = false;
if (icon != "" && icon.ends_with(".png")) {
FileAccess *f = FileAccess::open(icon, FileAccess::READ);
if (f) {
data.resize(f->get_len());
f->get_buffer(data.ptr(), data.size());
memdelete(f);
found = true;
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
if (icon_path != "" && icon_path.ends_with(".png")) {
FileAccess *f = FileAccess::open(icon_path, FileAccess::READ);
if (f) {
data.resize(f->get_len());
f->get_buffer(data.ptr(), data.size());
memdelete(f);
found = true;
break;
}
}
}
if (!found) {
String appicon = ProjectSettings::get_singleton()->get("application/config/icon");
@ -1515,6 +1529,19 @@ public:
err = export_project_files(p_preset, save_apk_file, &ed, save_apk_so);
}
if (!err) {
APKExportData ed;
ed.ep = &ep;
ed.apk = unaligned_apk;
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
if (icon_path != "" && icon_path.ends_with(".png") && FileAccess::exists(icon_path)) {
Vector<uint8_t> data = FileAccess::get_file_as_array(icon_path);
store_in_apk(&ed, launcher_icons[i].export_path, data);
}
}
}
}
if (use_32_fb)