Only "level" for FCM and "target-level" for dev manifest.
The level attribute for device CM and fwk manifest is different
and has not been finalize yet. Do not modify the mLevel field for them.
Test: libvintf_test
Test: vintf_object_test
Bug: 37226359
Change-Id: I7b541f6d906fbf03487845be0728172e03bb60a5
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 739e344..bca26e1 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -806,9 +806,6 @@
SerializeFlags flags) const override {
appendAttr(root, "version", m.getMetaVersion());
appendAttr(root, "type", m.mType);
- if (m.mLevel != Level::UNSPECIFIED) {
- this->appendAttr(root, "target-level", m.mLevel);
- }
if (!(flags & SerializeFlag::NO_HALS)) {
appendChildren(root, manifestHalConverter, m.getHals(), d);
@@ -817,6 +814,9 @@
if (!(flags & SerializeFlag::NO_SEPOLICY)) {
appendChild(root, halManifestSepolicyConverter(m.device.mSepolicyVersion, d));
}
+ if (m.mLevel != Level::UNSPECIFIED) {
+ this->appendAttr(root, "target-level", m.mLevel);
+ }
} else if (m.mType == SchemaType::FRAMEWORK) {
if (!(flags & SerializeFlag::NO_VNDK)) {
#pragma clang diagnostic push
@@ -841,7 +841,6 @@
std::vector<ManifestHal> hals;
if (!parseAttr(root, "version", &object->mMetaVersion, error) ||
!parseAttr(root, "type", &object->mType, error) ||
- !parseOptionalAttr(root, "target-level", Level::UNSPECIFIED, &object->mLevel, error) ||
!parseChildren(root, manifestHalConverter, &hals, error)) {
return false;
}
@@ -858,6 +857,11 @@
&object->device.mSepolicyVersion, error)) {
return false;
}
+
+ if (!parseOptionalAttr(root, "target-level", Level::UNSPECIFIED, &object->mLevel,
+ error)) {
+ return false;
+ }
} else if (object->mType == SchemaType::FRAMEWORK) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -963,9 +967,6 @@
SerializeFlags flags) const override {
appendAttr(root, "version", m.getMinimumMetaVersion());
appendAttr(root, "type", m.mType);
- if (m.mLevel != Level::UNSPECIFIED) {
- this->appendAttr(root, "level", m.mLevel);
- }
if (!(flags & SerializeFlag::NO_HALS)) {
appendChildren(root, matrixHalConverter, iterateValues(m.mHals), d);
@@ -984,6 +985,9 @@
appendChild(root, avbConverter(m.framework.mAvbMetaVersion, d));
}
}
+ if (m.mLevel != Level::UNSPECIFIED) {
+ this->appendAttr(root, "level", m.mLevel);
+ }
} else if (m.mType == SchemaType::DEVICE) {
if (!(flags & SerializeFlag::NO_VNDK)) {
#pragma clang diagnostic push
@@ -1015,7 +1019,6 @@
std::vector<MatrixHal> hals;
if (!parseAttr(root, "version", &version, error) ||
!parseAttr(root, "type", &object->mType, error) ||
- !parseOptionalAttr(root, "level", Level::UNSPECIFIED, &object->mLevel, error) ||
!parseChildren(root, matrixHalConverter, &hals, error)) {
return false;
}
@@ -1045,6 +1048,10 @@
seenKernelVersions.insert(minLts);
}
+ if (!parseOptionalAttr(root, "level", Level::UNSPECIFIED, &object->mLevel, error)) {
+ return false;
+ }
+
} else if (object->mType == SchemaType::DEVICE) {
// <vndk> can be missing because it can be determined at build time, not hard-coded
// in the XML file.