| Index: device/vr/android/gvr/gvr_device_provider.cc
|
| diff --git a/device/vr/android/gvr/gvr_device_provider.cc b/device/vr/android/gvr/gvr_device_provider.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd54be19b18fd25a5f2d2177b92c21e704801732
|
| --- /dev/null
|
| +++ b/device/vr/android/gvr/gvr_device_provider.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "device/vr/android/gvr/gvr_device_provider.h"
|
| +
|
| +#include "base/android/context_utils.h"
|
| +#include "base/android/jni_android.h"
|
| +#include "base/android/jni_utils.h"
|
| +#include "base/android/scoped_java_ref.h"
|
| +#include "device/vr/android/gvr/gvr_device.h"
|
| +#include "jni/GvrDeviceProvider_jni.h"
|
| +
|
| +using base::android::AttachCurrentThread;
|
| +using base::android::GetApplicationContext;
|
| +
|
| +namespace device {
|
| +
|
| +GvrDeviceProvider::GvrDeviceProvider() : VRDeviceProvider() {
|
| + GvrApiManager::GetInstance()->AddClient(this);
|
| +}
|
| +
|
| +GvrDeviceProvider::~GvrDeviceProvider() {
|
| + // TODO: This should eventually be handled by an actual GvrLayout instance in
|
| + // the view tree.
|
| + GvrApiManager::GetInstance()->Shutdown();
|
| + if (!j_device_.is_null()) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + Java_GvrDeviceProvider_shutdown(env, j_device_.obj());
|
| + }
|
| +
|
| + GvrApiManager::GetInstance()->RemoveClient(this);
|
| +}
|
| +
|
| +void GvrDeviceProvider::GetDevices(std::vector<VRDevice*>* devices) {
|
| + Initialize();
|
| +
|
| + if (vr_device_)
|
| + devices->push_back(vr_device_.get());
|
| +}
|
| +
|
| +void GvrDeviceProvider::Initialize() {
|
| + // TODO: This should eventually be handled by an actual GvrLayout instance in
|
| + // the view tree.
|
| + if (j_device_.is_null()) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| +
|
| + j_device_.Reset(
|
| + Java_GvrDeviceProvider_create(env, GetApplicationContext()));
|
| + jlong gvr_api =
|
| + Java_GvrDeviceProvider_getNativeContext(env, j_device_.obj());
|
| +
|
| + if (!gvr_api)
|
| + return;
|
| +
|
| + GvrApiManager::GetInstance()->Initialize(
|
| + reinterpret_cast<gvr_context*>(gvr_api));
|
| + }
|
| +}
|
| +
|
| +void GvrDeviceProvider::OnGvrApiInitialized(gvr::GvrApi* gvr_api) {
|
| + if (!vr_device_)
|
| + vr_device_.reset(new GvrDevice(this, gvr_api));
|
| +
|
| + // Should fire a vrdisplayconnected event here.
|
| +}
|
| +
|
| +void GvrDeviceProvider::OnGvrApiShutdown() {
|
| + // Nothing to do here just yet. Eventually want to shut down the VRDevice
|
| +}
|
| +
|
| +} // namespace device
|
|
|