1 /*******************************************************************************
2  *      Copyright (C) 2012 Google Inc.
3  *      Licensed to The Android Open Source Project.
4  *
5  *      Licensed under the Apache License, Version 2.0 (the "License");
6  *      you may not use this file except in compliance with the License.
7  *      You may obtain a copy of the License at
8  *
9  *           http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *      Unless required by applicable law or agreed to in writing, software
12  *      distributed under the License is distributed on an "AS IS" BASIS,
13  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *      See the License for the specific language governing permissions and
15  *      limitations under the License.
16  *******************************************************************************/
17 
18 package com.android.mail.ui;
19 
20 import android.view.View;
21 import android.view.ViewGroup;
22 import android.widget.Adapter;
23 import android.widget.BaseAdapter;
24 
25 import java.util.ArrayList;
26 
27 public class SeparatedFolderListAdapter extends BaseAdapter {
28 
29     private final ArrayList<FolderSelectorAdapter> mSections =
30             new ArrayList<FolderSelectorAdapter>();
31     public final static int TYPE_ITEM = 0;
32 
addSection(FolderSelectorAdapter adapter)33     public void addSection(FolderSelectorAdapter adapter) {
34         mSections.add(adapter);
35     }
36 
clearSections()37     public void clearSections() {
38         mSections.clear();
39     }
40 
41     @Override
getItem(int position)42     public Object getItem(int position) {
43         for (FolderSelectorAdapter adapter : mSections) {
44             int size = adapter.getCount();
45 
46             // check if position inside this section
47             if (position < size)
48                 return adapter.getItem(position);
49 
50             // otherwise jump into next section
51             position -= size;
52         }
53         return null;
54     }
55 
56     @Override
getCount()57     public int getCount() {
58         // total together all sections, plus one for each section header
59         int total = 0;
60         for (FolderSelectorAdapter adapter : mSections) {
61             total += adapter.getCount();
62         }
63         return total;
64     }
65 
66     @Override
getViewTypeCount()67     public int getViewTypeCount() {
68         // assume that headers count as one, then total all sections
69         int total = 0;
70         for (Adapter adapter : mSections)
71             total += adapter.getViewTypeCount();
72         return total == 0 ? 1 : total;
73     }
74 
75     @Override
getItemViewType(int position)76     public int getItemViewType(int position) {
77         int type = 0;
78         for (FolderSelectorAdapter adapter : mSections) {
79             int size = adapter.getCount();
80             // check if position inside this section
81             if (position < size) {
82                 return type + adapter.getItemViewType(position);
83             }
84 
85             // otherwise jump into next section
86             position -= size;
87             type += adapter.getViewTypeCount();
88         }
89         return -1;
90     }
91 
92 
93     @Override
getView(int position, View convertView, ViewGroup parent)94     public View getView(int position, View convertView, ViewGroup parent) {
95         for (FolderSelectorAdapter adapter : mSections) {
96             int size = adapter.getCount();
97             if (position < size) {
98                 return adapter.getView(position, convertView, parent);
99             }
100             // otherwise jump into next section
101             position -= size;
102         }
103         return null;
104     }
105 
106     @Override
getItemId(int position)107     public long getItemId(int position) {
108         return position;
109     }
110 
111 }
112