19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenpackage android.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Activity; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Rect; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Window; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AdapterView; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.BaseAdapter; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.EditText; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.LinearLayout; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ListView; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.google.android.collect.Maps; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashSet; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Set; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Utility base class for creating various List scenarios. Configurable by the number 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of items, how tall each item should be (in relation to the screen height), and 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * what item should start with selection. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ListScenario extends Activity { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ListView mListView; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mHeaderTextView; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNumItems; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean mItemsFocusable; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mStartingSelectionPosition; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private double mItemScreenSizeFactor; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<Integer, Double> mOverrideItemScreenSizeFactors = Maps.newHashMap(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mScreenHeight; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // whether to include a text view above the list 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIncludeHeader; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // separators 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Set<Integer> mUnselectableItems = new HashSet<Integer>(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStackFromBottom; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mClickedPosition = -1; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mLongClickedPosition = -1; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mConvertMisses = 0; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mHeaderViewCount; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mHeadersFocusable; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFooterViewCount; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private LinearLayout mLinearLayout; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListView getListView() { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mListView; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected int getScreenHeight() { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mScreenHeight; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether the item at position is selectable (i.e is a separator). 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (external users can access this info using the adapter) 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean isItemAtPositionSelectable(int position) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return !mUnselectableItems.contains(position); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Better way to pass in optional params than a honkin' paramater list :) 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Params { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNumItems = 4; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mItemsFocusable = false; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mStartingSelectionPosition = 0; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private double mItemScreenSizeFactor = 1 / 5; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Double mFadingEdgeScreenSizeFactor = null; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<Integer, Double> mOverrideItemScreenSizeFactors = Maps.newHashMap(); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // separators 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<Integer> mUnselectableItems = new ArrayList<Integer>(8); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // whether to include a text view above the list 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIncludeHeader = false; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStackFromBottom = false; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean mMustFillScreen = true; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mHeaderViewCount; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mHeaderFocusable = false; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFooterViewCount; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mConnectAdapter = true; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the number of items in the list. 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setNumItems(int numItems) { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNumItems = numItems; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set whether the items are focusable. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setItemsFocusable(boolean itemsFocusable) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemsFocusable = itemsFocusable; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the position that starts selected. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param startingSelectionPosition The selected position within the adapter's data set. 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass -1 if you do not want to force a selection. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setStartingSelectionPosition(int startingSelectionPosition) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartingSelectionPosition = startingSelectionPosition; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the factor that determines how tall each item is in relation to the 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * screen height. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setItemScreenSizeFactor(double itemScreenSizeFactor) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemScreenSizeFactor = itemScreenSizeFactor; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override the item screen size factor for a particular item. Useful for 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating lists with non-uniform item height. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position in the list. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param itemScreenSizeFactor The screen size factor to use for the height. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setPositionScreenSizeFactorOverride( 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int position, double itemScreenSizeFactor) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOverrideItemScreenSizeFactors.put(position, itemScreenSizeFactor); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set a position as unselectable (a.k.a a separator) 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setPositionUnselectable(int position) { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUnselectableItems.add(position); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set positions as unselectable (a.k.a a separator) 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setPositionsUnselectable(int ...positions) { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pos : positions) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setPositionUnselectable(pos); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include a header text view above the list. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param includeHeader 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params includeHeaderAboveList(boolean includeHeader) { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIncludeHeader = includeHeader; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the stacking direction 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param stackFromBottom 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setStackFromBottom(boolean stackFromBottom) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStackFromBottom = stackFromBottom; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether the sum of the height of the list items must be at least the 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * height of the list view. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setMustFillScreen(boolean fillScreen) { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMustFillScreen = fillScreen; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the factor for the fading edge length. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setFadingEdgeScreenSizeFactor(double fadingEdgeScreenSizeFactor) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFadingEdgeScreenSizeFactor = fadingEdgeScreenSizeFactor; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the number of header views to appear within the list 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setHeaderViewCount(int headerViewCount) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderViewCount = headerViewCount; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set whether the headers should be focusable. 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param headerFocusable Whether the headers should be focusable (i.e 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created as edit texts rather than text views). 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setHeaderFocusable(boolean headerFocusable) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderFocusable = headerFocusable; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the number of footer views to appear within the list 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setFooterViewCount(int footerViewCount) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFooterViewCount = footerViewCount; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether the {@link ListScenario} will automatically set the 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adapter on the list view. If this is false, the client MUST set it 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * manually (this is useful when adding headers to the list view, which 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be done before the adapter is set). 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params setConnectAdapter(boolean connectAdapter) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mConnectAdapter = connectAdapter; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * How each scenario customizes its behavior. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected abstract void init(Params params); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you want to know when something has been selected (perhaps 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more importantly, that {@link android.widget.AdapterView.OnItemSelectedListener} has 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been triggered). 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void positionSelected(int positon) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you want to know that nothing is selected. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void nothingSelected() { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you want to know when something has been clicked (perhaps 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more importantly, that {@link android.widget.AdapterView.OnItemClickListener} has 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been triggered). 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void positionClicked(int position) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setClickedPosition(position); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you want to know when something has been long clicked (perhaps 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more importantly, that {@link android.widget.AdapterView.OnItemLongClickListener} has 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been triggered). 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void positionLongClicked(int position) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLongClickedPosition(position); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onCreate(Bundle icicle) { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onCreate(icicle); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for test stability, turn off title bar 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScreenHeight = getWindowManager().getDefaultDisplay().getHeight(); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Params params = createParams(); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(params); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readAndValidateParams(params); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView = createListView(); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setLayoutParams(new ViewGroup.LayoutParams( 318980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 319980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT)); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setDrawSelectorOnTop(false); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<mHeaderViewCount; i++) { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextView header = mHeadersFocusable ? 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new EditText(this) : 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new TextView(this); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project header.setText("Header: " + i); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.addHeaderView(header); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<mFooterViewCount; i++) { 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextView header = new TextView(this); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project header.setText("Footer: " + i); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.addFooterView(header); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (params.mConnectAdapter) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setAdapter(mListView); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setItemsCanFocus(mItemsFocusable); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mStartingSelectionPosition >= 0) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setSelection(mStartingSelectionPosition); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setPadding(0, 0, 0, 0); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setStackFromBottom(mStackFromBottom); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setDivider(null); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onItemSelected(AdapterView parent, View v, int position, long id) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project positionSelected(position); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onNothingSelected(AdapterView parent) { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nothingSelected(); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onItemClick(AdapterView parent, View v, int position, long id) { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project positionClicked(position); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set the fading edge length porportionally to the screen 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // height for test stability 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (params.mFadingEdgeScreenSizeFactor != null) { 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setFadingEdgeLength((int) (params.mFadingEdgeScreenSizeFactor * mScreenHeight)); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setFadingEdgeLength((int) ((64.0 / 480) * mScreenHeight)); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIncludeHeader) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout = new LinearLayout(this); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderTextView = new TextView(this); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderTextView.setText("hi"); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderTextView.setLayoutParams(new LinearLayout.LayoutParams( 378980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewGroup.LayoutParams.WRAP_CONTENT)); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.addView(mHeaderTextView); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.setOrientation(LinearLayout.VERTICAL); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.setLayoutParams(new ViewGroup.LayoutParams( 384980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 385980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT)); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setLayoutParams((new LinearLayout.LayoutParams( 387980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1f))); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.addView(mListView); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setContentView(mLinearLayout); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout = new LinearLayout(this); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.setOrientation(LinearLayout.VERTICAL); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.setLayoutParams(new ViewGroup.LayoutParams( 397980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 398980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT)); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setLayoutParams((new LinearLayout.LayoutParams( 400980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1f))); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.addView(mListView); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setContentView(mLinearLayout); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the LinearLayout containing the ListView in this scenario. 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The LinearLayout in which the ListView is held. 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected LinearLayout getListViewContainer() { 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLinearLayout; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Attaches a long press listener. You can find out which views were clicked by calling 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getLongClickedPosition()}. 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enableLongPress() { 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onItemLongClick(AdapterView parent, View v, int position, long id) { 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project positionLongClicked(position); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The newly created ListView widget. 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ListView createListView() { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ListView(this); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The newly created Params object. 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Params createParams() { 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Params(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets an adapter on a ListView. 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param listView The ListView to set the adapter on. 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setAdapter(ListView listView) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project listView.setAdapter(new MyAdapter()); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Read in and validate all of the params passed in by the scenario. 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void readAndValidateParams(Params params) { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (params.mMustFillScreen ) { 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double totalFactor = 0.0; 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < params.mNumItems; i++) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (params.mOverrideItemScreenSizeFactors.containsKey(i)) { 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project totalFactor += params.mOverrideItemScreenSizeFactors.get(i); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project totalFactor += params.mItemScreenSizeFactor; 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalFactor < 1.0) { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("list items must combine to be at least " + 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "the height of the screen. this is not the case with " + params.mNumItems 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " items and " + params.mItemScreenSizeFactor + " screen factor and " + 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "screen height of " + mScreenHeight); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNumItems = params.mNumItems; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemsFocusable = params.mItemsFocusable; 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartingSelectionPosition = params.mStartingSelectionPosition; 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemScreenSizeFactor = params.mItemScreenSizeFactor; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOverrideItemScreenSizeFactors.putAll(params.mOverrideItemScreenSizeFactors); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUnselectableItems.addAll(params.mUnselectableItems); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIncludeHeader = params.mIncludeHeader; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStackFromBottom = params.mStackFromBottom; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderViewCount = params.mHeaderViewCount; 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeadersFocusable = params.mHeaderFocusable; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFooterViewCount = params.mFooterViewCount; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final String getValueAtPosition(int position) { 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return isItemAtPositionSelectable(position) 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ? 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "position " + position: 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "------- " + position; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The height that will be set for a particular position. 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getHeightForPosition(int position) { 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int desiredHeight = (int) (mScreenHeight * mItemScreenSizeFactor); 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOverrideItemScreenSizeFactors.containsKey(position)) { 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project desiredHeight = (int) (mScreenHeight * mOverrideItemScreenSizeFactors.get(position)); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return desiredHeight; 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The contents of the header above the list. 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException if there is no header. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final String getHeaderValue() { 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mIncludeHeader) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("no header above list"); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaderTextView.getText().toString(); 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value What to put in the header text view 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException if there is no header. 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected final void setHeaderValue(String value) { 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mIncludeHeader) { 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("no header above list"); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaderTextView.setText(value); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a view for a list item. Override this to create a custom view beyond 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the simple focusable / unfocusable text view. 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position. 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The parent 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param desiredHeight The height the view should be to respect the desired item 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to screen height ratio. 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a view for the list. 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected View createView(int position, ViewGroup parent, int desiredHeight) { 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ListItemFactory.text(position, parent.getContext(), getValueAtPosition(position), 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project desiredHeight); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convert a non-null view. 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View convertView(int position, View convertView, ViewGroup parent) { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ListItemFactory.convertText(convertView, getValueAtPosition(position), position); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setClickedPosition(int clickedPosition) { 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mClickedPosition = clickedPosition; 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getClickedPosition() { 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mClickedPosition; 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLongClickedPosition(int longClickedPosition) { 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLongClickedPosition = longClickedPosition; 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getLongClickedPosition() { 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLongClickedPosition; 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Have a child of the list view call {@link View#requestRectangleOnScreen(android.graphics.Rect)}. 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childIndex The index into the viewgroup children (i.e the children that are 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently visible). 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param rect The rectangle, in the child's coordinates. 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void requestRectangleOnScreen(int childIndex, final Rect rect) { 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View child = getListView().getChildAt(childIndex); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project child.post(new Runnable() { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project child.requestRectangleOnScreen(rect); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return an item type for the specified position in the adapter. Override if your 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adapter creates more than one type. 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getItemViewType(int position) { 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 593f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa * Return the number of types created by the adapter. Override if your 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adapter creates more than one type. 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getViewTypeCount() { 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of times convertView failed 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getConvertMisses() { 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mConvertMisses; 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private class MyAdapter extends BaseAdapter { 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getCount() { 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mNumItems; 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getItem(int position) { 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getValueAtPosition(position); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getItemId(int position) { 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return position; 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean areAllItemsEnabled() { 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mUnselectableItems.isEmpty(); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isEnabled(int position) { 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return isItemAtPositionSelectable(position); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View result = null; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (position >= mNumItems || position < 0) { 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("position out of range for adapter!"); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (convertView != null) { 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = convertView(position, convertView, parent); 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result == null) { 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mConvertMisses++; 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result == null) { 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int desiredHeight = getHeightForPosition(position); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = createView(position, parent, desiredHeight); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getItemViewType(int position) { 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ListScenario.this.getItemViewType(position); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getViewTypeCount() { 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ListScenario.this.getViewTypeCount(); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 663