1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.util; 18 19import android.app.Instrumentation; 20import android.view.KeyEvent; 21import android.widget.ListView; 22 23 24/** 25 * Various useful stuff for instrumentation testing listview. 26 */ 27public class ListUtil { 28 29 30 private final ListView mListView; 31 private final Instrumentation mInstrumentation; 32 33 /** 34 * @param listView The listview to act on 35 * @param instrumentation The instrumentation to use. 36 */ 37 public ListUtil(ListView listView, Instrumentation instrumentation) { 38 mListView = listView; 39 mInstrumentation = instrumentation; 40 } 41 42 /** 43 * Set the selected position of the list view. 44 * @param pos The desired position. 45 */ 46 public final void setSelectedPosition(final int pos) { 47 mListView.post(new Runnable() { 48 public void run() { 49 mListView.setSelection(pos); 50 } 51 }); 52 mInstrumentation.waitForIdleSync(); 53 } 54 55 /** 56 * Get the top of the list. 57 */ 58 public final int getListTop() { 59 return mListView.getListPaddingTop(); 60 } 61 62 /** 63 * Get the bottom of the list. 64 */ 65 public final int getListBottom() { 66 return mListView.getHeight() - mListView.getListPaddingBottom(); 67 } 68 69 /** 70 * Arrow (up or down as appropriate) to the desired position in the list. 71 * @param desiredPos The desired position 72 * @throws IllegalStateException if the position can't be reached within 20 presses. 73 */ 74 public final void arrowScrollToSelectedPosition(int desiredPos) { 75 if (desiredPos > mListView.getSelectedItemPosition()) { 76 arrowDownToSelectedPosition(desiredPos); 77 } else { 78 arrowUpToSelectedPosition(desiredPos); 79 } 80 } 81 82 private void arrowDownToSelectedPosition(int position) { 83 int maxDowns = 20; 84 while(mListView.getSelectedItemPosition() < position && --maxDowns > 0) { 85 mInstrumentation.sendCharacterSync(KeyEvent.KEYCODE_DPAD_DOWN); 86 } 87 if (position != mListView.getSelectedItemPosition()) { 88 throw new IllegalStateException("couldn't get to item after 20 downs"); 89 } 90 91 } 92 93 private void arrowUpToSelectedPosition(int position) { 94 int maxUps = 20; 95 while(mListView.getSelectedItemPosition() > position && --maxUps > 0) { 96 mInstrumentation.sendCharacterSync(KeyEvent.KEYCODE_DPAD_UP); 97 } 98 if (position != mListView.getSelectedItemPosition()) { 99 throw new IllegalStateException("couldn't get to item after 20 ups"); 100 } 101 } 102 103} 104