Add device/fwk compatibility matrix to VintfObject.

For framework compatibility matrix, <sepolicy> sections
is injected in build time.

Test: libvintf_test
Test: adb shell vintf; matrices exist, compatible = true
Bug: 37321309
Bug: 36814503
Change-Id: I997b93456a261f0cdb85997ae88f4ac5a5f36ff3
diff --git a/VintfObject.cpp b/VintfObject.cpp
index 674031a..1ef6edc 100644
--- a/VintfObject.cpp
+++ b/VintfObject.cpp
@@ -34,6 +34,8 @@
 
 static LockedUniquePtr<HalManifest> gDeviceManifest;
 static LockedUniquePtr<HalManifest> gFrameworkManifest;
+static LockedUniquePtr<CompatibilityMatrix> gDeviceMatrix;
+static LockedUniquePtr<CompatibilityMatrix> gFrameworkMatrix;
 static LockedUniquePtr<RuntimeInfo> gDeviceRuntimeInfo;
 
 template <typename T, typename F>
@@ -65,6 +67,21 @@
                 "/system/manifest.xml"));
 }
 
+
+// static
+const CompatibilityMatrix *VintfObject::GetDeviceCompatibilityMatrix(bool skipCache) {
+    return Get(&gDeviceMatrix, skipCache,
+            std::bind(&CompatibilityMatrix::fetchAllInformation, std::placeholders::_1,
+                "/vendor/compatibility_matrix.xml"));
+}
+
+// static
+const CompatibilityMatrix *VintfObject::GetFrameworkCompatibilityMatrix(bool skipCache) {
+    return Get(&gFrameworkMatrix, skipCache,
+            std::bind(&CompatibilityMatrix::fetchAllInformation, std::placeholders::_1,
+                "/system/compatibility_matrix.xml"));
+}
+
 // static
 const RuntimeInfo *VintfObject::GetRuntimeInfo(bool skipCache) {
     return Get(&gDeviceRuntimeInfo, skipCache,