154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov/* 254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * you may not use this file except in compliance with the License. 654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * You may obtain a copy of the License at 754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 1054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * See the License for the specific language governing permissions and 1454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * limitations under the License. 1554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov */ 1654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovpackage com.android.contacts.widget; 1754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 1854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.database.DataSetObserver; 1954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.view.View; 2054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.view.ViewGroup; 2154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.widget.BaseAdapter; 2254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.widget.ListAdapter; 2354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 247039633999b3a46a87c851fa06d9168897ccc54bYorke Leeimport com.android.contacts.common.testing.NeededForTesting; 25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.google.common.annotations.VisibleForTesting; 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 2754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov/** 2854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * A general purpose adapter that is composed of multiple sub-adapters. It just 2954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * appends them in the order they are added. It listens to changes from all 3054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * sub-adapters and propagates them to its own listeners. 31a0290a4baab4297303cab3664c7abfd548f2e301Makoto Onuki * 32a0290a4baab4297303cab3664c7abfd548f2e301Makoto Onuki * This class not used for now -- but let's keep running the test in case we want to revive it... 33a0290a4baab4297303cab3664c7abfd548f2e301Makoto Onuki * (So NeededForTesting) 3454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov */ 35a0290a4baab4297303cab3664c7abfd548f2e301Makoto Onuki@NeededForTesting 3654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovpublic class CompositeListAdapter extends BaseAdapter { 3754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 3854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private static final int INITIAL_CAPACITY = 2; 3954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 4054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private ListAdapter[] mAdapters; 4154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private int[] mCounts; 4254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private int[] mViewTypeCounts; 4354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private int mSize = 0; 4454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private int mCount = 0; 4554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private int mViewTypeCount = 0; 4654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private boolean mAllItemsEnabled = true; 4754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private boolean mCacheValid = true; 4854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 4954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private DataSetObserver mDataSetObserver = new DataSetObserver() { 5054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 5154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 5254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void onChanged() { 5354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov invalidate(); 5454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov notifyDataChanged(); 5554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 5654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 5754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 5854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void onInvalidated() { 5954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov invalidate(); 6054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov notifyDataChanged(); 6154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 6254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov }; 6354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 6454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public CompositeListAdapter() { 6554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov this(INITIAL_CAPACITY); 6654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 6754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 6854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public CompositeListAdapter(int initialCapacity) { 6954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapters = new ListAdapter[INITIAL_CAPACITY]; 7054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCounts = new int[INITIAL_CAPACITY]; 7154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCounts = new int[INITIAL_CAPACITY]; 7254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 7354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 7437a2684d1e47f6d78d757c437a187548f242ee13Flavio Lerda @VisibleForTesting 7537a2684d1e47f6d78d757c437a187548f242ee13Flavio Lerda /*package*/ void addAdapter(ListAdapter adapter) { 7654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (mSize >= mAdapters.length) { 7754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int newCapacity = mSize + 2; 7854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ListAdapter[] newAdapters = new ListAdapter[newCapacity]; 7954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov System.arraycopy(mAdapters, 0, newAdapters, 0, mSize); 8054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapters = newAdapters; 8154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 8254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int[] newCounts = new int[newCapacity]; 8354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov System.arraycopy(mCounts, 0, newCounts, 0, mSize); 8454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCounts = newCounts; 8554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 8654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int[] newViewTypeCounts = new int[newCapacity]; 8754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov System.arraycopy(mViewTypeCounts, 0, newViewTypeCounts, 0, mSize); 8854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCounts = newViewTypeCounts; 8954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 9054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 9154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.registerDataSetObserver(mDataSetObserver); 9254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 9354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int count = adapter.getCount(); 9454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int viewTypeCount = adapter.getViewTypeCount(); 9554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 9654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapters[mSize] = adapter; 9754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCounts[mSize] = count; 9854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCount += count; 9954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAllItemsEnabled &= adapter.areAllItemsEnabled(); 10054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCounts[mSize] = viewTypeCount; 10154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCount += viewTypeCount; 10254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mSize++; 10354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 10454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov notifyDataChanged(); 10554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 10654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 10754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov protected void notifyDataChanged() { 10854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (getCount() > 0) { 10954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov notifyDataSetChanged(); 11054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } else { 11154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov notifyDataSetInvalidated(); 11254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 11354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 11454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 11554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov protected void invalidate() { 11654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCacheValid = false; 11754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 11854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 11954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov protected void ensureCacheValid() { 12054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (mCacheValid) { 12154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return; 12254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 12354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 12454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCount = 0; 12554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAllItemsEnabled = true; 12654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCount = 0; 12754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mSize; i++) { 12854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int count = mAdapters[i].getCount(); 12954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int viewTypeCount = mAdapters[i].getViewTypeCount(); 13054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCounts[i] = count; 13154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCount += count; 13254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAllItemsEnabled &= mAdapters[i].areAllItemsEnabled(); 13354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mViewTypeCount += viewTypeCount; 13454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 13554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 13654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mCacheValid = true; 13754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 13854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 13954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int getCount() { 14054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 14154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mCount; 14254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 14354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 14454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public Object getItem(int position) { 14554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 14654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int start = 0; 14754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mCounts.length; i++) { 14854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int end = start + mCounts[i]; 14954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (position >= start && position < end) { 15054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mAdapters[i].getItem(position - start); 15154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 15254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov start = end; 15354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 15454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 15554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov throw new ArrayIndexOutOfBoundsException(position); 15654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 15754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 15854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public long getItemId(int position) { 15954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 16054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int start = 0; 16154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mCounts.length; i++) { 16254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int end = start + mCounts[i]; 16354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (position >= start && position < end) { 16454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mAdapters[i].getItemId(position - start); 16554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 16654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov start = end; 16754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 16854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 16954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov throw new ArrayIndexOutOfBoundsException(position); 17054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 17154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 17254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 17354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int getViewTypeCount() { 17454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 17554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mViewTypeCount; 17654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 17754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 17854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 17954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int getItemViewType(int position) { 18054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 18154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int start = 0; 18254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int viewTypeOffset = 0; 18354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mCounts.length; i++) { 18454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int end = start + mCounts[i]; 18554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (position >= start && position < end) { 18654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return viewTypeOffset + mAdapters[i].getItemViewType(position - start); 18754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 18854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov viewTypeOffset += mViewTypeCounts[i]; 18954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov start = end; 19054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 19154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 19254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov throw new ArrayIndexOutOfBoundsException(position); 19354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 19454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 19554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public View getView(int position, View convertView, ViewGroup parent) { 19654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 19754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int start = 0; 19854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mCounts.length; i++) { 19954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int end = start + mCounts[i]; 20054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (position >= start && position < end) { 20154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mAdapters[i].getView(position - start, convertView, parent); 20254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 20354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov start = end; 20454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 20554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 20654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov throw new ArrayIndexOutOfBoundsException(position); 20754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 20854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 20954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 21054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public boolean areAllItemsEnabled() { 21154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 21254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mAllItemsEnabled; 21354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 21454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 21554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 21654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public boolean isEnabled(int position) { 21754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov ensureCacheValid(); 21854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int start = 0; 21954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < mCounts.length; i++) { 22054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int end = start + mCounts[i]; 22154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov if (position >= start && position < end) { 22254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return mAdapters[i].areAllItemsEnabled() 22354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov || mAdapters[i].isEnabled(position - start); 22454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 22554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov start = end; 22654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 22754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 22854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov throw new ArrayIndexOutOfBoundsException(position); 22954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 23054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov} 231