1223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki/* 2223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * Copyright (C) 2015 The Android Open Source Project 3223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * 4223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * Licensed under the Apache License, Version 2.0 (the "License"); 5223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * you may not use this file except in compliance with the License. 6223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * You may obtain a copy of the License at 7223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * 8223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * http://www.apache.org/licenses/LICENSE-2.0 9223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * 10223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * Unless required by applicable law or agreed to in writing, software 11223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * distributed under the License is distributed on an "AS IS" BASIS, 12223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * See the License for the specific language governing permissions and 14223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * limitations under the License 15223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki */ 16223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki 17223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Tokipackage android.widget; 18223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki 19223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Tokiimport com.android.frameworks.coretests.R; 20223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki 21223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Tokiimport android.app.Activity; 22223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Tokiimport android.os.Bundle; 23ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.os.SystemClock; 24ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonakaimport android.util.Log; 25223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki 26223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki/** 27223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki * An activity for testing the TextView widget. 28ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * 29ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * This class is copied from {@link android.text.method.cts.KeyListenerCtsActivity} in 30ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * CtsTextTestCase. The original class is located at 31ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * cts/tests/tests/text/src/android/text/method/cts/KeyListenerCtsActivity.java 32223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki */ 33223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Tokipublic class TextViewActivity extends Activity { 34ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka private boolean mHasWindowFocus = false; 35ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka private Object mHasWindowFocusLock = new Object(); 36223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki 37223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki @Override 38223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki protected void onCreate(Bundle savedInstanceState) { 39223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki super.onCreate(savedInstanceState); 40223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki setContentView(R.layout.activity_text_view); 41223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki } 42ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka 43ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka @Override 44ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka public void onWindowFocusChanged(boolean hasFocus) { 45ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka super.onWindowFocusChanged(hasFocus); 46ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka if (!hasFocus) { 47ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka Log.w("TextViewActivity", "TextViewActivity lost window focus"); 48ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 49ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka synchronized(mHasWindowFocusLock) { 50ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka mHasWindowFocus = hasFocus; 51ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka mHasWindowFocusLock.notify(); 52ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 53ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 54ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka 55ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka /** 56ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * Blocks the calling thread until the {@link KeyListenerCtsActivity} has window focus or the 57ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka * specified duration (in milliseconds) has passed. 58ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka */ 59ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka public boolean waitForWindowFocus(long durationMillis) { 60ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka long elapsedMillis = SystemClock.elapsedRealtime(); 61ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka synchronized(mHasWindowFocusLock) { 62ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka mHasWindowFocus = hasWindowFocus(); 63ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka while (!mHasWindowFocus && durationMillis > 0) { 64ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka long newElapsedMillis = SystemClock.elapsedRealtime(); 65ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka durationMillis -= (newElapsedMillis - elapsedMillis); 66ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka elapsedMillis = newElapsedMillis; 67ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka if (durationMillis > 0) { 68ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka try { 69ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka mHasWindowFocusLock.wait(durationMillis); 70ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } catch (InterruptedException e) { 71ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 72ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 73ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 74ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka return mHasWindowFocus; 75ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 76ff3bfd5a79a95dcfccd1b8ad6c08c715ce6fa0e3Seigo Nonaka } 77223c8392f066823cf4a3a98957960deb80ab1680Abodunrinwa Toki} 78