VintfObject::getKernelLevel: always read from runtime info.

Previously VintfObject takes a shortcut and fetch kernel FCM straight
from the device manifest, because that is the only source of
information. Now that kernel FCM may also be determined at runtime,
read from runtime info object.

Test: libvintf_test
Test: vintf_object_test
Bug: 161317193

Change-Id: I2da5690e3bb9746e6eb848efc1a8297ed6c2216f
diff --git a/VintfObject.cpp b/VintfObject.cpp
index 4ab5fa1..4eee9c4 100644
--- a/VintfObject.cpp
+++ b/VintfObject.cpp
@@ -944,16 +944,17 @@
 }
 
 Level VintfObject::getKernelLevel(std::string* error) {
-    auto manifest = getDeviceHalManifest();
-    if (!manifest) {
-        if (error) *error = "Cannot retrieve device manifest.";
+    auto runtimeInfo = getRuntimeInfo(RuntimeInfo::FetchFlag::KERNEL_FCM);
+    if (!runtimeInfo) {
+        if (error) *error = "Cannot retrieve runtime info with kernel level.";
         return Level::UNSPECIFIED;
     }
-    // TODO(b/161317193): read kernel level from RuntimeInfo
-    if (manifest->kernel().has_value() && manifest->kernel()->level() != Level::UNSPECIFIED) {
-        return manifest->kernel()->level();
+    if (runtimeInfo->kernelLevel() != Level::UNSPECIFIED) {
+        return runtimeInfo->kernelLevel();
     }
-    if (error) *error = "Device manifest does not specify kernel FCM version.";
+    if (error) {
+        *error = "Both device manifest and kernel release do not specify kernel FCM version.";
+    }
     return Level::UNSPECIFIED;
 }