Index: device/vr/android/gvr/gvr_api_manager.cc |
diff --git a/device/vr/android/gvr/gvr_api_manager.cc b/device/vr/android/gvr/gvr_api_manager.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..75d20e039fc77ce18c0d428e80fc560df196036e |
--- /dev/null |
+++ b/device/vr/android/gvr/gvr_api_manager.cc |
@@ -0,0 +1,56 @@ |
+// 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_api_manager.h" |
+ |
+namespace device { |
+ |
+namespace { |
+GvrApiManager* g_gvr_api_manager = nullptr; |
+} |
+ |
+GvrApiManager* GvrApiManager::GetInstance() { |
+ if (!g_gvr_api_manager) |
+ g_gvr_api_manager = new GvrApiManager(); |
+ return g_gvr_api_manager; |
+} |
+ |
+GvrApiManager::GvrApiManager() {} |
+ |
+GvrApiManager::~GvrApiManager() {} |
+ |
+void GvrApiManager::AddClient(GvrApiManagerClient* client) { |
+ clients_.push_back(client); |
+ |
+ if (gvr_api_) |
+ client->OnGvrApiInitialized(gvr_api_.get()); |
+} |
+ |
+void GvrApiManager::RemoveClient(GvrApiManagerClient* client) { |
+ clients_.erase(std::remove(clients_.begin(), clients_.end(), client), |
+ clients_.end()); |
+} |
+ |
+void GvrApiManager::Initialize(gvr_context* context) { |
+ gvr_api_ = gvr::GvrApi::WrapNonOwned(context); |
+ |
+ for (const auto& client : clients_) |
+ client->OnGvrApiInitialized(gvr_api_.get()); |
+} |
+ |
+void GvrApiManager::Shutdown() { |
+ if (!gvr_api_) |
+ return; |
+ |
+ gvr_api_.reset(nullptr); |
+ |
+ for (const auto& client : clients_) |
+ client->OnGvrApiShutdown(); |
+} |
+ |
+gvr::GvrApi* GvrApiManager::gvr_api() { |
+ return gvr_api_.get(); |
+} |
+ |
+} // namespace device |