GridWidgetTest.java revision 9c56475370d1df940252ff1360b92de50022fff6
1062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu/* 2062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Copyright (C) 2015 The Android Open Source Project 3062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * 4062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Licensed under the Apache License, Version 2.0 (the "License"); 5062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * you may not use this file except in compliance with the License. 6062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * You may obtain a copy of the License at 7062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * 8062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * http://www.apache.org/licenses/LICENSE-2.0 9062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * 10062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Unless required by applicable law or agreed to in writing, software 11062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * distributed under the License is distributed on an "AS IS" BASIS, 12062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * See the License for the specific language governing permissions and 14062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * limitations under the License. 15062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu */ 16062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gupackage android.support.v17.leanback.widget; 17062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 18247741d74797105ba4f6d2834ec56dab32c14644Dake Guimport android.support.v17.leanback.tests.R; 19062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.test.ActivityInstrumentationTestCase2; 20062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.util.Log; 21062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.view.KeyEvent; 22062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.view.View; 23062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.view.ViewGroup; 24062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.app.Instrumentation; 25062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport android.content.Intent; 26062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 27062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport java.util.ArrayList; 28062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport java.util.Arrays; 29062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport java.util.Comparator; 30062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport java.util.HashMap; 31062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Guimport java.util.Iterator; 32062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 33062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu/** 34062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * @hide from javadoc 35062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu */ 36062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gupublic class GridWidgetTest extends ActivityInstrumentationTestCase2<GridActivity> { 37062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 38062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected GridActivity mActivity; 39062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected Instrumentation mInstrumentation; 40062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected BaseGridView mGridView; 4185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu protected GridLayoutManager mLayoutManager; 42062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected int mOrientation; 43247741d74797105ba4f6d2834ec56dab32c14644Dake Gu protected int mNumRows; 44062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 45062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu private final Comparator<View> mRowSortComparator = new Comparator<View>() { 46062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu public int compare(View lhs, View rhs) { 47062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 48062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu return lhs.getLeft() - rhs.getLeft(); 49062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } else { 50062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu return lhs.getTop() - rhs.getTop(); 51062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 52062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu }; 53062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu }; 54062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 55062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu /** 56062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Verify margins between items on same row are same. 57062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu */ 58062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu private final Runnable mVerifyLayout = new Runnable() { 59062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu @Override 60062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu public void run() { 61e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu verifyMargin(); 62062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 63062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu }; 64062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 65062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu public GridWidgetTest() { 66062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu super("android.support.v17.leanback.tests", GridActivity.class); 67062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 68062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 69062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu /** 70062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Wait for grid view stop scroll and optionally verify state of grid view. 71062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu */ 72062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected void waitForScrollIdle(Runnable verify) throws Throwable { 738c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(100); 74062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu while (mGridView.getLayoutManager().isSmoothScrolling() || 75062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu mGridView.getScrollState() != BaseGridView.SCROLL_STATE_IDLE) { 76062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu try { 77062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu Thread.sleep(100); 78062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } catch (InterruptedException ex) { 79062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu break; 80062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 81062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu if (verify != null) { 82062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu runTestOnUiThread(verify); 83062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 84062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 85062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 86062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 87062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu /** 8885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu * Wait for grid view stop animation and optionally verify state of grid view. 8985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu */ 9085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu protected void waitForTransientStateGone(Runnable verify) throws Throwable { 9185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu do { 9285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu try { 9385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Thread.sleep(100); 9485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } catch (InterruptedException ex) { 9585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu break; 9685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 9785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu if (verify != null) { 9885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu runTestOnUiThread(verify); 9985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 10085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } while (mGridView.hasTransientState()); 10185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 10285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 10385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu /** 104062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu * Wait for grid view stop scroll. 105062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu */ 106062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu protected void waitForScrollIdle() throws Throwable { 107062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu waitForScrollIdle(null); 108062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 109062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 110e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu /** 111a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu * Scrolls using given key. 112a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu */ 113a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu protected void scroll(int key, Runnable verify) throws Throwable { 114a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu do { 115a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu if (verify != null) { 116a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu runTestOnUiThread(verify); 117a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 118a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu sendRepeatedKeys(10, key); 119a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu try { 1208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(300); 121a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } catch (InterruptedException ex) { 122a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu break; 123a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 124a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } while (mGridView.getLayoutManager().isSmoothScrolling() || 125a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu mGridView.getScrollState() != BaseGridView.SCROLL_STATE_IDLE); 126a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 127a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu 128a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu protected void scrollToBegin(Runnable verify) throws Throwable { 129a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu int key; 130a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 131a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 132a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_RIGHT; 133a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } else { 134a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_LEFT; 135a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 136a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } else { 137a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_UP; 138a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 139a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scroll(key, verify); 140a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 141a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu 142a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu protected void scrollToEnd(Runnable verify) throws Throwable { 143a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu int key; 144a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 145a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 146a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_LEFT; 147a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } else { 148a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_RIGHT; 149a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 150a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } else { 151a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu key = KeyEvent.KEYCODE_DPAD_DOWN; 152a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 153a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scroll(key, verify); 154a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu } 155a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu 156a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu /** 157e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu * Group and sort children by their position on each row (HORIZONTAL) or column(VERTICAL). 158e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu */ 159e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu protected View[][] sortByRows() { 160e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu final HashMap<Integer, ArrayList<View>> rows = new HashMap<Integer, ArrayList<View>>(); 161c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu ArrayList<Integer> rowLocations = new ArrayList(); 162e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int i = 0; i < mGridView.getChildCount(); i++) { 163e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View v = mGridView.getChildAt(i); 164e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu int rowLocation; 165e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 166e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu rowLocation = v.getTop(); 167e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 168e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu rowLocation = mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL ? 169e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu v.getRight() : v.getLeft(); 170e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 171e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu ArrayList<View> views = rows.get(rowLocation); 172e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (views == null) { 173e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu views = new ArrayList<View>(); 174e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu rows.put(rowLocation, views); 175c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu rowLocations.add(rowLocation); 176e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 177e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu views.add(v); 178e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 179c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu Object[] sortedLocations = rowLocations.toArray(); 180c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu Arrays.sort(sortedLocations); 181c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu if (mNumRows != rows.size()) { 182c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu assertEquals("Dump Views by rows "+rows, mNumRows, rows.size()); 183c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 184e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View[][] sorted = new View[rows.size()][]; 185c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu for (int i = 0; i < rowLocations.size(); i++) { 186c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu Integer rowLocation = rowLocations.get(i); 187c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu ArrayList<View> arr = rows.get(rowLocation); 188e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View[] views = arr.toArray(new View[arr.size()]); 189e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu Arrays.sort(views, mRowSortComparator); 190c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu sorted[i] = views; 191e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 192e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu return sorted; 193e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 194e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 195e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu protected void verifyMargin() { 196e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View[][] sorted = sortByRows(); 197e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int row = 0; row < sorted.length; row++) { 198e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View[] views = sorted[row]; 199e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu int margin = -1; 200e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int i = 1; i < views.length; i++) { 201e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 202e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (i == 1) { 203e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu margin = views[i].getLeft() - views[i - 1].getRight(); 204e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 205e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu assertEquals(margin, views[i].getLeft() - views[i - 1].getRight()); 206e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 207e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 208e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (i == 1) { 209e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu margin = views[i].getTop() - views[i - 1].getBottom(); 210e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 211e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu assertEquals(margin, views[i].getTop() - views[i - 1].getBottom()); 212e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 213e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 214e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 215e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 216e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 217e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 218e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu protected void verifyBeginAligned() { 219e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu View[][] sorted = sortByRows(); 220e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu int alignedLocation = 0; 221e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 222e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 223e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int i = 0; i < sorted.length; i++) { 224e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (i == 0) { 225e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu alignedLocation = sorted[i][sorted[i].length - 1].getRight(); 226e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 227e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu assertEquals(alignedLocation, sorted[i][sorted[i].length - 1].getRight()); 228e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 229e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 230e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 231e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int i = 0; i < sorted.length; i++) { 232e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (i == 0) { 233e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu alignedLocation = sorted[i][0].getLeft(); 234e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 235e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu assertEquals(alignedLocation, sorted[i][0].getLeft()); 236e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 237e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 238e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 239e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 240e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu for (int i = 0; i < sorted.length; i++) { 241e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu if (i == 0) { 242e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu alignedLocation = sorted[i][0].getTop(); 243e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } else { 244e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu assertEquals(alignedLocation, sorted[i][0].getTop()); 245e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 246e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 247e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 248e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 249e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 250c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu protected int[] getEndEdges() { 251c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu View[][] sorted = sortByRows(); 252c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu int[] edges = new int[sorted.length]; 253c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu if (mOrientation == BaseGridView.HORIZONTAL) { 254c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 255c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu for (int i = 0; i < sorted.length; i++) { 256c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu edges[i] = sorted[i][0].getLeft(); 257c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 258c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } else { 259c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu for (int i = 0; i < sorted.length; i++) { 260c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu edges[i] = sorted[i][sorted[i].length - 1].getRight(); 261c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 262c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 263c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } else { 264c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu for (int i = 0; i < sorted.length; i++) { 265c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu edges[i] = sorted[i][sorted[i].length - 1].getBottom(); 266c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 267c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 268c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu return edges; 269c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 270c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 271c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu protected void verifyEdgesSame(int[] edges, int[] edges2) { 272c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu assertEquals(edges.length, edges2.length); 273c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu for (int i = 0; i < edges.length; i++) { 274c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu assertEquals(edges[i], edges2[i]); 275c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 276c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 277c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 27885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu protected void verifyBoundCount(int count) { 27985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu if (mActivity.getBoundCount() != count) { 28085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu StringBuffer b = new StringBuffer(); 28185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu b.append("ItemsLength: "); 28285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu for (int i = 0; i < mActivity.mItemLengths.length; i++) { 28385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu b.append(mActivity.mItemLengths[i]).append(","); 28485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 28585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu assertEquals("Bound count does not match, ItemsLengths: "+ b, 28685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu count, mActivity.getBoundCount()); 28785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 28885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 28985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 2908c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu private static int getCenterY(View v) { 2918c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu return (v.getTop() + v.getBottom())/2; 2928c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 293062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 2948c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu private static int getCenterX(View v) { 2958c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu return (v.getLeft() + v.getRight())/2; 2968c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 2978c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 2988c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu private void initActivity(Intent intent) { 2998c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu setActivityIntent(intent); 3008c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mActivity = getActivity(); 3018c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final String testName = getName(); 3028c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu try { 3038c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 3048c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 3058c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mActivity.setTitle(testName); 3068c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 3078c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 3088c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 3098c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } catch (Throwable t) { 3108c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu t.printStackTrace(); 3118c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 3128c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView = mActivity.mGridView; 3138c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 3148c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 3158c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void testThreeRowHorizontalBasic() throws Throwable { 316062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu mInstrumentation = getInstrumentation(); 317062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 318247741d74797105ba4f6d2834ec56dab32c14644Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, R.layout.horizontal_grid); 319e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 100); 3208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 321247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mOrientation = BaseGridView.HORIZONTAL; 322247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mNumRows = 3; 323062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 324a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 32585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBoundCount(100); 326e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 327a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 328062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 329e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu verifyBeginAligned(); 330062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu } 331062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu 332e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu public void testThreeColumnVerticalBasic() throws Throwable { 333e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 334e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu mInstrumentation = getInstrumentation(); 335e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 336247741d74797105ba4f6d2834ec56dab32c14644Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, R.layout.vertical_grid); 337e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 200); 3388c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 339247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mOrientation = BaseGridView.VERTICAL; 340247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mNumRows = 3; 341e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 342a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 34385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBoundCount(200); 344e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 345a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 34685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 34785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBeginAligned(); 34885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 34985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 35085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu public void testRedundantAppendRemove() throws Throwable { 35185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mInstrumentation = getInstrumentation(); 35285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 353247741d74797105ba4f6d2834ec56dab32c14644Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 354247741d74797105ba4f6d2834ec56dab32c14644Dake Gu R.layout.vertical_grid_testredundantappendremove); 35585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu intent.putExtra(GridActivity.EXTRA_ITEMS, new int[]{ 35685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 149,177,128,234,227,187,163,223,146,210,228,148,227,193,182,197,177,142,225,207, 35785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 157,171,209,204,187,184,123,221,197,153,202,179,193,214,226,173,225,143,188,159, 35885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 139,193,233,143,227,203,222,124,228,223,164,131,228,126,211,160,165,152,235,184, 35985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 155,224,149,181,171,229,200,234,177,130,164,172,188,139,132,203,179,220,147,131, 36085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 226,127,230,239,183,203,206,227,123,170,239,234,200,149,237,204,160,133,202,234, 36185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 173,122,139,149,151,153,216,231,121,145,227,153,186,174,223,180,123,215,206,216, 36285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 239,222,219,207,193,218,140,133,171,153,183,132,233,138,159,174,189,171,143,128, 36385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 152,222,141,202,224,190,134,120,181,231,230,136,132,224,136,210,207,150,128,183, 36485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 221,194,179,220,126,221,137,205,223,193,172,132,226,209,133,191,227,127,159,171, 36585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 180,149,237,177,194,207,170,202,161,144,147,199,205,186,164,140,193,203,224,129}); 3668c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 367247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mOrientation = BaseGridView.VERTICAL; 368247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mNumRows = 3; 36985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 370a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 37185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 37285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBoundCount(200); 373e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 374a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 375e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu 376e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu verifyBeginAligned(); 377e7ead88853562603f76b92189a828ba14d5c4bcbDake Gu } 37885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 37985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu public void testRedundantAppendRemove2() throws Throwable { 38085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mInstrumentation = getInstrumentation(); 38185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 382247741d74797105ba4f6d2834ec56dab32c14644Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 383247741d74797105ba4f6d2834ec56dab32c14644Dake Gu R.layout.horizontal_grid_testredundantappendremove2); 38485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu intent.putExtra(GridActivity.EXTRA_ITEMS, new int[]{ 38585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 318,333,199,224,246,273,269,289,340,313,265,306,349,269,185,282,257,354,316,252, 38685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 237,290,283,343,196,313,290,343,191,262,342,228,343,349,251,203,226,305,265,213, 38785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 216,333,295,188,187,281,288,311,244,232,224,332,290,181,267,276,226,261,335,355, 38885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 225,217,219,183,234,285,257,304,182,250,244,223,257,219,342,185,347,205,302,315, 38985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 299,309,292,237,192,309,228,250,347,227,337,298,299,185,185,331,223,284,265,351}); 3908c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 391247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mOrientation = BaseGridView.HORIZONTAL; 392247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mNumRows = 3; 39385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mLayoutManager = (GridLayoutManager) mGridView.getLayoutManager(); 39485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 39585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu // test append without staggered result cache 396a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 39785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 39885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBoundCount(100); 399c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu int[] endEdges = getEndEdges(); 40085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 401a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 40285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 40385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBeginAligned(); 40485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 40585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu // now test append with staggered result cache 40685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu runTestOnUiThread(new Runnable() { 40785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu public void run() { 40885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mActivity.changeArraySize(3); 40985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 41085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu }); 41185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Thread.sleep(500); 41285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu assertEquals("Staggerd cache should be kept as is when no item size change", 41385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 100, ((StaggeredGrid) mLayoutManager.mGrid).mLocations.size()); 41485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 41585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mActivity.resetBoundCount(); 41685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu runTestOnUiThread(new Runnable() { 41785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu public void run() { 41885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mActivity.changeArraySize(100); 41985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 42085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu }); 42185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Thread.sleep(500); 42285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 423a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 42485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBoundCount(100); 425c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 426c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu // we should get same aligned end edges 427c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu int[] endEdges2 = getEndEdges(); 428c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu verifyEdgesSame(endEdges, endEdges2); 42985df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 43085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 431c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu public void testItemMovedHorizontal() throws Throwable { 43285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 43385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mInstrumentation = getInstrumentation(); 43485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 435247741d74797105ba4f6d2834ec56dab32c14644Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 436247741d74797105ba4f6d2834ec56dab32c14644Dake Gu R.layout.horizontal_grid); 43785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 200); 4388c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 439247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mOrientation = BaseGridView.HORIZONTAL; 440247741d74797105ba4f6d2834ec56dab32c14644Dake Gu mNumRows = 3; 44185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 44285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mGridView.setSelectedPositionSmooth(150); 44385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu waitForScrollIdle(mVerifyLayout); 44485df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu mActivity.swap(150, 152); 44585df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu waitForTransientStateGone(null); 44685df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 44785df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu runTestOnUiThread(mVerifyLayout); 44885df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 449a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 45085df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 45185df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu verifyBeginAligned(); 45285df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu } 45385df3117f0fcd0aa10d7bd45194dab97e22112f2Dake Gu 454c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu public void testItemMovedVertical() throws Throwable { 455c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 456c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu mInstrumentation = getInstrumentation(); 457c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 458c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 459c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu R.layout.vertical_grid); 460c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 200); 4618c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 462c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu mOrientation = BaseGridView.VERTICAL; 463c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu mNumRows = 3; 464c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 465c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu mGridView.setSelectedPositionSmooth(150); 466c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu waitForScrollIdle(mVerifyLayout); 467c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu mActivity.swap(150, 152); 468c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu waitForTransientStateGone(null); 469c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 470c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu runTestOnUiThread(mVerifyLayout); 471c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 4727ee22537e201c3d6b5de2908aecc4b0cc59a05c2Dake Gu scrollToEnd(mVerifyLayout); 473a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 474c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 475c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu verifyBeginAligned(); 476c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu } 477c755c85c3596bb00f30f7941bac3860a9dc91d7aDake Gu 478ede7fd3c91008fb042c736240534d0d87234f112Dake Gu public void testItemAddRemoveHorizontal() throws Throwable { 479ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 480ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mInstrumentation = getInstrumentation(); 481ede7fd3c91008fb042c736240534d0d87234f112Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 482ede7fd3c91008fb042c736240534d0d87234f112Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 483ede7fd3c91008fb042c736240534d0d87234f112Dake Gu R.layout.horizontal_grid); 484ede7fd3c91008fb042c736240534d0d87234f112Dake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 200); 4858c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 486ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mOrientation = BaseGridView.HORIZONTAL; 487ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mNumRows = 3; 488ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 489a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 490ede7fd3c91008fb042c736240534d0d87234f112Dake Gu int[] endEdges = getEndEdges(); 491ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 492ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mGridView.setSelectedPositionSmooth(150); 493ede7fd3c91008fb042c736240534d0d87234f112Dake Gu waitForScrollIdle(mVerifyLayout); 494ede7fd3c91008fb042c736240534d0d87234f112Dake Gu int[] removedItems = mActivity.removeItems(151, 4); 495ede7fd3c91008fb042c736240534d0d87234f112Dake Gu waitForTransientStateGone(null); 496ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 497a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 498ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mGridView.setSelectedPositionSmooth(150); 499ede7fd3c91008fb042c736240534d0d87234f112Dake Gu waitForScrollIdle(mVerifyLayout); 500ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 501ede7fd3c91008fb042c736240534d0d87234f112Dake Gu mActivity.addItems(151, removedItems); 502ede7fd3c91008fb042c736240534d0d87234f112Dake Gu waitForTransientStateGone(null); 503a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToEnd(mVerifyLayout); 504ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 505ede7fd3c91008fb042c736240534d0d87234f112Dake Gu // we should get same aligned end edges 506ede7fd3c91008fb042c736240534d0d87234f112Dake Gu int[] endEdges2 = getEndEdges(); 507ede7fd3c91008fb042c736240534d0d87234f112Dake Gu verifyEdgesSame(endEdges, endEdges2); 508ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 509a3c24a53034f1effc24b2d01328d63d96ad2ac7cDake Gu scrollToBegin(mVerifyLayout); 510ede7fd3c91008fb042c736240534d0d87234f112Dake Gu verifyBeginAligned(); 511ede7fd3c91008fb042c736240534d0d87234f112Dake Gu } 512ede7fd3c91008fb042c736240534d0d87234f112Dake Gu 5139c56475370d1df940252ff1360b92de50022fff6Dake Gu public void testFocusToFirstItem() throws Throwable { 5149c56475370d1df940252ff1360b92de50022fff6Dake Gu 5159c56475370d1df940252ff1360b92de50022fff6Dake Gu mInstrumentation = getInstrumentation(); 5169c56475370d1df940252ff1360b92de50022fff6Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 5179c56475370d1df940252ff1360b92de50022fff6Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 5189c56475370d1df940252ff1360b92de50022fff6Dake Gu R.layout.horizontal_grid); 5199c56475370d1df940252ff1360b92de50022fff6Dake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 200); 5209c56475370d1df940252ff1360b92de50022fff6Dake Gu initActivity(intent); 5219c56475370d1df940252ff1360b92de50022fff6Dake Gu mOrientation = BaseGridView.HORIZONTAL; 5229c56475370d1df940252ff1360b92de50022fff6Dake Gu mNumRows = 3; 5239c56475370d1df940252ff1360b92de50022fff6Dake Gu 5249c56475370d1df940252ff1360b92de50022fff6Dake Gu int[] removedItems = mActivity.removeItems(0, 200); 5259c56475370d1df940252ff1360b92de50022fff6Dake Gu 5269c56475370d1df940252ff1360b92de50022fff6Dake Gu waitForTransientStateGone(null); 5279c56475370d1df940252ff1360b92de50022fff6Dake Gu Thread.sleep(500); 5289c56475370d1df940252ff1360b92de50022fff6Dake Gu mActivity.addItems(0, removedItems); 5299c56475370d1df940252ff1360b92de50022fff6Dake Gu 5309c56475370d1df940252ff1360b92de50022fff6Dake Gu waitForTransientStateGone(null); 5319c56475370d1df940252ff1360b92de50022fff6Dake Gu Thread.sleep(500); 5329c56475370d1df940252ff1360b92de50022fff6Dake Gu assertTrue(mGridView.getLayoutManager().findViewByPosition(0).hasFocus()); 5339c56475370d1df940252ff1360b92de50022fff6Dake Gu 5349c56475370d1df940252ff1360b92de50022fff6Dake Gu runTestOnUiThread(new Runnable() { 5359c56475370d1df940252ff1360b92de50022fff6Dake Gu public void run() { 5369c56475370d1df940252ff1360b92de50022fff6Dake Gu mActivity.changeArraySize(0); 5379c56475370d1df940252ff1360b92de50022fff6Dake Gu } 5389c56475370d1df940252ff1360b92de50022fff6Dake Gu }); 5399c56475370d1df940252ff1360b92de50022fff6Dake Gu Thread.sleep(500); 5409c56475370d1df940252ff1360b92de50022fff6Dake Gu 5419c56475370d1df940252ff1360b92de50022fff6Dake Gu runTestOnUiThread(new Runnable() { 5429c56475370d1df940252ff1360b92de50022fff6Dake Gu public void run() { 5439c56475370d1df940252ff1360b92de50022fff6Dake Gu mActivity.changeArraySize(200); 5449c56475370d1df940252ff1360b92de50022fff6Dake Gu } 5459c56475370d1df940252ff1360b92de50022fff6Dake Gu }); 5469c56475370d1df940252ff1360b92de50022fff6Dake Gu Thread.sleep(500); 5479c56475370d1df940252ff1360b92de50022fff6Dake Gu assertTrue(mGridView.getLayoutManager().findViewByPosition(0).hasFocus()); 5489c56475370d1df940252ff1360b92de50022fff6Dake Gu } 5499c56475370d1df940252ff1360b92de50022fff6Dake Gu 55077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu public void testNonFocusableHorizontal() throws Throwable { 55177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int numItems = 200; 55277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int startPos = 45; 55377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int skips = 20; 55477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int numColumns = 3; 55577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int endPos = startPos + numColumns * (skips + 1); 55677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 55777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mInstrumentation = getInstrumentation(); 55877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 55977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 56077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu R.layout.horizontal_grid); 56177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, numItems); 56277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, false); 56377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mOrientation = BaseGridView.HORIZONTAL; 56477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mNumRows = numColumns; 56577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu boolean[] focusable = new boolean[numItems]; 56677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu for (int i = 0; i < focusable.length; i++) { 56777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu focusable[i] = true; 56877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 56977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu for (int i = startPos + mNumRows, j = 0; j < skips; i += mNumRows, j++) { 57077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu focusable[i] = false; 57177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 57277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_ITEMS_FOCUSABLE, focusable); 5738c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 57477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 57577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mGridView.setSelectedPositionSmooth(startPos); 57677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 57777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 57877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 57977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_LEFT); 58077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } else { 58177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT); 58277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 58377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 58477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu assertEquals(endPos, mGridView.getSelectedPosition()); 58577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 58677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu if (mGridView.getLayoutDirection() == ViewGroup.LAYOUT_DIRECTION_RTL) { 58777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT); 58877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } else { 58977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_LEFT); 59077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 59177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 59277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu assertEquals(startPos, mGridView.getSelectedPosition()); 59377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 59477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 59577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 59677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 59777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu public void testNonFocusableVertical() throws Throwable { 59877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int numItems = 200; 59977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int startPos = 44; 60077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int skips = 20; 60177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int numColumns = 3; 60277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu final int endPos = startPos + numColumns * (skips + 1); 60377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 60477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mInstrumentation = getInstrumentation(); 60577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 60677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 60777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu R.layout.vertical_grid); 60877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, numItems); 60977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, false); 61077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mOrientation = BaseGridView.VERTICAL; 61177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mNumRows = numColumns; 61277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu boolean[] focusable = new boolean[numItems]; 61377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu for (int i = 0; i < focusable.length; i++) { 61477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu focusable[i] = true; 61577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 61677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu for (int i = startPos + mNumRows, j = 0; j < skips; i += mNumRows, j++) { 61777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu focusable[i] = false; 61877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 61977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu intent.putExtra(GridActivity.EXTRA_ITEMS_FOCUSABLE, focusable); 6208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 62177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 62277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu mGridView.setSelectedPositionSmooth(startPos); 62377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 62477b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 62577b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 62677b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 62777b17ebed6d1f8488b150b25e2b6754971480caeDake Gu assertEquals(endPos, mGridView.getSelectedPosition()); 62877b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 62977b17ebed6d1f8488b150b25e2b6754971480caeDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_UP); 63077b17ebed6d1f8488b150b25e2b6754971480caeDake Gu waitForScrollIdle(mVerifyLayout); 63177b17ebed6d1f8488b150b25e2b6754971480caeDake Gu assertEquals(startPos, mGridView.getSelectedPosition()); 63277b17ebed6d1f8488b150b25e2b6754971480caeDake Gu 63377b17ebed6d1f8488b150b25e2b6754971480caeDake Gu } 6346b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6356b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void testTransferFocusable() throws Throwable { 6366b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int numItems = 200; 6376b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int numColumns = 3; 6386b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int startPos = 1; 6396b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6406b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mInstrumentation = getInstrumentation(); 6416b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 6426b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 6436b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu R.layout.horizontal_grid); 6446b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, numItems); 6456b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, false); 6466b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mOrientation = BaseGridView.HORIZONTAL; 6476b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mNumRows = numColumns; 6486b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu boolean[] focusable = new boolean[numItems]; 6496b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu for (int i = 0; i < focusable.length; i++) { 6506b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu focusable[i] = true; 6516b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6526b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu for (int i = 0; i < startPos; i++) { 6536b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu focusable[i] = false; 6546b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6556b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_ITEMS_FOCUSABLE, focusable); 6568c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 6576b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6586b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu runTestOnUiThread(new Runnable() { 6596b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void run() { 6606b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mActivity.changeArraySize(0); 6616b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6626b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu }); 6636b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Thread.sleep(500); 6646b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu assertTrue(mGridView.isFocused()); 6656b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6666b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu runTestOnUiThread(new Runnable() { 6676b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void run() { 6686b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mActivity.changeArraySize(numItems); 6696b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6706b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu }); 6716b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Thread.sleep(500); 6726b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu assertTrue(mGridView.getLayoutManager().findViewByPosition(startPos).hasFocus()); 6736b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6746b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6756b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void testTransferFocusable2() throws Throwable { 6766b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int numItems = 200; 6776b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int numColumns = 3; 6786b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu final int startPos = 10; 6796b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6806b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mInstrumentation = getInstrumentation(); 6816b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 6826b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 6836b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu R.layout.horizontal_grid); 6846b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, numItems); 6856b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, true); 6866b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mOrientation = BaseGridView.HORIZONTAL; 6876b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mNumRows = numColumns; 6886b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu boolean[] focusable = new boolean[numItems]; 6896b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu for (int i = 0; i < focusable.length; i++) { 6906b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu focusable[i] = true; 6916b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6926b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu for (int i = 0; i < startPos; i++) { 6936b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu focusable[i] = false; 6946b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 6956b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu intent.putExtra(GridActivity.EXTRA_ITEMS_FOCUSABLE, focusable); 6968c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 6976b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 6986b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu runTestOnUiThread(new Runnable() { 6996b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void run() { 7006b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mActivity.changeArraySize(0); 7016b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 7026b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu }); 7036b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Thread.sleep(500); 7046b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu assertTrue(mGridView.isFocused()); 7056b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu 7066b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu runTestOnUiThread(new Runnable() { 7076b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu public void run() { 7086b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu mActivity.changeArraySize(numItems); 7096b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 7106b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu }); 7116b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu Thread.sleep(500); 7126b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu assertTrue(mGridView.getLayoutManager().findViewByPosition(startPos).hasFocus()); 7136b22c4c875d7a540e705b2b6b65bf52c7a89299aDake Gu } 714fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 7158c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void testNonFocusableLoseInFastLayout() throws Throwable { 716fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu mInstrumentation = getInstrumentation(); 717fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 718fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 719fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu R.layout.vertical_linear); 720fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu int[] items = new int[300]; 721fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu for (int i = 0; i < items.length; i++) { 722fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu items[i] = 480; 723fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu } 724fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu intent.putExtra(GridActivity.EXTRA_ITEMS, items); 725fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, false); 726fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu intent.putExtra(GridActivity.EXTRA_REQUEST_LAYOUT_ONFOCUS, true); 727fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu mOrientation = BaseGridView.VERTICAL; 728fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu mNumRows = 1; 729fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu int pressDown = 15; 730fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 7318c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 732fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 733fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu mGridView.setSelectedPositionSmooth(0); 734fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu Thread.sleep(100); 735fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 736fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu for (int i = 0; i < pressDown; i++) { 737fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 738fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu } 739fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu waitForScrollIdle(mVerifyLayout); 740fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu assertFalse(mGridView.isFocused()); 741fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 742fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu } 743fa5f60106a84a2b475c38cc6b8baa347bbd6ae1dDake Gu 7448c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void testSetSelectionWithDelta() throws Throwable { 7458c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mInstrumentation = getInstrumentation(); 7468c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 7478c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 7488c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu R.layout.vertical_linear); 7498c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 300); 7508c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, false); 7518c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mOrientation = BaseGridView.VERTICAL; 7528c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mNumRows = 1; 7538c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7548c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 7558c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7568c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 7578c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 7588c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(3); 7598c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 7608c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 7618c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 7628c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top1 = mGridView.getLayoutManager().findViewByPosition(3).getTop(); 7638c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7648c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 7658c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7668c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to position with delta 7678c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 7688c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 7698c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(3, 100); 7708c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 7718c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 7728c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 7738c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top2 = mGridView.getLayoutManager().findViewByPosition(3).getTop(); 7748c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top2); 7758c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7768c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to same position without delta, it will be reset 7778c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 7788c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 7798c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(3, 0); 7808c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 7818c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 7828c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 7838c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top3 = mGridView.getLayoutManager().findViewByPosition(3).getTop(); 7848c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top3); 7858c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7868c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item after last visible item 7878c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int lastVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 7888c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getLastVisibleIndex(); 7898c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 7908c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 7918c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(lastVisiblePos + 1, 100); 7928c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 7938c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 7948c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 7958c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top4 = mGridView.getLayoutManager().findViewByPosition(lastVisiblePos + 1).getTop(); 7968c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top4); 7978c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 7988c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item before first visible item 7998c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int firstVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 8008c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getFirstVisibleIndex(); 8018c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8028c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8038c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(firstVisiblePos - 1, 100); 8048c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8058c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8068c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 8078c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top5 = mGridView.getLayoutManager().findViewByPosition(firstVisiblePos - 1).getTop(); 8088c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top5); 8098c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8108c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 8118c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8128c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8138c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(50, 100); 8148c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8158c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8168c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 8178c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top6 = mGridView.getLayoutManager().findViewByPosition(50).getTop(); 8188c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top6); 8198c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 8218c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8228c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8238c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(100); 8248c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8258c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8268c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 8278c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top7 = mGridView.getLayoutManager().findViewByPosition(100).getTop(); 8288c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top7); 8298c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8308c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 8318c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8328c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8338c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(10, 50); 8348c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8358c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8368c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(1000); 8378c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top8 = mGridView.getLayoutManager().findViewByPosition(10).getTop(); 8388c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 50, top8); 8398c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8408c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8418c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void testSetSelectionWithDeltaInGrid() throws Throwable { 8428c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mInstrumentation = getInstrumentation(); 8438c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 8448c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 8458c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu R.layout.vertical_grid); 8468c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 500); 8478c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, true); 8488c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mOrientation = BaseGridView.VERTICAL; 8498c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mNumRows = 3; 8508c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8518c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 8528c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8538c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8548c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8558c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(10); 8568c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8578c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8588c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 8598c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top1 = getCenterY(mGridView.getLayoutManager().findViewByPosition(10)); 8608c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8618c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 8628c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8638c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to position with delta 8648c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8658c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8668c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(20, 100); 8678c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8688c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8698c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 8708c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top2 = getCenterY(mGridView.getLayoutManager().findViewByPosition(20)); 8718c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top2); 8728c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8738c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to same position without delta, it will be reset 8748c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8758c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8768c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(20, 0); 8778c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8788c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8798c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 8808c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top3 = getCenterY(mGridView.getLayoutManager().findViewByPosition(20)); 8818c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top3); 8828c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8838c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item after last visible item 8848c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int lastVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 8858c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getLastVisibleIndex(); 8868c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 8878c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 8888c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(lastVisiblePos + 1, 100); 8898c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 8908c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 8918c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 8928c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top4 = getCenterY(mGridView.getLayoutManager().findViewByPosition(lastVisiblePos + 1)); 8938c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu verifyMargin(); 8948c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top4); 8958c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 8968c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item before first visible item 8978c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int firstVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 8988c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getFirstVisibleIndex(); 8998c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9008c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9018c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(firstVisiblePos - 1, 100); 9028c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9038c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9048c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 9058c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top5 = getCenterY(mGridView.getLayoutManager().findViewByPosition(firstVisiblePos - 1)); 9068c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top5); 9078c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9088c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 9098c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9108c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9118c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(100, 100); 9128c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9138c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9148c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 9158c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top6 = getCenterY(mGridView.getLayoutManager().findViewByPosition(100)); 9168c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top6); 9178c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9188c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 9198c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9218c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(200); 9228c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9238c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9248c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 9258c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 9268c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top7 = getCenterY(mGridView.getLayoutManager().findViewByPosition(200)); 9278c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top7); 9288c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9298c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 9308c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9318c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9328c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(10, 50); 9338c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9348c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9358c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 9368c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top8 = getCenterY(mGridView.getLayoutManager().findViewByPosition(10)); 9378c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 50, top8); 9388c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9398c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9408c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9418c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void testSetSelectionWithDeltaInGrid1() throws Throwable { 9428c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mInstrumentation = getInstrumentation(); 9438c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class); 9448c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, 9458c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu R.layout.vertical_grid); 9468c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_ITEMS, new int[]{ 9478c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 193,176,153,141,203,184,232,139,177,206,222,136,132,237,172,137, 9488c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 188,172,163,213,158,219,209,147,133,229,170,197,138,215,188,205, 9498c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 223,192,225,170,195,127,229,229,210,195,134,142,160,139,130,222, 9508c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 150,163,180,176,157,137,234,169,159,167,182,150,224,231,202,236, 9518c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 123,140,181,223,120,185,183,221,123,210,134,158,166,208,149,128, 9528c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 192,214,212,198,133,140,158,133,229,173,226,141,180,128,127,218, 9538c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 192,235,183,213,216,150,143,193,125,141,219,210,195,195,192,191, 9548c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 212,236,157,189,160,220,147,158,220,199,233,231,201,180,168,141, 9558c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 156,204,191,183,190,153,123,210,238,151,139,221,223,200,175,191, 9568c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 132,184,197,204,236,157,230,151,195,219,212,143,172,149,219,184, 9578c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 164,211,132,187,172,142,174,146,127,147,206,238,188,129,199,226, 9588c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 132,220,210,159,235,153,208,182,196,123,180,159,131,135,175,226, 9598c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 127,134,237,211,133,225,132,124,160,226,224,200,173,137,217,169, 9608c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 182,183,176,185,122,168,195,159,172,129,126,129,166,136,149,220, 9618c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 178,191,192,238,180,208,234,154,222,206,239,228,129,140,203,125, 9628c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 214,175,125,169,196,132,234,138,192,142,234,190,215,232,239,122, 9638c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 188,158,128,221,159,237,207,157,232,138,132,214,122,199,121,191, 9648c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 199,209,126,164,175,187,173,186,194,224,191,196,146,208,213,210, 9658c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 164,176,202,213,123,157,179,138,217,129,186,166,237,211,157,130, 9668c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 137,132,171,232,216,239,180,151,137,132,190,133,218,155,171,227, 9678c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 193,147,197,164,120,218,193,154,170,196,138,222,161,235,143,154, 9688c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 192,178,228,195,178,133,203,178,173,206,178,212,136,157,169,124, 9698c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 172,121,128,223,238,125,217,187,184,156,169,215,231,124,210,174, 9708c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 146,226,185,134,223,228,183,182,136,133,199,146,180,233,226,225, 9718c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 174,233,145,235,216,170,192,171,132,132,134,223,233,148,154,162, 9728c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 192,179,197,203,139,197,174,187,135,132,180,136,192,195,124,221, 9738c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 120,189,233,233,146,225,234,163,215,143,132,198,156,205,151,190, 9748c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 204,239,221,229,123,138,134,217,219,136,218,215,167,139,195,125, 9758c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 202,225,178,226,145,208,130,194,228,197,157,215,124,147,174,123, 9768c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 237,140,172,181,161,151,229,216,199,199,179,213,146,122,222,162, 9778c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 139,173,165,150,160,217,207,137,165,175,129,158,134,133,178,199, 9788c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 215,213,122,197 9798c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9808c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu intent.putExtra(GridActivity.EXTRA_STAGGERED, true); 9818c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mOrientation = BaseGridView.VERTICAL; 9828c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mNumRows = 3; 9838c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9848c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu initActivity(intent); 9858c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9868c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9878c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9888c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(10); 9898c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 9908c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 9918c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 9928c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top1 = getCenterY(mGridView.getLayoutManager().findViewByPosition(10)); 9938c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9948c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 9958c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 9968c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to position with delta 9978c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 9988c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 9998c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(20, 100); 10008c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10018c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10028c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10038c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top2 = getCenterY(mGridView.getLayoutManager().findViewByPosition(20)); 10048c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top2); 10058c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10068c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to same position without delta, it will be reset 10078c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10088c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10098c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(20, 0); 10108c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10118c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10128c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10138c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top3 = getCenterY(mGridView.getLayoutManager().findViewByPosition(20)); 10148c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top3); 10158c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10168c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item after last visible item 10178c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int lastVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 10188c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getLastVisibleIndex(); 10198c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10208c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10218c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(lastVisiblePos + 1, 100); 10228c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10238c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10248c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10258c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top4 = getCenterY(mGridView.getLayoutManager().findViewByPosition(lastVisiblePos + 1)); 10268c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu verifyMargin(); 10278c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top4); 10288c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10298c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll invisible item before first visible item 10308c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu final int firstVisiblePos = ((GridLayoutManager)mGridView.getLayoutManager()) 10318c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu .mGrid.getFirstVisibleIndex(); 10328c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10338c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10348c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(firstVisiblePos - 1, 100); 10358c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10368c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10378c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10388c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top5 = getCenterY(mGridView.getLayoutManager().findViewByPosition(firstVisiblePos - 1)); 10398c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top5); 10408c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10418c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 10428c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10438c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10448c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(100, 100); 10458c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10468c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10478c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10488c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top6 = getCenterY(mGridView.getLayoutManager().findViewByPosition(100)); 10498c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 100, top6); 10508c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10518c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 10528c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10538c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10548c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPositionSmooth(200); 10558c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10568c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10578c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu waitForScrollIdle(mVerifyLayout); 10588c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10598c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top7 = getCenterY(mGridView.getLayoutManager().findViewByPosition(200)); 10608c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1, top7); 10618c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu 10628c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu // scroll to invisible item that is far away. 10638c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu runTestOnUiThread(new Runnable() { 10648c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu public void run() { 10658c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu mGridView.setSelectedPosition(10, 50); 10668c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 10678c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu }); 10688c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu Thread.sleep(500); 10698c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu int top8 = getCenterY(mGridView.getLayoutManager().findViewByPosition(10)); 10708c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu assertEquals(top1 - 50, top8); 10718c5d3b45f6afa838e64e4cf011a385c191d557c6Dake Gu } 1072062f7f7667bce6e9bf4814d0bb5344fe518ed89eDake Gu} 1073