| Index: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
|
| index 470b8fee24bb8d89551590c8d2f20aa21f6111a7..1ed2b95ca413c3b6041e53015f79c19e10a4af62 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
|
| @@ -35,6 +35,7 @@ import org.chromium.chrome.browser.ChromeSwitches;
|
| import org.chromium.chrome.browser.ChromeVersionInfo;
|
| import org.chromium.chrome.browser.WebContentsFactory;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| +import org.chromium.chrome.browser.tab.TabContentViewParent;
|
| import org.chromium.content.browser.ContentView;
|
| import org.chromium.content.browser.ContentViewCore;
|
| import org.chromium.content_public.browser.WebContents;
|
| @@ -73,12 +74,11 @@ public class VrShellImpl extends GvrLayout implements GLSurfaceView.Renderer, Vr
|
|
|
| // The ContentViewCore for the main content rect in VR.
|
| private ContentViewCore mContentCVC;
|
| -
|
| - // The non-VR container view for mContentCVC.
|
| - private ViewGroup mOriginalContentViewParent;
|
| + private TabContentViewParent mTabParent;
|
| + private ViewGroup mTabParentParent;
|
|
|
| // TODO(mthiesse): Instead of caching these values, make tab reparenting work for this case.
|
| - private int mOriginalContentViewIndex;
|
| + private int mOriginalTabParentIndex;
|
| private ViewGroup.LayoutParams mOriginalLayoutParams;
|
| private WindowAndroid mOriginalWindowAndroid;
|
|
|
| @@ -164,23 +164,26 @@ public class VrShellImpl extends GvrLayout implements GLSurfaceView.Renderer, Vr
|
|
|
| mTab.updateWindowAndroid(mContentVrWindowAndroid);
|
|
|
| - ViewGroup contentContentView = mContentCVC.getContainerView();
|
| - mOriginalContentViewParent = ((ViewGroup) contentContentView.getParent());
|
| - mOriginalContentViewIndex = mOriginalContentViewParent.indexOfChild(contentContentView);
|
| - mOriginalLayoutParams = contentContentView.getLayoutParams();
|
| - mOriginalContentViewParent.removeView(contentContentView);
|
| + mTabParent = mTab.getView();
|
| + mTabParentParent = (ViewGroup) mTabParent.getParent();
|
| + mOriginalTabParentIndex = mTabParentParent.indexOfChild(mTabParent);
|
| + mOriginalLayoutParams = mTabParent.getLayoutParams();
|
| + mTabParentParent.removeView(mTabParent);
|
|
|
| - mContentViewCoreContainer.addView(contentContentView, new FrameLayout.LayoutParams(
|
| - FrameLayout.LayoutParams.MATCH_PARENT,
|
| - FrameLayout.LayoutParams.MATCH_PARENT));
|
| + mContentViewCoreContainer.addView(mTabParent, new FrameLayout.LayoutParams(
|
| + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
|
| }
|
|
|
| private void restoreContentWindow() {
|
| - ViewGroup contentContentView = mContentCVC.getContainerView();
|
| mTab.updateWindowAndroid(mOriginalWindowAndroid);
|
| - mContentViewCoreContainer.removeView(contentContentView);
|
| - mOriginalContentViewParent.addView(contentContentView, mOriginalContentViewIndex,
|
| - mOriginalLayoutParams);
|
| +
|
| + // If the tab's view has changed, the necessary view reparenting has already been done.
|
| + if (mTab.getView() == mTabParent) {
|
| + mContentViewCoreContainer.removeView(mTabParent);
|
| + mTabParentParent.addView(mTabParent, mOriginalTabParentIndex, mOriginalLayoutParams);
|
| + mTabParent.requestFocus();
|
| + }
|
| + mTabParent = null;
|
| }
|
|
|
| private static class FrameListener implements OnFrameAvailableListener {
|
|
|