Merge "<matrix><hal> optional attr has default value true." into main am: 7ebd846faf

Original change: https://android-review.googlesource.com/c/platform/system/libvintf/+/2836442

Change-Id: Iba52bd51530b515aa4616841d699f0cf99f57c01
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/include/vintf/constants.h b/include/vintf/constants.h
index 455ea76..423cea0 100644
--- a/include/vintf/constants.h
+++ b/include/vintf/constants.h
@@ -23,7 +23,7 @@
 namespace vintf {
 
 /* libvintf meta-version */
-constexpr Version kMetaVersion{7, 0};
+constexpr Version kMetaVersion{8, 0};
 
 // Some legacy metaversion constants
 // The metaversion where inet transport is added to AIDL HALs
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 2f0d661..12d8569 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -647,7 +647,7 @@
                      const BuildObjectParam& param) const override {
         std::vector<HalInterface> interfaces;
         if (!parseOptionalAttr(root, "format", HalFormat::HIDL, &object->format, param.error) ||
-            !parseOptionalAttr(root, "optional", false /* defaultValue */, &object->optional,
+            !parseOptionalAttr(root, "optional", true /* defaultValue */, &object->optional,
                                param.error) ||
             !parseOptionalAttr(root, "updatable-via-apex", false /* defaultValue */,
                                &object->updatableViaApex, param.error) ||
diff --git a/test/LibVintfTest.cpp b/test/LibVintfTest.cpp
index 2a21b25..0e1ba9f 100644
--- a/test/LibVintfTest.cpp
+++ b/test/LibVintfTest.cpp
@@ -858,6 +858,25 @@
 }
 
 // clang-format on
+
+TEST_F(LibVintfTest, CompatibilityMatrixDefaultOptionalTrue) {
+    auto xml = "<compatibility-matrix " + kMetaVersionStr + R"( type="device">
+            <hal format="aidl">
+                <name>android.foo.bar</name>
+                <version>1</version>
+                <interface>
+                    <name>IFoo</name>
+                    <instance>default</instance>
+                </interface>
+            </hal>
+        </compatibility-matrix>)";
+    CompatibilityMatrix cm;
+    EXPECT_TRUE(fromXml(&cm, xml));
+    auto hal = getAnyHal(cm, "android.foo.bar");
+    ASSERT_NE(nullptr, hal);
+    EXPECT_TRUE(hal->optional) << "If optional is not specified, it should be true by default";
+}
+
 TEST_F(LibVintfTest, IsValid) {
     EXPECT_TRUE(isValid(ManifestHal()));
 
@@ -2821,7 +2840,7 @@
 
     xml =
         "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
-        "    <hal format=\"aidl\">\n"
+        "    <hal format=\"aidl\" optional=\"false\">\n"
         "        <name>android.hardware.foo</name>\n"
         "        <interface>\n"
         "            <name>IFoo</name>\n"
@@ -2833,7 +2852,7 @@
 
     xml =
         "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"2\">\n"
-        "    <hal format=\"aidl\" updatable-via-apex=\"true\">\n"
+        "    <hal format=\"aidl\" optional=\"false\" updatable-via-apex=\"true\">\n"
         "        <name>android.hardware.foo</name>\n"
         "        <interface>\n"
         "            <name>IFoo</name>\n"
diff --git a/test/vintf_object_tests.cpp b/test/vintf_object_tests.cpp
index 61351df..8793634 100644
--- a/test/vintf_object_tests.cpp
+++ b/test/vintf_object_tests.cpp
@@ -164,7 +164,7 @@
 
 const std::string systemMatrixXml2 =
     "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
-    "    <hal format=\"hidl\">\n"
+    "    <hal format=\"hidl\" optional=\"false\">\n"
     "        <name>android.hardware.foo</name>\n"
     "        <version>1.0</version>\n"
     "    </hal>\n"
@@ -2523,7 +2523,7 @@
         // clang-format off
         std::vector<std::string> matrices{
             "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
-            "    <hal format=\"hidl\">\n"
+            "    <hal format=\"hidl\" optional=\"false\">\n"
             "        <name>android.hardware.hidl</name>\n"
             "        <version>1.0</version>\n"
             "        <interface>\n"
@@ -2531,7 +2531,7 @@
             "            <instance>default</instance>\n"
             "        </interface>\n"
             "    </hal>\n"
-            "    <hal format=\"aidl\">\n"
+            "    <hal format=\"aidl\" optional=\"false\">\n"
             "        <name>android.hardware.aidl</name>\n"
             "        <interface>\n"
             "            <name>IAidl</name>\n"