| OLD | NEW | 
|     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  Loading... | 
|   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  Loading... | 
|   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  Loading... | 
|  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 } | 
| OLD | NEW |