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