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

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java

Issue 2290133002: Make WebView keep keyboard when losing focus (Closed)
Patch Set: rebase Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser.input; 5 package org.chromium.content.browser.input;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.content.ClipData; 8 import android.content.ClipData;
9 import android.content.ClipboardManager; 9 import android.content.ClipboardManager;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.res.Configuration; 11 import android.content.res.Configuration;
12 import android.os.Handler; 12 import android.os.Handler;
13 import android.os.Looper; 13 import android.os.Looper;
14 import android.test.suitebuilder.annotation.MediumTest; 14 import android.test.suitebuilder.annotation.MediumTest;
15 import android.test.suitebuilder.annotation.SmallTest; 15 import android.test.suitebuilder.annotation.SmallTest;
16 import android.text.InputType; 16 import android.text.InputType;
17 import android.text.TextUtils; 17 import android.text.TextUtils;
18 import android.util.Pair; 18 import android.util.Pair;
19 import android.view.KeyEvent; 19 import android.view.KeyEvent;
20 import android.view.View; 20 import android.view.View;
21 import android.view.inputmethod.BaseInputConnection; 21 import android.view.inputmethod.BaseInputConnection;
22 import android.view.inputmethod.EditorInfo; 22 import android.view.inputmethod.EditorInfo;
23 import android.view.inputmethod.InputConnection; 23 import android.view.inputmethod.InputConnection;
24 24
25 import org.chromium.base.ThreadUtils; 25 import org.chromium.base.ThreadUtils;
26 import org.chromium.base.test.util.CommandLineFlags; 26 import org.chromium.base.test.util.CommandLineFlags;
27 import org.chromium.base.test.util.DisabledTest; 27 import org.chromium.base.test.util.DisabledTest;
28 import org.chromium.base.test.util.Feature; 28 import org.chromium.base.test.util.Feature;
29 import org.chromium.base.test.util.RetryOnFailure; 29 import org.chromium.base.test.util.RetryOnFailure;
30 import org.chromium.base.test.util.UrlUtils;
30 import org.chromium.base.test.util.parameter.Parameter; 31 import org.chromium.base.test.util.parameter.Parameter;
31 import org.chromium.base.test.util.parameter.ParameterizedTest; 32 import org.chromium.base.test.util.parameter.ParameterizedTest;
32 import org.chromium.content.browser.ContentViewCore; 33 import org.chromium.content.browser.ContentViewCore;
33 import org.chromium.content.browser.test.util.Criteria; 34 import org.chromium.content.browser.test.util.Criteria;
34 import org.chromium.content.browser.test.util.CriteriaHelper; 35 import org.chromium.content.browser.test.util.CriteriaHelper;
35 import org.chromium.content.browser.test.util.DOMUtils; 36 import org.chromium.content.browser.test.util.DOMUtils;
36 import org.chromium.content.browser.test.util.JavaScriptUtils; 37 import org.chromium.content.browser.test.util.JavaScriptUtils;
37 import org.chromium.content.browser.test.util.TestCallbackHelperContainer; 38 import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
38 import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper; 39 import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper;
39 import org.chromium.content_public.browser.WebContents; 40 import org.chromium.content_public.browser.WebContents;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT}); 112 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT});
112 assertEquals(0, mConnectionFactory.getOutAttrs().initialSelStart); 113 assertEquals(0, mConnectionFactory.getOutAttrs().initialSelStart);
113 assertEquals(0, mConnectionFactory.getOutAttrs().initialSelEnd); 114 assertEquals(0, mConnectionFactory.getOutAttrs().initialSelEnd);
114 115
115 waitForEventLogs("selectionchange"); 116 waitForEventLogs("selectionchange");
116 clearEventLogs(); 117 clearEventLogs();
117 118
118 resetAllStates(); 119 resetAllStates();
119 } 120 }
120 121
122 private void fullyLoadUrl(final String url) throws Throwable {
123 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
124 @Override
125 public void run() {
126 getActivity().getActiveShell().loadUrl(url);
127 }
128 });
129 waitForActiveShellToBeDoneLoading();
130 }
131
132 @MediumTest
133 @Feature({"TextInput", "Main"})
134 @RetryOnFailure
135 public void testKeyboardDismissedWhenNavigating() throws Throwable {
136 assertWaitForKeyboardStatus(true);
137
138 // Hide keyboard when loading a new Url.
139 fullyLoadUrl(UrlUtils.getIsolatedTestFileUrl(INPUT_FORM_HTML));
140 assertWaitForKeyboardStatus(false);
141
142 DOMUtils.clickNode(this, mContentViewCore, "input_text");
143 assertWaitForKeyboardStatus(true);
144
145 // Hide keyboard when navigating.
146 final String code = "document.getElementById(\"link\").click()";
147 JavaScriptUtils.executeJavaScriptAndWaitForResult(
148 getContentViewCore().getWebContents(), code);
149 assertWaitForKeyboardStatus(false);
150 }
151
121 @MediumTest 152 @MediumTest
122 @Feature({"TextInput", "Main"}) 153 @Feature({"TextInput", "Main"})
123 public void testKeyboardDismissedAfterClickingGo() throws Throwable { 154 public void testKeyboardDismissedAfterClickingGo() throws Throwable {
124 setComposingText("hello", 1); 155 setComposingText("hello", 1);
125 waitAndVerifyUpdateSelection(0, 5, 5, 0, 5); 156 waitAndVerifyUpdateSelection(0, 5, 5, 0, 5);
126 157
127 performGo(mCallbackContainer); 158 performGo(mCallbackContainer);
128 159
129 assertWaitForKeyboardStatus(false); 160 assertWaitForKeyboardStatus(false);
130 } 161 }
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 660
630 private void onConfigurationChanged(final Configuration config) { 661 private void onConfigurationChanged(final Configuration config) {
631 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 662 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
632 @Override 663 @Override
633 public void run() { 664 public void run() {
634 mContentViewCore.onConfigurationChanged(config); 665 mContentViewCore.onConfigurationChanged(config);
635 } 666 }
636 }); 667 });
637 } 668 }
638 669
639 private void reloadPage() { 670 private void reloadPage() throws Throwable {
640 // Reload the page, then focus will be lost and keyboard should be hidde n. 671 // Reload the page, then focus will be lost and keyboard should be hidde n.
641 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 672 fullyLoadUrl(getContentViewCore().getWebContents().getUrl());
642 @Override
643 public void run() {
644 final String currentUrl = getContentViewCore().getWebContents(). getUrl();
645 getActivity().getActiveShell().loadUrl(currentUrl);
646 }
647 });
648 } 673 }
649 674
650 @SmallTest 675 @SmallTest
651 @Feature({"TextInput"}) 676 @Feature({"TextInput"})
652 @RetryOnFailure 677 @RetryOnFailure
653 public void testPhysicalKeyboard_AttachDetach() throws Exception { 678 public void testPhysicalKeyboard_AttachDetach() throws Throwable {
654 attachPhysicalKeyboard(); 679 attachPhysicalKeyboard();
655 // We still call showSoftKeyboard, which will be ignored by physical key board. 680 // We still call showSoftKeyboard, which will be ignored by physical key board.
656 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT}); 681 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT});
657 setComposingText("a", 1); 682 setComposingText("a", 1);
658 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT}); 683 waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT});
659 detachPhysicalKeyboard(); 684 detachPhysicalKeyboard();
660 assertWaitForKeyboardStatus(true); 685 assertWaitForKeyboardStatus(true);
661 // Now we really show soft keyboard. We also call restartInput when conf iguration changes. 686 // Now we really show soft keyboard. We also call restartInput when conf iguration changes.
662 waitForKeyboardStates(2, 0, 2, new Integer[] {TextInputType.TEXT, TextIn putType.TEXT}); 687 waitForKeyboardStates(2, 0, 2, new Integer[] {TextInputType.TEXT, TextIn putType.TEXT});
663 688
(...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 public void onViewAttachedToWindow() { 2002 public void onViewAttachedToWindow() {
1978 mFactory.onViewAttachedToWindow(); 2003 mFactory.onViewAttachedToWindow();
1979 } 2004 }
1980 2005
1981 @Override 2006 @Override
1982 public void onViewDetachedFromWindow() { 2007 public void onViewDetachedFromWindow() {
1983 mFactory.onViewDetachedFromWindow(); 2008 mFactory.onViewDetachedFromWindow();
1984 } 2009 }
1985 } 2010 }
1986 } 2011 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698