| 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 70f379bce05c66a8ba887faf2c87da37fdb9eb89..835a3c637d386d058471b04f2a15eedbec09cd77 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
|
| @@ -30,6 +30,8 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
|
| import org.chromium.chrome.browser.tab.EmptyTabObserver;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| import org.chromium.chrome.browser.tab.TabObserver;
|
| +import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
|
| +import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
|
|
|
| import java.lang.annotation.Retention;
|
| import java.lang.annotation.RetentionPolicy;
|
| @@ -74,6 +76,7 @@ public class VrShellDelegate {
|
|
|
| private final ChromeTabbedActivity mActivity;
|
| private TabObserver mTabObserver;
|
| + private TabModelSelectorObserver mTabModelSelectorObserver;
|
| private Intent mEnterVRIntent;
|
|
|
| @VrSupportLevel
|
| @@ -111,6 +114,7 @@ public class VrShellDelegate {
|
| mVrSupportLevel = VR_NOT_AVAILABLE;
|
| mEnterVRIntent = null;
|
| mTabObserver = null;
|
| + mTabModelSelectorObserver = null;
|
| return;
|
| }
|
|
|
| @@ -147,6 +151,14 @@ public class VrShellDelegate {
|
| }
|
| };
|
| }
|
| + if (mTabModelSelectorObserver == null) {
|
| + mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() {
|
| + @Override
|
| + public void onChange() {
|
| + swapToForegroundTab();
|
| + }
|
| + };
|
| + }
|
|
|
| mVrSupportLevel = mVrDaydreamApi.isDaydreamReadyDevice() ? VR_DAYDREAM : VR_CARDBOARD;
|
| }
|
| @@ -250,6 +262,7 @@ public class VrShellDelegate {
|
| mVrShell.resume();
|
| mTab.updateFullscreenEnabledState();
|
| setEnterVRResult(true, requestedWebVR);
|
| + mActivity.getTabModelSelector().addObserver(mTabModelSelectorObserver);
|
| }
|
|
|
| private void setEnterVRResult(boolean success, boolean requestedWebVR) {
|
| @@ -260,6 +273,22 @@ public class VrShellDelegate {
|
| mRequestedWebVR = false;
|
| }
|
|
|
| + private void swapToForegroundTab() {
|
| + Tab tab = mActivity.getActivityTab();
|
| + if (tab == mTab) return;
|
| + if (!canEnterVR(tab)) {
|
| + forceExitVr();
|
| + return;
|
| + }
|
| + mTab.removeObserver(mTabObserver);
|
| + mTab.updateFullscreenEnabledState();
|
| +
|
| + mVrShell.swapTab(tab);
|
| + mTab = tab;
|
| + mTab.addObserver(mTabObserver);
|
| + mTab.updateFullscreenEnabledState();
|
| + }
|
| +
|
| private boolean canEnterVR(Tab tab) {
|
| if (!LibraryLoader.isInitialized()) {
|
| return false;
|
| @@ -511,6 +540,7 @@ public class VrShellDelegate {
|
| mVrClassesWrapper.setVrModeEnabled(false);
|
| mLastVRExit = SystemClock.uptimeMillis();
|
| }
|
| + mActivity.getTabModelSelector().removeObserver(mTabModelSelectorObserver);
|
| mActivity.setRequestedOrientation(mRestoreOrientation);
|
| mVrShell.pause();
|
| removeVrViews();
|
|
|