Chromium Code Reviews| 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..183a282df4927e0cf963823370716f34bb984044 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,14 @@ 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() { |
| + mNativeVrShellDelegate = nativeInit(); |
|
Ted C
2016/09/21 17:59:24
do you need a check for mVrShellEnabled here? oth
|
| + } |
| + |
| @SuppressWarnings("unchecked") |
| private Class<? extends VrShellInterface> maybeFindVrShell() { |
| try { |
| @@ -69,8 +81,9 @@ public class VrShellDelegate { |
| * libraries are ready. |
| * @Returns Whether or not we are in VR when this function returns. |
|
Ted C
2016/09/21 17:59:24
We should add an @param for inWebVR here
Also if
|
| */ |
| - 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 +99,26 @@ public class VrShellDelegate { |
| } |
| addVrViews(); |
| setupVrModeWindowFlags(); |
| - mVrShell.onNativeLibraryReady(tab); |
| + mVrShell.onNativeLibraryReady(tab, this); |
|
Ted C
2016/09/21 17:59:25
to me, it's weird to have this not in the onNative
bajones
2016/09/21 19:16:25
While "something" seems like a great function name
|
| + if (inWebVR) { |
|
Ted C
2016/09/21 17:59:25
in java land (if it is readable), you can put the
|
| + mVrShell.setWebVrModeEnabled(true); |
| + } |
| mVrShell.setVrModeEnabled(true); |
| mInVr = true; |
| return true; |
| } |
| + @CalledByNative |
| + public boolean exitWebVR() { |
|
Ted C
2016/09/21 17:59:25
does this only get accessed by native? If so, you
|
| + if (!mInVr) return false; |
| + mVrShell.setWebVrModeEnabled(false); |
|
Ted C
2016/09/21 17:59:25
Could we just move this line into shutdownVR (is i
bajones
2016/09/21 19:16:25
I think the comment below illustrates the reason f
|
| + // 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 +135,26 @@ public class VrShellDelegate { |
| } |
| /** |
| - * Exits VR Shell, performing all necessary cleanup. |
| + * Exits the current VR mode (WebVR or VRShell) |
| * @Returns Whether or not we exited VR. |
|
Ted C
2016/09/21 17:59:25
@return
|
| */ |
| 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 +162,6 @@ public class VrShellDelegate { |
| clearVrModeWindowFlags(); |
| destroyVrShell(); |
| mInVr = false; |
| - return true; |
| } |
| private boolean createVrShell() { |
| @@ -205,4 +246,15 @@ public class VrShellDelegate { |
| public boolean isVrShellEnabled() { |
| return mVrShellEnabled; |
| } |
| + |
| + /** |
| + * @return Pointer to the native VrShellDelegate object. |
| + */ |
| + @CalledByNative |
| + public long getNativePointer() { |
|
Ted C
2016/09/21 17:59:24
should be private
|
| + return mNativeVrShellDelegate; |
| + } |
| + |
| + private native long nativeInit(); |
| + private native boolean nativeExitWebVRIfNecessary(long nativeVrShellDelegate); |
| } |