VintfObject: load /vendor/etc/vintf/cm.xml before /vendor/cm.xml

cm => compatibility_matrix

Test: vintf_object_test
Bug: 36790901
Change-Id: Id62cbd1a2a7612c0fbf15adce39dbef67a4c18a8
diff --git a/VintfObject.cpp b/VintfObject.cpp
index 4a3e235..b852665 100644
--- a/VintfObject.cpp
+++ b/VintfObject.cpp
@@ -88,8 +88,7 @@
 // static
 std::shared_ptr<const CompatibilityMatrix> VintfObject::GetDeviceCompatibilityMatrix(bool skipCache) {
     static LockedSharedPtr<CompatibilityMatrix> gDeviceMatrix;
-    return Get(&gDeviceMatrix, skipCache,
-               std::bind(&CompatibilityMatrix::fetchAllInformation, _1, kVendorLegacyMatrix, _2));
+    return Get(&gDeviceMatrix, skipCache, &VintfObject::FetchDeviceMatrix);
 }
 
 // static
@@ -234,6 +233,15 @@
     return out->fetchAllInformation(kVendorLegacyManifest, error);
 }
 
+status_t VintfObject::FetchDeviceMatrix(CompatibilityMatrix* out, std::string* error) {
+    CompatibilityMatrix etcMatrix;
+    if (etcMatrix.fetchAllInformation(kVendorMatrix, error) == OK) {
+        *out = std::move(etcMatrix);
+        return OK;
+    }
+    return out->fetchAllInformation(kVendorLegacyMatrix, error);
+}
+
 std::vector<Named<CompatibilityMatrix>> VintfObject::GetAllFrameworkMatrixLevels(
     std::string* error) {
     std::vector<std::string> fileNames;
@@ -510,6 +518,7 @@
 
 const std::string kVendorManifest = kVendorVintfDir + "manifest.xml";
 const std::string kSystemManifest = kSystemVintfDir + "manifest.xml";
+const std::string kVendorMatrix = kVendorVintfDir + "compatibility_matrix.xml";
 
 const std::string kVendorLegacyManifest = "/vendor/manifest.xml";
 const std::string kVendorLegacyMatrix = "/vendor/compatibility_matrix.xml";