Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java

Issue 2657703002: Swap to foreground tab when following links that open in a new tab/window in VR Shell. (Closed)
Patch Set: Address comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698