diff options
| author | 2024-09-13 19:52:44 +0000 | |
|---|---|---|
| committer | 2024-09-13 19:52:44 +0000 | |
| commit | c2ea958b3d4474d203d2937a02b265a39f77c8e8 (patch) | |
| tree | 78410d0aa6fc7f3e6ce803f8764be36a3ffa735a /scripts/manifest.py | |
| parent | 05d906905193ca79e49fe435e6368a4991154842 (diff) | |
| parent | e1ab849b391c6d5c7fbf57310701c99cad88ba21 (diff) | |
Merge changes from topic "flag_application_manifest" into main
* changes:
Support multiple <application> or <uses-sdk> elements in manifest_*.py
Fix manifest_fixer.py warnings
Diffstat (limited to 'scripts/manifest.py')
| -rwxr-xr-x | scripts/manifest.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/scripts/manifest.py b/scripts/manifest.py index 81f9c61a8..32603e869 100755 --- a/scripts/manifest.py +++ b/scripts/manifest.py @@ -23,9 +23,40 @@ from xml.dom import minidom android_ns = 'http://schemas.android.com/apk/res/android' +def get_or_create_applications(doc, manifest): + """Get all <application> tags from the manifest, or create one if none exist. + Multiple <application> tags may exist when manifest feature flagging is used. + """ + applications = get_children_with_tag(manifest, 'application') + if len(applications) == 0: + application = doc.createElement('application') + indent = get_indent(manifest.firstChild, 1) + first = manifest.firstChild + manifest.insertBefore(doc.createTextNode(indent), first) + manifest.insertBefore(application, first) + applications.append(application) + return applications + + +def get_or_create_uses_sdks(doc, manifest): + """Get all <uses-sdk> tags from the manifest, or create one if none exist. + Multiple <uses-sdk> tags may exist when manifest feature flagging is used. + """ + uses_sdks = get_children_with_tag(manifest, 'uses-sdk') + if len(uses_sdks) == 0: + uses_sdk = doc.createElement('uses-sdk') + indent = get_indent(manifest.firstChild, 1) + manifest.insertBefore(uses_sdk, manifest.firstChild) + + # Insert an indent before uses-sdk to line it up with the indentation of the + # other children of the <manifest> tag. + manifest.insertBefore(doc.createTextNode(indent), manifest.firstChild) + uses_sdks.append(uses_sdk) + return uses_sdks + def get_children_with_tag(parent, tag_name): children = [] - for child in parent.childNodes: + for child in parent.childNodes: if child.nodeType == minidom.Node.ELEMENT_NODE and \ child.tagName == tag_name: children.append(child) |