| Index: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
|
| index 826c000bcee49356b07d5d0d5b28390894035a8a..aa8b50be9c27fd596d4c9df37bc81901624474b9 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
|
| @@ -15,6 +15,8 @@ import android.view.WindowManager;
|
| import android.widget.FrameLayout;
|
|
|
| import org.chromium.base.Log;
|
| +import org.chromium.base.annotations.CalledByNative;
|
| +import org.chromium.base.annotations.JNINamespace;
|
| import org.chromium.chrome.browser.ChromeTabbedActivity;
|
| import org.chromium.chrome.browser.tab.Tab;
|
|
|
| @@ -24,6 +26,7 @@ import java.lang.reflect.InvocationTargetException;
|
| /**
|
| * Manages interactions with the VR Shell.
|
| */
|
| +@JNINamespace("vr_shell")
|
| public class VrShellDelegate {
|
| private static final String TAG = "VrShellDelegate";
|
|
|
| @@ -36,6 +39,7 @@ public class VrShellDelegate {
|
| private boolean mInVr;
|
| private int mRestoreSystemUiVisibilityFlag = -1;
|
| private String mVrExtra;
|
| + private long mNativeVrShellDelegate;
|
|
|
| public VrShellDelegate(ChromeTabbedActivity activity) {
|
| mActivity = activity;
|
| @@ -52,6 +56,16 @@ public class VrShellDelegate {
|
| }
|
| }
|
|
|
| + /**
|
| + * Should be called once the native library is loaded so that the native portion of this
|
| + * class can be initialized.
|
| + */
|
| + public void onNativeLibraryReady() {
|
| + if (mVrShellEnabled) {
|
| + mNativeVrShellDelegate = nativeInit();
|
| + }
|
| + }
|
| +
|
| @SuppressWarnings("unchecked")
|
| private Class<? extends VrShellInterface> maybeFindVrShell() {
|
| try {
|
| @@ -67,10 +81,12 @@ public class VrShellDelegate {
|
| *
|
| * This function performs native initialization, and so must only be called after native
|
| * libraries are ready.
|
| - * @Returns Whether or not we are in VR when this function returns.
|
| + * @param inWebVR If true should begin displaying WebVR content rather than the VrShell UI.
|
| + * @return Whether or not we are in VR when this function returns.
|
| */
|
| - public boolean enterVRIfNecessary() {
|
| - if (!mVrShellEnabled) return false;
|
| + @CalledByNative
|
| + public boolean enterVRIfNecessary(boolean inWebVR) {
|
| + if (!mVrShellEnabled || mNativeVrShellDelegate == 0) return false;
|
| Tab tab = mActivity.getActivityTab();
|
| // TODO(mthiesse): When we have VR UI for opening new tabs, etc., allow VR Shell to be
|
| // entered without any current tabs.
|
| @@ -86,12 +102,24 @@ public class VrShellDelegate {
|
| }
|
| addVrViews();
|
| setupVrModeWindowFlags();
|
| - mVrShell.onNativeLibraryReady(tab);
|
| + mVrShell.initializeNative(tab, this);
|
| + if (inWebVR) mVrShell.setWebVrModeEnabled(true);
|
| mVrShell.setVrModeEnabled(true);
|
| mInVr = true;
|
| return true;
|
| }
|
|
|
| + @CalledByNative
|
| + private boolean exitWebVR() {
|
| + if (!mInVr) return false;
|
| + mVrShell.setWebVrModeEnabled(false);
|
| + // TODO(bajones): Once VR Shell can be invoked outside of WebVR this
|
| + // should no longer exit the shell outright. Need a way to determine
|
| + // how VrShell was created.
|
| + shutdownVR();
|
| + return true;
|
| + }
|
| +
|
| /**
|
| * Resumes VR Shell.
|
| */
|
| @@ -108,11 +136,26 @@ public class VrShellDelegate {
|
| }
|
|
|
| /**
|
| - * Exits VR Shell, performing all necessary cleanup.
|
| - * @Returns Whether or not we exited VR.
|
| + * Exits the current VR mode (WebVR or VRShell)
|
| + * @return Whether or not we exited VR.
|
| */
|
| public boolean exitVRIfNecessary() {
|
| if (!mInVr) return false;
|
| + // If WebVR is presenting instruct it to exit. VR mode should not
|
| + // exit in this scenario, in case we want to return to the VrShell.
|
| + if (!nativeExitWebVRIfNecessary(mNativeVrShellDelegate)) {
|
| + // If WebVR was not presenting, shutdown VR mode entirely.
|
| + shutdownVR();
|
| + }
|
| +
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * Exits VR Shell, performing all necessary cleanup.
|
| + */
|
| + private void shutdownVR() {
|
| + if (!mInVr) return;
|
| mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
|
| mVrShell.setVrModeEnabled(false);
|
| mVrShell.pause();
|
| @@ -120,7 +163,6 @@ public class VrShellDelegate {
|
| clearVrModeWindowFlags();
|
| destroyVrShell();
|
| mInVr = false;
|
| - return true;
|
| }
|
|
|
| private boolean createVrShell() {
|
| @@ -205,4 +247,15 @@ public class VrShellDelegate {
|
| public boolean isVrShellEnabled() {
|
| return mVrShellEnabled;
|
| }
|
| +
|
| + /**
|
| + * @return Pointer to the native VrShellDelegate object.
|
| + */
|
| + @CalledByNative
|
| + private long getNativePointer() {
|
| + return mNativeVrShellDelegate;
|
| + }
|
| +
|
| + private native long nativeInit();
|
| + private native boolean nativeExitWebVRIfNecessary(long nativeVrShellDelegate);
|
| }
|
|
|