Add VintfObject::getCompatibleKernelRequirement

Fixes: 139015688
Test: vintf_object_test
Test: libvintf_test
Change-Id: I31d5ac319bc61bd340dbc1196dbfc3107f6be101
diff --git a/CompatibilityMatrix.cpp b/CompatibilityMatrix.cpp
index 8595fcd..b9cf494 100644
--- a/CompatibilityMatrix.cpp
+++ b/CompatibilityMatrix.cpp
@@ -19,6 +19,7 @@
 #include <iostream>
 #include <utility>
 
+#include <android-base/logging.h>
 #include <android-base/strings.h>
 
 #include "parse_string.h"
@@ -285,6 +286,8 @@
             continue;
         }
 
+        (void)kernelToAdd.setSourceMatrixLevel(other->level());
+
         KernelVersion minLts = kernelToAdd.minLts();
         if (!addKernel(std::move(kernelToAdd), error)) {
             if (error) {
@@ -477,5 +480,14 @@
     return type() == SchemaType::DEVICE ? device.mVendorNdk.version() : "";
 }
 
+Level CompatibilityMatrix::getSourceMatrixLevel(const MatrixKernel* matrixKernel) const {
+    CHECK(std::find_if(framework.mKernels.begin(), framework.mKernels.end(),
+                       [matrixKernel](const auto& e) { return &e == matrixKernel; }) !=
+          framework.mKernels.end());
+    Level ret = matrixKernel->getSourceMatrixLevel();
+    if (ret != Level::UNSPECIFIED) return ret;
+    return level();
+}
+
 } // namespace vintf
 } // namespace android