Handle new manifest tag <property>
Bug: 169258655
Test: aapt2_tests
Change-Id: Ia1c8e7c38fb882c3ce0aa2913b844cccdc5b8749
diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp
index 8862405..cc1cf7f 100644
--- a/tools/aapt2/dump/DumpManifest.cpp
+++ b/tools/aapt2/dump/DumpManifest.cpp
@@ -1851,6 +1851,41 @@
}
};
+/** Represents <property> elements. **/
+class Property : public ManifestExtractor::Element {
+ public:
+ Property() = default;
+ std::string name;
+ std::string value;
+ const int* value_int;
+ std::string resource;
+ const int* resource_int;
+
+ void Extract(xml::Element* element) override {
+ name = GetAttributeStringDefault(FindAttribute(element, NAME_ATTR), "");
+ value = GetAttributeStringDefault(FindAttribute(element, VALUE_ATTR), "");
+ value_int = GetAttributeInteger(FindAttribute(element, VALUE_ATTR));
+ resource = GetAttributeStringDefault(FindAttribute(element, RESOURCE_ATTR), "");
+ resource_int = GetAttributeInteger(FindAttribute(element, RESOURCE_ATTR));
+ }
+
+ void Print(text::Printer* printer) override {
+ printer->Print(StringPrintf("property: name='%s' ", name.data()));
+ if (!value.empty()) {
+ printer->Print(StringPrintf("value='%s' ", value.data()));
+ } else if (value_int) {
+ printer->Print(StringPrintf("value='%d' ", *value_int));
+ } else {
+ if (!resource.empty()) {
+ printer->Print(StringPrintf("resource='%s' ", resource.data()));
+ } else if (resource_int) {
+ printer->Print(StringPrintf("resource='%d' ", *resource_int));
+ }
+ }
+ printer->Print("\n");
+ }
+};
+
/** Recursively prints the extracted badging element. */
static void Print(ManifestExtractor::Element* el, text::Printer* printer) {
el->Print(printer);
@@ -2291,6 +2326,7 @@
{"overlay", std::is_base_of<Overlay, T>::value},
{"package-verifier", std::is_base_of<PackageVerifier, T>::value},
{"permission", std::is_base_of<Permission, T>::value},
+ {"property", std::is_base_of<Property, T>::value},
{"provider", std::is_base_of<Provider, T>::value},
{"receiver", std::is_base_of<Receiver, T>::value},
{"required-feature", std::is_base_of<RequiredFeature, T>::value},
@@ -2344,6 +2380,7 @@
{"overlay", &CreateType<Overlay>},
{"package-verifier", &CreateType<PackageVerifier>},
{"permission", &CreateType<Permission>},
+ {"property", &CreateType<Property>},
{"provider", &CreateType<Provider>},
{"receiver", &CreateType<Receiver>},
{"required-feature", &CreateType<RequiredFeature>},