Add ANeuralNetworks_getRuntimeFeatureLevel

NNAPI runtime feature level is a versioning scheme replacing the
Android API level for NNAPI feature discovery. NNAPI runtime,
its API and features can be updated outside of dessert releases.

Introduced the FeatureLevelCode enum. Its values for already released
feature levels match their API levels. The feature level enum and
Android API levels can be used interchangeably up through Android S.

After Android S, feature level enum values may diverge from Android API
levels to allow accommodating NNAPI specification updates between Android
releases.

All uses of API level were replaced with corresponding NNAPI feature
level.

ANeuralNetworksDevice_getFeatureLevel documentation was updated
to indicate use of feature level enum instead of Android API level.

Test: NNT_static
Bug: 177298018
Change-Id: Ib7e0ea0e7b5c20d1631b5a022c7c3b66ad1bb77d
Merged-In: Ib7e0ea0e7b5c20d1631b5a022c7c3b66ad1bb77d
(cherry picked from commit 62e9993c0f6df6811610f19b3037303ac96516be)
diff --git a/runtime/Memory.cpp b/runtime/Memory.cpp
index 4ead632..9e93581 100644
--- a/runtime/Memory.cpp
+++ b/runtime/Memory.cpp
@@ -469,7 +469,7 @@
         mAllocator = nullptr;
     }
     mSupportsAhwb = std::all_of(devices.begin(), devices.end(), [](const auto* device) {
-        return device->getFeatureLevel() >= kHalVersionV1_3ToApi.android;
+        return device->getFeatureLevel() >= kHalVersionV1_3ToApi.featureLevel;
     });
     mShouldFallback = std::none_of(mRoles.begin(), mRoles.end(), [](const auto& role) {
         const auto* cb = std::get<const CompilationBuilder*>(role);