Browse Source

[Android] Skip non-existing system font files.

Pāvels Nadtočajevs 5 months ago
parent
commit
e76a8b0f27
1 changed files with 18 additions and 13 deletions
  1. 18 13
      platform/android/os_android.cpp

+ 18 - 13
platform/android/os_android.cpp

@@ -454,6 +454,9 @@ void OS_Android::_load_system_font_config() const {
 	Ref<XMLParser> parser;
 	Ref<XMLParser> parser;
 	parser.instantiate();
 	parser.instantiate();
 
 
+	Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
+	String root = String(getenv("ANDROID_ROOT")).path_join("fonts");
+
 	Error err = parser->open(String(getenv("ANDROID_ROOT")).path_join("/etc/fonts.xml"));
 	Error err = parser->open(String(getenv("ANDROID_ROOT")).path_join("/etc/fonts.xml"));
 	if (err == OK) {
 	if (err == OK) {
 		bool in_font_node = false;
 		bool in_font_node = false;
@@ -530,20 +533,22 @@ void OS_Android::_load_system_font_config() const {
 				if (in_font_node) {
 				if (in_font_node) {
 					fi.filename = parser->get_node_data().strip_edges();
 					fi.filename = parser->get_node_data().strip_edges();
 					fi.font_name = fn;
 					fi.font_name = fn;
-					if (!fb.is_empty() && fn.is_empty()) {
-						fi.font_name = fb;
-						fi.priority = 2;
-					}
-					if (fi.font_name.is_empty()) {
-						fi.font_name = "sans-serif";
-						fi.priority = 5;
-					}
-					if (fi.font_name.ends_with("-condensed")) {
-						fi.stretch = 75;
-						fi.font_name = fi.font_name.trim_suffix("-condensed");
+					if (da->file_exists(root.path_join(fi.filename))) {
+						if (!fb.is_empty() && fn.is_empty()) {
+							fi.font_name = fb;
+							fi.priority = 2;
+						}
+						if (fi.font_name.is_empty()) {
+							fi.font_name = "sans-serif";
+							fi.priority = 5;
+						}
+						if (fi.font_name.ends_with("-condensed")) {
+							fi.stretch = 75;
+							fi.font_name = fi.font_name.trim_suffix("-condensed");
+						}
+						fonts.push_back(fi);
+						font_names.insert(fi.font_name);
 					}
 					}
-					fonts.push_back(fi);
-					font_names.insert(fi.font_name);
 				}
 				}
 			}
 			}
 			if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END) {
 			if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END) {