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 18473571ac120b..e6f2c2cd409382 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 @@ -58,6 +58,7 @@ import org.chromium.content_public.browser.ContentViewCore; import org.chromium.content_public.browser.ImeAdapter; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.BrowserControlsState; import org.chromium.ui.base.PermissionCallback; import org.chromium.ui.base.WindowAndroid; @@ -216,6 +217,9 @@ public void onContentChanged(Tab tab) { @Override public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) { onContentChanged(tab); + // It is not needed to restore IME for old web contents as it is going away and + // replaced by the new web contents. + configWebContentsImeForVr(tab.getWebContents()); } @Override @@ -426,41 +430,41 @@ private void swapToTab(Tab tab) { mTabObserver.onContentChanged(mTab); } + private void configWebContentsImeForVr(WebContents webContents) { + if (webContents == null) return; + + ImeAdapter imeAdapter = ImeAdapter.fromWebContents(webContents); + if (imeAdapter == null) return; + + mInputMethodManagerWrapper = new VrInputMethodManagerWrapper(mActivity, this); + imeAdapter.setInputMethodManagerWrapper(mInputMethodManagerWrapper); + } + + private void restoreWebContentsImeFromVr(WebContents webContents) { + if (webContents == null) return; + + ImeAdapter imeAdapter = ImeAdapter.fromWebContents(webContents); + if (imeAdapter == null) return; + + imeAdapter.setInputMethodManagerWrapper( + ImeAdapter.createDefaultInputMethodManagerWrapper(mActivity)); + mInputMethodManagerWrapper = null; + } + private void initializeTabForVR() { if (mTab == null) return; // Make sure we are not redirecting to another app, i.e. out of VR mode. mNonVrTabRedirectHandler = mTab.getTabRedirectHandler(); mTab.setTabRedirectHandler(mTabRedirectHandler); assert mTab.getWindowAndroid() == mContentVrWindowAndroid; - initializeImeForVr(); - } - - private void initializeImeForVr() { - assert mTab != null; - if (mTab.getWebContents() == null) return; - ImeAdapter imeAdapter = ImeAdapter.fromWebContents(mTab.getWebContents()); - if (imeAdapter != null) { - mInputMethodManagerWrapper = new VrInputMethodManagerWrapper(mActivity, this); - imeAdapter.setInputMethodManagerWrapper(mInputMethodManagerWrapper); - } - } - - private void uninitializeImeForVr() { - assert mTab != null; - if (mTab.getWebContents() == null) return; - ImeAdapter imeAdapter = ImeAdapter.fromWebContents(mTab.getWebContents()); - if (imeAdapter != null) { - imeAdapter.setInputMethodManagerWrapper( - ImeAdapter.createDefaultInputMethodManagerWrapper(mActivity)); - } - mInputMethodManagerWrapper = null; + configWebContentsImeForVr(mTab.getWebContents()); } private void restoreTabFromVR() { if (mTab == null) return; mTab.setTabRedirectHandler(mNonVrTabRedirectHandler); mNonVrTabRedirectHandler = null; - uninitializeImeForVr(); + restoreWebContentsImeFromVr(mTab.getWebContents()); } private void reparentAllTabs(WindowAndroid window) { @@ -717,7 +721,7 @@ public void shutdown() { if (mTab != null) { mTab.removeObserver(mTabObserver); restoreTabFromVR(); - uninitializeImeForVr(); + restoreWebContentsImeFromVr(mTab.getWebContents()); if (mTab.getContentViewCore() != null) { View parent = mTab.getContentView(); mTab.getWebContents().setSize(parent.getWidth(), parent.getHeight());