| Index: chrome/browser/android/vr_shell/vr_shell.cc
|
| diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc
|
| index 037c2c70c39e1ef9dc42150bb16b0166df2ce78b..083ee3c29e097dedc1ac5986b941fee8e6fc6efd 100644
|
| --- a/chrome/browser/android/vr_shell/vr_shell.cc
|
| +++ b/chrome/browser/android/vr_shell/vr_shell.cc
|
| @@ -42,6 +42,7 @@
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/content_features.h"
|
| #include "content/public/common/referrer.h"
|
| +#include "device/vr/android/gvr/cardboard_gamepad_data_fetcher.h"
|
| #include "device/vr/android/gvr/gvr_device.h"
|
| #include "device/vr/android/gvr/gvr_device_provider.h"
|
| #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h"
|
| @@ -181,11 +182,16 @@ bool RegisterVrShell(JNIEnv* env) {
|
| VrShell::~VrShell() {
|
| DVLOG(1) << __FUNCTION__ << "=" << this;
|
| poll_capturing_media_task_.Cancel();
|
| - if (gamepad_source_active_) {
|
| + if (gvr_gamepad_source_active_) {
|
| device::GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory(
|
| device::GAMEPAD_SOURCE_GVR);
|
| }
|
|
|
| + if (cardboard_gamepad_source_active_) {
|
| + device::GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory(
|
| + device::GAMEPAD_SOURCE_CARDBOARD);
|
| + }
|
| +
|
| delegate_provider_->RemoveDelegate();
|
| {
|
| // The GvrLayout is, and must always be, used only on the UI thread, and the
|
| @@ -246,10 +252,49 @@ void VrShell::ExitCct() {
|
| Java_VrShellImpl_exitCct(env, j_vr_shell_.obj());
|
| }
|
|
|
| -void VrShell::OnTriggerEvent(JNIEnv* env, const JavaParamRef<jobject>& obj) {
|
| +void VrShell::ToggleCardboardGamepad(bool enabled) {
|
| + // enable/disable updating gamepad state
|
| + if (cardboard_gamepad_source_active_ && !enabled) {
|
| + device::GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory(
|
| + device::GAMEPAD_SOURCE_CARDBOARD);
|
| + cardboard_gamepad_data_fetcher_ = nullptr;
|
| + cardboard_gamepad_source_active_ = false;
|
| + }
|
| +
|
| + if (!cardboard_gamepad_source_active_ && enabled) {
|
| + // enable the gamepad
|
| + if (!delegate_provider_->device_provider())
|
| + return;
|
| +
|
| + unsigned int device_id =
|
| + delegate_provider_->device_provider()->Device()->id();
|
| +
|
| + device::GamepadDataFetcherManager::GetInstance()->AddFactory(
|
| + new device::CardboardGamepadDataFetcher::Factory(this, device_id));
|
| + cardboard_gamepad_source_active_ = true;
|
| + }
|
| +}
|
| +
|
| +void VrShell::OnTriggerEvent(JNIEnv* env,
|
| + const JavaParamRef<jobject>& obj,
|
| + bool touched) {
|
| WaitForGlThread();
|
| - PostToGlThread(FROM_HERE, base::Bind(&VrShellGl::OnTriggerEvent,
|
| - gl_thread_->GetVrShellGl()));
|
| +
|
| + // Send screen taps over to VrShellGl to be turned into simulated clicks for
|
| + // cardboard.
|
| + if (touched)
|
| + PostToGlThread(FROM_HERE, base::Bind(&VrShellGl::OnTriggerEvent,
|
| + gl_thread_->GetVrShellGl()));
|
| +
|
| + // If we are running cardboard, update gamepad state.
|
| + if (cardboard_gamepad_source_active_) {
|
| + device::CardboardGamepadData pad;
|
| + pad.timestamp = cardboard_gamepad_timer_++;
|
| + pad.is_screen_touching = touched;
|
| + if (cardboard_gamepad_data_fetcher_) {
|
| + cardboard_gamepad_data_fetcher_->SetGamepadData(pad);
|
| + }
|
| + }
|
| }
|
|
|
| void VrShell::OnPause(JNIEnv* env, const JavaParamRef<jobject>& obj) {
|
| @@ -605,25 +650,32 @@ void VrShell::ProcessContentGesture(
|
| }
|
|
|
| void VrShell::UpdateGamepadData(device::GvrGamepadData pad) {
|
| - if (!gamepad_source_active_) {
|
| + if (!gvr_gamepad_source_active_) {
|
| if (!delegate_provider_->device_provider())
|
| return;
|
|
|
| unsigned int device_id =
|
| delegate_provider_->device_provider()->Device()->id();
|
| +
|
| device::GamepadDataFetcherManager::GetInstance()->AddFactory(
|
| new device::GvrGamepadDataFetcher::Factory(this, device_id));
|
| - gamepad_source_active_ = true;
|
| + gvr_gamepad_source_active_ = true;
|
| }
|
| - if (gamepad_data_fetcher_) {
|
| - gamepad_data_fetcher_->SetGamepadData(pad);
|
| + if (gvr_gamepad_data_fetcher_) {
|
| + gvr_gamepad_data_fetcher_->SetGamepadData(pad);
|
| }
|
| }
|
|
|
| -void VrShell::RegisterGamepadDataFetcher(
|
| +void VrShell::RegisterGvrGamepadDataFetcher(
|
| device::GvrGamepadDataFetcher* fetcher) {
|
| DVLOG(1) << __FUNCTION__ << "(" << fetcher << ")";
|
| - gamepad_data_fetcher_ = fetcher;
|
| + gvr_gamepad_data_fetcher_ = fetcher;
|
| +}
|
| +
|
| +void VrShell::RegisterCardboardGamepadDataFetcher(
|
| + device::CardboardGamepadDataFetcher* fetcher) {
|
| + DVLOG(1) << __FUNCTION__ << "(" << fetcher << ")";
|
| + cardboard_gamepad_data_fetcher_ = fetcher;
|
| }
|
|
|
| bool VrShell::HasDaydreamSupport(JNIEnv* env) {
|
|
|