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.