Files
patcher/patches/settings_urls.py

42 lines
1.5 KiB
Python

"""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["settings_urls"].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")
return True