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 70f379bce05c66a8ba887faf2c87da37fdb9eb89..4a2cfd1942c87726b27b9cccbc08a24392ff08ee 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,19 @@ public class VrShellDelegate { |
| mRequestedWebVR = false; |
| } |
| + private void swapToForegroundTab() { |
| + Tab tab = mActivity.getActivityTab(); |
| + if (tab == mTab) return; |
| + if (!canEnterVR(tab)) forceExitVr(); |
|
bshe
2017/01/25 22:15:45
return after forceExitVr?
mthiesse
2017/01/25 22:34:26
Done.
|
| + 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 +537,7 @@ public class VrShellDelegate { |
| mVrClassesWrapper.setVrModeEnabled(false); |
| mLastVRExit = SystemClock.uptimeMillis(); |
| } |
| + mActivity.getTabModelSelector().removeObserver(mTabModelSelectorObserver); |
| mActivity.setRequestedOrientation(mRestoreOrientation); |
| mVrShell.pause(); |
| removeVrViews(); |