ListWithEditTextHeaderTest.java revision 158d6b70ac2f0c8fd7dafe0f865112090fb31699
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 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.listview.focus;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
193c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunneimport android.test.ActivityInstrumentationTestCase2;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.FlakyTest;
213c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunneimport android.test.TouchUtils;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent;
25158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewskiimport android.view.View;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AbsListView;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ListView;
281d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenimport android.widget.listview.ListWithEditTextHeader;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
303c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunnepublic class ListWithEditTextHeaderTest extends ActivityInstrumentationTestCase2<ListWithEditTextHeader> {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ListView mListView;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ListWithEditTextHeaderTest() {
343c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        super(ListWithEditTextHeader.class);
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mListView = getActivity().getListView();
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @MediumTest
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testPreconditions() {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("listview.getItemsCanFocus()", mListView.getItemsCanFocus());
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertFalse("out of touch-mode", mListView.isInTouchMode());
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals("header view count", 1, mListView.getHeaderViewsCount());
483c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        assertTrue("header does not have focus", mListView.getChildAt(0).isFocused());
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @FlakyTest(tolerance=2)
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testClickingHeaderKeepsFocus() {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TouchUtils.clickView(this, mListView.getChildAt(0));
553c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        assertTrue("header does not have focus", mListView.getChildAt(0).isFocused());
563c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        assertEquals("something is selected", AbsListView.INVALID_POSITION, mListView.getSelectedItemPosition());
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testClickingHeaderWhenOtherItemHasFocusGivesHeaderFocus() {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals("selected position", 1, mListView.getSelectedItemPosition());
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TouchUtils.clickView(this, mListView.getChildAt(0));
643c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        assertTrue("header does not have focus", mListView.getChildAt(0).isFocused());
653c5d27ab1b34548baae6b395ca33ce869aad254dGilles Debunne        assertEquals("something is selected", AbsListView.INVALID_POSITION, mListView.getSelectedItemPosition());
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
67158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski
68158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski    @LargeTest
69158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski    public void testScrollingDoesNotDetachHeaderViewFromWindow() {
70158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        View header = mListView.getChildAt(0);
71158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        assertNotNull("header is not attached to a window (?!)", header.getWindowToken());
72158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski
73158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        // Scroll header off the screen and back onto the screen
74158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        int numItemsOnScreen = mListView.getChildCount();
75158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        for (int i = 0; i < numItemsOnScreen; i++) {
76158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski            sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
77158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        }
78158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        for (int i = 0; i < numItemsOnScreen; i++) {
79158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski            sendKeys(KeyEvent.KEYCODE_DPAD_UP);
80158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        }
81158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski
82158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        // Make sure the header was not accidentally left detached from its window
83158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski        assertNotNull("header has lost its window", header.getWindowToken());
84158d6b70ac2f0c8fd7dafe0f865112090fb31699Mattias Niklewski    }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
86