aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Faust <colefaust@google.com>2021-10-20 22:03:20 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-10-20 22:03:20 +0000
commit20a759400a12fb2ab0bdcb19de5e7679cd10a83d (patch)
tree8c8bf63883063689b7e029ff3ea3d51017a9a8b1
parentb96b9e43c3bd1bf1f516eaae4faf2d15d73ad047 (diff)
parentd9e95cb7f2aae6a5fc151d34d8c10eb5f2f9d5d5 (diff)
downloadtests-20a759400a12fb2ab0bdcb19de5e7679cd10a83d.tar.gz
Add generate-overlays.py am: d9e95cb7f2
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/tests/+/16095542 Change-Id: Ia4c418d8aa361e33c211669e6328b1ac29dc4f29
-rwxr-xr-xtools/rro/generate-overlays.py80
-rw-r--r--tools/rro/resource_utils.py55
2 files changed, 135 insertions, 0 deletions
diff --git a/tools/rro/generate-overlays.py b/tools/rro/generate-overlays.py
new file mode 100755
index 0000000..5ba4cda
--- /dev/null
+++ b/tools/rro/generate-overlays.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+# Copyright (C) 2021 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import sys
+from resource_utils import get_all_resources, get_androidx_resources, Resource
+from datetime import datetime
+import lxml.etree as etree
+if sys.version_info[0] != 3:
+ print("Must use python 3")
+ sys.exit(1)
+
+COPYRIGHT_STR = """ Copyright (C) %s The Android Open Source Project
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.""" % (datetime.today().strftime("%Y"))
+
+AUTOGENERATION_NOTICE_STR = """
+THIS FILE WAS AUTO GENERATED, DO NOT EDIT MANUALLY.
+REGENERATE USING packages/apps/Car/tests/tools/rro/generate-overlays.py
+"""
+
+"""
+Script used to update the 'overlayable.xml' file.
+"""
+def main():
+ parser = argparse.ArgumentParser(description="Generate overlayable.xml. This script assumes that all the RRO resources have the exact same name as the app resource they're overlaying.")
+ parser.add_argument('-o', '--outputFile', default='', help='Output file path. If empty, output to stdout')
+ parser.add_argument('-a', '--appResources', help="Path to the app's resource folder. If given, will be used to exclude any rro-specific resources from overlays.xml.")
+ required_args = parser.add_argument_group('Required arguments')
+ required_args.add_argument('-r', '--resourcePath', help="Path to the RRO's resource directory", required=True)
+ args = parser.parse_args()
+
+ resources = get_all_resources(args.resourcePath)
+ try:
+ resources.remove(Resource('overlays', 'xml'))
+ except KeyError:
+ pass
+
+ if args.appResources:
+ resources = resources.intersection(
+ get_all_resources(args.appResources).union(get_androidx_resources()))
+ generate_overlays_file(resources, args.outputFile)
+
+def generate_overlays_file(resources, output_file):
+ resources = sorted(resources, key=lambda x: x.type + x.name)
+ root = etree.Element('overlay')
+ root.addprevious(etree.Comment(COPYRIGHT_STR))
+ root.addprevious(etree.Comment(AUTOGENERATION_NOTICE_STR))
+ for resource in resources:
+ item = etree.SubElement(root, 'item')
+ item.set('target', f'{resource.type}/{resource.name}')
+ item.set('value', f'@{resource.type}/{resource.name}')
+ rootTree = etree.ElementTree(root)
+ if not output_file:
+ print(etree.tostring(rootTree, pretty_print=True, xml_declaration=True).decode())
+ else:
+ with open(output_file, 'wb') as f:
+ rootTree.write(f, pretty_print=True, xml_declaration=True, encoding='utf-8')
+
+if __name__ == '__main__':
+ main()
diff --git a/tools/rro/resource_utils.py b/tools/rro/resource_utils.py
index 11e8edc..5f35e1a 100644
--- a/tools/rro/resource_utils.py
+++ b/tools/rro/resource_utils.py
@@ -149,3 +149,58 @@ def add_resource_to_set(resourceset, resource):
def merge_resources(set1, set2):
for resource in set2:
add_resource_to_set(set1, resource)
+
+def get_androidx_resources():
+ # source: https://android.googlesource.com/platform/frameworks/opt/sherpa/+/studio-3.0/constraintlayout/src/main/res/values/attrs.xml
+ resources = set()
+ add_resource_to_set(resources, Resource('layout_optimizationLevel', 'attr'))
+ add_resource_to_set(resources, Resource('constraintSet', 'attr'))
+ add_resource_to_set(resources, Resource('barrierDirection', 'attr'))
+ add_resource_to_set(resources, Resource('constraint_referenced_ids', 'attr'))
+ add_resource_to_set(resources, Resource('chainUseRtl', 'attr'))
+ add_resource_to_set(resources, Resource('title', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintGuide_begin', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintGuide_end', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintGuide_percent', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintLeft_toLeftOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintLeft_toRightOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintRight_toLeftOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintRight_toRightOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintTop_toTopOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintTop_toBottomOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintBottom_toTopOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintBottom_toBottomOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintBaseline_toBaselineOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintStart_toEndOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintStart_toStartOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintEnd_toStartOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintEnd_toEndOf', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginLeft', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginTop', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginRight', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginBottom', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginStart', 'attr'))
+ add_resource_to_set(resources, Resource('layout_goneMarginEnd', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHorizontal_bias', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintVertical_bias', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintWidth_default', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHeight_default', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintWidth_min', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintWidth_max', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintWidth_percent', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHeight_min', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHeight_max', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHeight_percent', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintLeft_creator', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintTop_creator', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintRight_creator', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintBottom_creator', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintBaseline_creator', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintDimensionRatio', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHorizontal_weight', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintVertical_weight', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintHorizontal_chainStyle', 'attr'))
+ add_resource_to_set(resources, Resource('layout_constraintVertical_chainStyle', 'attr'))
+ add_resource_to_set(resources, Resource('layout_editor_absoluteX', 'attr'))
+ add_resource_to_set(resources, Resource('layout_editor_absoluteY', 'attr'))
+ return resources