1ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka/*
2ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * Copyright (C) 2016 The Android Open Source Project
3ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka *
4ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
5ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * you may not use this file except in compliance with the License.
6ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * You may obtain a copy of the License at
7ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka *
8ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
9ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka *
10ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
11ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
12ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * See the License for the specific language governing permissions and
14ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * limitations under the License.
15ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka */
16ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
17ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakapackage android.text.method;
18ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
19ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.app.Instrumentation;
20ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.test.ActivityInstrumentationTestCase2;
21ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.text.format.DateUtils;
22ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.view.KeyEvent;
23ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.widget.EditText;
24ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.widget.TextViewActivity;
25ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
26ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport com.android.frameworks.coretests.R;
27ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
28ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakapublic abstract class KeyListenerTestCase extends
29ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        ActivityInstrumentationTestCase2<TextViewActivity> {
30ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
31ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    protected TextViewActivity mActivity;
32ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    protected Instrumentation mInstrumentation;
33ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    protected EditText mTextView;
34ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
35ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    public KeyListenerTestCase() {
36ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        super(TextViewActivity.class);
37ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    }
38ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
39ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    @Override
40ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    protected void setUp() throws Exception {
41ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        super.setUp();
42ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
43ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        mActivity = getActivity();
44ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        mInstrumentation = getInstrumentation();
45ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        mTextView = (EditText) mActivity.findViewById(R.id.textview);
46ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
47ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        mActivity.runOnUiThread(new Runnable() {
48ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka            public void run() {
49ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka                // Ensure that the screen is on for this test.
50ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka                mTextView.setKeepScreenOn(true);
51ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka            }
52ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        });
53ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
54ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        assertTrue(mActivity.waitForWindowFocus(5 * DateUtils.SECOND_IN_MILLIS));
55ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    }
56ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka
57ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    protected static KeyEvent getKey(int keycode, int metaState) {
58ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        long currentTime = System.currentTimeMillis();
59ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka        return new KeyEvent(currentTime, currentTime, KeyEvent.ACTION_DOWN, keycode,
60ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka                0 /* repeat */, metaState);
61ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka    }
62ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka}
63