"""Add new settings""" priority = 0 from lxml import etree def make_category(ns, name, items): cat = etree.Element("PreferenceCategory", nsmap=ns) cat.set(f"{{{ns['android']}}}title", name) cat.set(f"{{{ns['app']}}}iconSpaceReserved", "false") for item in items: pref = etree.SubElement(cat, "Preference", nsmap=ns) pref.set(f"{{{ns['android']}}}title", item["title"]) pref.set(f"{{{ns['android']}}}summary", item["description"]) pref.set(f"{{{ns['app']}}}icon", item["icon"]) pref.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"]) intent = etree.SubElement(pref, "intent", nsmap=ns) intent.set(f"{{{ns['android']}}}action", "android.intent.action.VIEW") intent.set(f"{{{ns['android']}}}data", item["url"]) intent.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"]) return cat def apply(config: dict) -> bool: file_path = "./decompiled/res/xml/preference_main.xml" parser = etree.XMLParser(remove_blank_text=True) tree = etree.parse(file_path, parser) root = tree.getroot() # Insert new PreferenceCategory before the last element last = root[-1] # last element pos = root.index(last) for section, items in config["menu"].items(): root.insert(pos, make_category(config["xml_ns"], section, items)) pos += 1 # Save back tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8") filepaths = [ "./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/activity/UpdateActivity.smali", "./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/fragment/main/preference/MainPreferenceFragment.smali", ] for filepath in filepaths: content = "" with open(filepath, "r", encoding="utf-8") as file: for line in file.readlines(): if '"\u0412\u0435\u0440\u0441\u0438\u044f'.encode("unicode_escape").decode() in line: content += line[:line.rindex('"')] + config["version"] + line[line.rindex('"'):] else: content += line with open(filepath, "w", encoding="utf-8") as file: file.write(content) return True