Refactor: Add HalManifest::inferredKernelLevel().

For now, this directly returns kernel()->level(). Replace some
usages of kernel()->level() with this. Usages of kernel()->level()
that is not replaced will either be cleaned up in follow up CLs, or
commented to describe the intention.

If there's no <kernel> tag, returns UNSPECIFIED.

Test: libvintf_test
Test: vintf_object_test
Bug: 161317193
Change-Id: Id738f568dc61c248e4048381e31843ba62a870bf
diff --git a/VintfObject.cpp b/VintfObject.cpp
index 559b8d8..55fa7a3 100644
--- a/VintfObject.cpp
+++ b/VintfObject.cpp
@@ -549,11 +549,7 @@
             mDeviceRuntimeInfo.fetchedFlags &= ~RuntimeInfo::FetchFlag::KERNEL_FCM;
             return nullptr;
         }
-        Level level = Level::UNSPECIFIED;
-        if (manifest->kernel().has_value()) {
-            level = manifest->kernel()->level();
-        }
-        mDeviceRuntimeInfo.object->setKernelLevel(level);
+        mDeviceRuntimeInfo.object->setKernelLevel(manifest->inferredKernelLevel());
         flags &= ~RuntimeInfo::FetchFlag::KERNEL_FCM;
     }
 
@@ -935,6 +931,7 @@
         if (error) *error = "Cannot retrieve device manifest.";
         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();
     }