ContentViewCoreFocusTest.java revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5package org.chromium.content.browser;
6
7import android.content.Context;
8import android.os.IBinder;
9import android.os.ResultReceiver;
10import android.test.UiThreadTest;
11import android.test.suitebuilder.annotation.SmallTest;
12import android.view.View;
13import android.widget.EditText;
14
15import org.chromium.content.browser.input.InputMethodManagerWrapper;
16import org.chromium.content_shell.R;
17import org.chromium.content_shell_apk.ContentShellTestBase;
18
19/**
20 * Test that content view core responds to focus changes correctly.
21 */
22public class ContentViewCoreFocusTest extends ContentShellTestBase {
23    private static class TestInputMethodManagerWrapper extends InputMethodManagerWrapper {
24        private boolean mHidden = false;
25        public TestInputMethodManagerWrapper(Context context) {
26            super(context);
27        }
28
29        @Override
30        public void showSoftInput(View view, int flags, ResultReceiver resultReceiver) {
31            mHidden = false;
32        }
33
34        @Override
35        public boolean hideSoftInputFromWindow(IBinder windowToken, int flags,
36                ResultReceiver resultReceiver) {
37            mHidden = true;
38            return true;
39        }
40
41        @Override
42        public boolean isActive(View view) {
43            return true;
44        }
45
46        public boolean isHidden() {
47            return mHidden;
48        }
49    }
50
51    @UiThreadTest
52    @RerunWithUpdatedContainerView
53    @SmallTest
54    public void testHideImeOnLosingFocus() throws Throwable {
55        // Test the IME window is hidden from the content view when the content
56        // view loses its focus
57        final ContentViewCore contentViewCore = getContentViewCore();
58        final View view = contentViewCore.getContainerView();
59        final TestInputMethodManagerWrapper immw = new TestInputMethodManagerWrapper(getActivity());
60        assertTrue(view.requestFocus());
61
62        contentViewCore.setInputMethodManagerWrapperForTest(immw);
63
64        immw.showSoftInput(view, 0, null);
65        assertFalse(immw.isHidden());
66
67        final EditText urlBox = (EditText) getActivity().findViewById(R.id.url);
68
69        assertTrue(urlBox.requestFocus());
70
71        // Now another view has taken focus. The original view loses its focus
72        // and the input method window should be hidden
73        assertTrue(immw.isHidden());
74    }
75}
76