15650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira/******************************************************************************* 25650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * Copyright (C) 2012 Google Inc. 35650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * Licensed to The Android Open Source Project. 45650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * 55650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 65650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * you may not use this file except in compliance with the License. 75650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * You may obtain a copy of the License at 85650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * 95650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 105650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * 115650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * Unless required by applicable law or agreed to in writing, software 125650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 135650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * See the License for the specific language governing permissions and 155650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira * limitations under the License. 165650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira *******************************************************************************/ 175650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 185650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereirapackage com.android.mail.ui; 195650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 205650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereiraimport android.view.View; 215650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereiraimport android.view.ViewGroup; 225650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereiraimport android.widget.Adapter; 235650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereiraimport android.widget.BaseAdapter; 245650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 255a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereiraimport java.util.ArrayList; 265650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 275650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereirapublic class SeparatedFolderListAdapter extends BaseAdapter { 285650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 2947ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler private final ArrayList<FolderSelectorAdapter> mSections = 305a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira new ArrayList<FolderSelectorAdapter>(); 31106a12a1b6642e8c2f716aefa846d9664fbec158Andrew Sapperstein public final static int TYPE_ITEM = 0; 325650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 335a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira public void addSection(FolderSelectorAdapter adapter) { 3447ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler mSections.add(adapter); 355650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 365650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 372a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler public void clearSections() { 382a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler mSections.clear(); 392a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler } 402a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler 415a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira @Override 425650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public Object getItem(int position) { 4347ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler for (FolderSelectorAdapter adapter : mSections) { 445a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira int size = adapter.getCount(); 455650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 465650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // check if position inside this section 47866545aa95536fdfccfaea4391d0c0f7d63d6710Jin Cao if (position < size) 485a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira return adapter.getItem(position); 495650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 505650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // otherwise jump into next section 515650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira position -= size; 525650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 535650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira return null; 545650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 555650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 565a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira @Override 575650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public int getCount() { 585650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // total together all sections, plus one for each section header 595650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira int total = 0; 6047ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler for (FolderSelectorAdapter adapter : mSections) { 615a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira total += adapter.getCount(); 625a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira } 635650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira return total; 645650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 655650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 665a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira @Override 675650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public int getViewTypeCount() { 685650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // assume that headers count as one, then total all sections 695a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira int total = 0; 7047ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler for (Adapter adapter : mSections) 715650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira total += adapter.getViewTypeCount(); 722a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler return total == 0 ? 1 : total; 735650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 745650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 755a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira @Override 765650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public int getItemViewType(int position) { 775a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira int type = 0; 7847ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler for (FolderSelectorAdapter adapter : mSections) { 795a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira int size = adapter.getCount(); 805650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // check if position inside this section 81866545aa95536fdfccfaea4391d0c0f7d63d6710Jin Cao if (position < size) { 825a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira return type + adapter.getItemViewType(position); 835a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira } 845650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 855650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // otherwise jump into next section 865650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira position -= size; 875650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira type += adapter.getViewTypeCount(); 885650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 895650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira return -1; 905650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 915650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 925650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 935650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira @Override 945650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public View getView(int position, View convertView, ViewGroup parent) { 9547ce8047c208f3268f31bd7ef7eb5392b670ea8aTony Mantler for (FolderSelectorAdapter adapter : mSections) { 965a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira int size = adapter.getCount(); 97866545aa95536fdfccfaea4391d0c0f7d63d6710Jin Cao if (position < size) { 985a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira return adapter.getView(position, convertView, parent); 995a5859d34d44ed4cbe0a4658eec76ffe466f4bddMindy Pereira } 1005650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira // otherwise jump into next section 1015650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira position -= size; 1025650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 1035650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira return null; 1045650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 1055650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 1065650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira @Override 1075650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira public long getItemId(int position) { 1085650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira return position; 1095650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira } 1105650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira 1115650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira} 112