19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenpackage android.widget.touchmode; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 191d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenimport static android.util.TouchModeFlexibleAsserts.assertInTouchModeAfterClick; 201d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenimport static android.util.TouchModeFlexibleAsserts.assertInTouchModeAfterTap; 211d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenimport static android.util.TouchModeFlexibleAsserts.assertNotInTouchModeAfterKey; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.Button; 271d65c7666cbd72b8ea734bb66b352f9a09c37f89Evan Roskyimport android.widget.layout.linear.LLOfButtons1; 281d65c7666cbd72b8ea734bb66b352f9a09c37f89Evan Rosky 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure focus isn't kept by buttons when entering touch mode. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When in touch mode and hitting the d-pad, we should leave touch mode and the 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top most focusable gets focus. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TouchModeFocusChangeTest extends ActivityInstrumentationTestCase<LLOfButtons1> { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private LLOfButtons1 mActivity; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Button mFirstButton; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TouchModeFocusChangeTest() { 411d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyen super("com.android.frameworks.coretests", LLOfButtons1.class); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setUp(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivity = getActivity(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirstButton = mActivity.getFirstButton(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPreconditions() { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("we should not be in touch mode", mActivity.isInTouchMode()); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testTouchButtonNotTakeFocus() { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertInTouchModeAfterTap(this, mFirstButton); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("should be in touch mode", mActivity.isInTouchMode()); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("button.isFocused", 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirstButton.isFocused()); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("button.hasFocus", 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirstButton.hasFocus()); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNull("activity shouldn't have focus", mActivity.getCurrentFocus()); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("linear layout should not have focus", 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivity.getLayout().hasFocus()); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("button's onClickListener should have fired", 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivity.buttonClickListenerFired()); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: reenable when more reliable 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void DISABLE_testLeaveTouchModeWithDpadEvent() { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertInTouchModeAfterClick(this, mFirstButton); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("should be in touch mode", mActivity.isInTouchMode()); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("button should not have focus when touched", 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirstButton.isFocused()); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotInTouchModeAfterKey(this, KeyEvent.KEYCODE_DPAD_RIGHT, mFirstButton); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("should be out of touch mode", mActivity.isInTouchMode()); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("first button (the top most focusable) should have gained focus", 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirstButton.isFocused()); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 91