diff options
| -rw-r--r-- | core/java/android/os/VintfObject.java | 7 | ||||
| -rw-r--r-- | core/jni/android_os_VintfObject.cpp | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/core/java/android/os/VintfObject.java b/core/java/android/os/VintfObject.java index 12a495bf2821..fb22194098b6 100644 --- a/core/java/android/os/VintfObject.java +++ b/core/java/android/os/VintfObject.java @@ -80,4 +80,11 @@ public class VintfObject { * ("28", ["libjpeg.so", "libbase.so"])] */ public static native Map<String, String[]> getVndkSnapshots(); + + /** + * @return target FCM version, a number specified in the device manifest + * indicating the FCM version that the device manifest implements. Null if + * device manifest doesn't specify this number (for legacy devices). + */ + public static native Long getTargetFrameworkCompatibilityMatrixVersion(); } diff --git a/core/jni/android_os_VintfObject.cpp b/core/jni/android_os_VintfObject.cpp index 16591685848e..e8ef349f5b7a 100644 --- a/core/jni/android_os_VintfObject.cpp +++ b/core/jni/android_os_VintfObject.cpp @@ -32,10 +32,13 @@ static jclass gString; static jclass gHashMapClazz; static jmethodID gHashMapInit; static jmethodID gHashMapPut; +static jclass gLongClazz; +static jmethodID gLongValueOf; namespace android { using vintf::HalManifest; +using vintf::Level; using vintf::SchemaType; using vintf::VintfObject; using vintf::XmlConverter; @@ -154,6 +157,14 @@ static jobject android_os_VintfObject_getVndkSnapshots(JNIEnv* env, jclass) { return jMap; } +static jobject android_os_VintfObject_getTargetFrameworkCompatibilityMatrixVersion(JNIEnv* env, jclass) { + std::shared_ptr<const HalManifest> manifest = VintfObject::GetDeviceHalManifest(); + if (manifest == nullptr || manifest->level() == Level::UNSPECIFIED) { + return nullptr; + } + return env->CallStaticObjectMethod(gLongClazz, gLongValueOf, static_cast<jlong>(manifest->level())); +} + // ---------------------------------------------------------------------------- static const JNINativeMethod gVintfObjectMethods[] = { @@ -163,6 +174,7 @@ static const JNINativeMethod gVintfObjectMethods[] = { {"getHalNamesAndVersions", "()[Ljava/lang/String;", (void*)android_os_VintfObject_getHalNamesAndVersions}, {"getSepolicyVersion", "()Ljava/lang/String;", (void*)android_os_VintfObject_getSepolicyVersion}, {"getVndkSnapshots", "()Ljava/util/Map;", (void*)android_os_VintfObject_getVndkSnapshots}, + {"getTargetFrameworkCompatibilityMatrixVersion", "()Ljava/lang/Long;", (void*)android_os_VintfObject_getTargetFrameworkCompatibilityMatrixVersion}, }; const char* const kVintfObjectPathName = "android/os/VintfObject"; @@ -175,6 +187,8 @@ int register_android_os_VintfObject(JNIEnv* env) gHashMapInit = GetMethodIDOrDie(env, gHashMapClazz, "<init>", "()V"); gHashMapPut = GetMethodIDOrDie(env, gHashMapClazz, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + gLongClazz = MakeGlobalRefOrDie(env, FindClassOrDie(env, "java/lang/Long")); + gLongValueOf = GetStaticMethodIDOrDie(env, gLongClazz, "valueOf", "(J)Ljava/lang/Long;"); return RegisterMethodsOrDie(env, kVintfObjectPathName, gVintfObjectMethods, NELEM(gVintfObjectMethods)); |