diff options
author | 2017-05-09 14:48:37 -0700 | |
---|---|---|
committer | 2017-05-10 16:54:20 -0700 | |
commit | 054f235c61f3840213d2bd53d28202a372b53741 (patch) | |
tree | 4d40f6f53da3c1423ec179b424d20f7d460e825e | |
parent | ef5700667fc19a5a903d14e3d90b2d4aed2f2e5c (diff) |
Add vr platform lib
Add the vr platform library, which allows client code to load the dvr
api and access the getVrBoot() method.
Bug: 38134403
Test: Booted a Marlin.
Change-Id: I884a623ec9a297a2973f1c42c3da094c6c155630
-rw-r--r-- | vr/Android.mk | 38 | ||||
-rw-r--r-- | vr/com.google.vr.platform.xml | 20 | ||||
-rw-r--r-- | vr/dvr_library_loader.cpp | 25 | ||||
-rw-r--r-- | vr/java/com/google/vr/platform/DeviceInfo.java | 19 | ||||
-rw-r--r-- | vr/java/com/google/vr/platform/Dvr.java | 22 |
5 files changed, 124 insertions, 0 deletions
diff --git a/vr/Android.mk b/vr/Android.mk new file mode 100644 index 000000000000..5b65d3fddba1 --- /dev/null +++ b/vr/Android.mk @@ -0,0 +1,38 @@ +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +LOCAL_PATH := $(call my-dir) + +# Library to perform dlopen on the actual shared library. +include $(CLEAR_VARS) +LOCAL_MODULE := libdvr_loader +LOCAL_MODULE_OWNER := google +LOCAL_SRC_FILES := dvr_library_loader.cpp +include $(BUILD_SHARED_LIBRARY) + +# Java platform library for vr stuff. +include $(CLEAR_VARS) +LOCAL_MODULE := com.google.vr.platform +LOCAL_MODULE_OWNER := google +LOCAL_REQUIRED_MODULES := libdvr_loader libdvr +LOCAL_SRC_FILES := $(call all-java-files-under, java) +include $(BUILD_JAVA_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := com.google.vr.platform.xml +LOCAL_SRC_FILES := com.google.vr.platform.xml +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_OWNER := google +LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions +include $(BUILD_PREBUILT) diff --git a/vr/com.google.vr.platform.xml b/vr/com.google.vr.platform.xml new file mode 100644 index 000000000000..952b4763b123 --- /dev/null +++ b/vr/com.google.vr.platform.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<permissions> + <library name="com.google.vr.platform" + file="/system/framework/com.google.vr.platform.jar" /> +</permissions> diff --git a/vr/dvr_library_loader.cpp b/vr/dvr_library_loader.cpp new file mode 100644 index 000000000000..0b4298a100a9 --- /dev/null +++ b/vr/dvr_library_loader.cpp @@ -0,0 +1,25 @@ +#include <dlfcn.h> +#include <jni.h> + +#include <string> + +extern "C" { + +JNIEXPORT jlong JNICALL +Java_com_google_vr_platform_Dvr_nativeLoadLibrary( + JNIEnv* env, jclass, jstring java_library) { + if (!java_library) + return 0; + + // Convert the Java String object to a C++ null-terminated string. + const char* data = env->GetStringUTFChars(java_library, NULL); + size_t size = env->GetStringUTFLength(java_library); + std::string library(data, size); + env->ReleaseStringUTFChars(java_library, data); + + // Return the handle to the requested library. + return reinterpret_cast<jlong>( + dlopen(library.c_str(), RTLD_NOW | RTLD_LOCAL)); +} + +} // extern "C" diff --git a/vr/java/com/google/vr/platform/DeviceInfo.java b/vr/java/com/google/vr/platform/DeviceInfo.java new file mode 100644 index 000000000000..f6da66b1807b --- /dev/null +++ b/vr/java/com/google/vr/platform/DeviceInfo.java @@ -0,0 +1,19 @@ +package com.google.vr.platform; + +import android.os.SystemProperties; + +/** + * Class to get information about the vr device. + * @hide + */ +public class DeviceInfo { + + private static final String VR_MODE_BOOT = "ro.boot.vr"; + + /** + * Returns true if this device boots directly in VR mode. + */ + public static boolean getVrBoot() { + return SystemProperties.getBoolean(VR_MODE_BOOT, false); + } +} diff --git a/vr/java/com/google/vr/platform/Dvr.java b/vr/java/com/google/vr/platform/Dvr.java new file mode 100644 index 000000000000..b07d6347c9a5 --- /dev/null +++ b/vr/java/com/google/vr/platform/Dvr.java @@ -0,0 +1,22 @@ +package com.google.vr.platform; + +/** + * Class to load the dvr api. + * @hide + */ +public class Dvr { + /** + * Opens a shared library containing the dvr api and returns the handle to it. + * + * @return A Long object describing the handle returned by dlopen. + */ + public static Long loadLibrary() { + // Load a thin JNI library that runs dlopen on request. + System.loadLibrary("dvr_loader"); + + // Performs dlopen on the library and returns the handle. + return nativeLoadLibrary("libdvr.so"); + } + + private static native long nativeLoadLibrary(String library); +} |