1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2011 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.layoutlib.bridge.impl.binding;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.AdapterBinding;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.DataBindingItem;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.IProjectCallback;
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ResourceReference;
23e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Guptaimport com.android.util.Pair;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
25e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Guptaimport android.database.DataSetObserver;
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.View;
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.ViewGroup;
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.ExpandableListAdapter;
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.HeterogeneousExpandableList;
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.ArrayList;
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.List;
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
34e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta@SuppressWarnings("deprecation")
35e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Guptapublic class FakeExpandableAdapter implements ExpandableListAdapter, HeterogeneousExpandableList {
36e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
37e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    private final IProjectCallback mCallback;
38e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    private final ResourceReference mAdapterRef;
39e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    private boolean mSkipCallbackParser = false;
40e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
41e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    protected final List<AdapterItem> mItems = new ArrayList<AdapterItem>();
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // don't use a set because the order is important.
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private final List<ResourceReference> mGroupTypes = new ArrayList<ResourceReference>();
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private final List<ResourceReference> mChildrenTypes = new ArrayList<ResourceReference>();
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public FakeExpandableAdapter(ResourceReference adapterRef, AdapterBinding binding,
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            IProjectCallback callback) {
49e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        mAdapterRef = adapterRef;
50e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        mCallback = callback;
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        createItems(binding, binding.getItemCount(), binding.getRepeatCount(), mGroupTypes, 1);
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private void createItems(Iterable<DataBindingItem> iterable, final int itemCount,
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            final int repeatCount, List<ResourceReference> types, int depth) {
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // Need an array to count for each type.
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // This is likely too big, but is the max it can be.
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int[] typeCount = new int[itemCount];
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // we put several repeating sets.
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        for (int r = 0 ; r < repeatCount ; r++) {
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            // loop on the type of list items, and add however many for each type.
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            for (DataBindingItem dataBindingItem : iterable) {
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                ResourceReference viewRef = dataBindingItem.getViewReference();
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                int typeIndex = types.indexOf(viewRef);
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                if (typeIndex == -1) {
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    typeIndex = types.size();
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    types.add(viewRef);
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                }
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                List<DataBindingItem> children = dataBindingItem.getChildren();
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                int count = dataBindingItem.getCount();
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                // if there are children, we use the count as a repeat count for the children.
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                if (children.size() > 0) {
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    count = 1;
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                }
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                int index = typeCount[typeIndex];
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                typeCount[typeIndex] += count;
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                for (int k = 0 ; k < count ; k++) {
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    AdapterItem item = new AdapterItem(dataBindingItem, typeIndex, mItems.size(),
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                            index++);
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    mItems.add(item);
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    if (children.size() > 0) {
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                        createItems(dataBindingItem, depth + 1);
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                    }
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                }
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private void createItems(DataBindingItem item, int depth) {
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (depth == 2) {
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            createItems(item, item.getChildren().size(), item.getCount(), mChildrenTypes, depth);
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private AdapterItem getChildItem(int groupPosition, int childPosition) {
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        AdapterItem item = mItems.get(groupPosition);
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        List<AdapterItem> children = item.getChildren();
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return children.get(childPosition);
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // ---- ExpandableListAdapter
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getGroupCount() {
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mItems.size();
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getChildrenCount(int groupPosition) {
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        AdapterItem item = mItems.get(groupPosition);
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return item.getChildren().size();
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public Object getGroup(int groupPosition) {
124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mItems.get(groupPosition);
125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public Object getChild(int groupPosition, int childPosition) {
129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return getChildItem(groupPosition, childPosition);
130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ViewGroup parent) {
135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // we don't care about recycling here because we never scroll.
136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        AdapterItem item = mItems.get(groupPosition);
137e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        Pair<View, Boolean> pair = AdapterHelper.getView(item, null /*parentItem*/, parent,
138e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta                mCallback, mAdapterRef, mSkipCallbackParser);
139e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        mSkipCallbackParser = pair.getSecond();
140e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        return pair.getFirst();
141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            View convertView, ViewGroup parent) {
146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // we don't care about recycling here because we never scroll.
147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        AdapterItem parentItem = mItems.get(groupPosition);
148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        AdapterItem item = getChildItem(groupPosition, childPosition);
149e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        Pair<View, Boolean> pair = AdapterHelper.getView(item, parentItem, parent, mCallback,
150e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta                mAdapterRef, mSkipCallbackParser);
151e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        mSkipCallbackParser = pair.getSecond();
152e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        return pair.getFirst();
153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public long getGroupId(int groupPosition) {
157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return groupPosition;
158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public long getChildId(int groupPosition, int childPosition) {
162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return childPosition;
163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public long getCombinedGroupId(long groupId) {
167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return groupId << 16 | 0x0000FFFF;
168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public long getCombinedChildId(long groupId, long childId) {
172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return groupId << 16 | childId;
173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public boolean isChildSelectable(int groupPosition, int childPosition) {
177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return true;
178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void onGroupCollapsed(int groupPosition) {
182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void onGroupExpanded(int groupPosition) {
187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
190e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    @Override
191e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    public void registerDataSetObserver(DataSetObserver observer) {
192e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        // pass
193e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    }
194e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
195e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    @Override
196e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    public void unregisterDataSetObserver(DataSetObserver observer) {
197e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        // pass
198e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    }
199e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
200e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    @Override
201e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    public boolean hasStableIds() {
202e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        return true;
203e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    }
204e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
205e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    @Override
206e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    public boolean areAllItemsEnabled() {
207e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        return true;
208e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    }
209e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
210e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    @Override
211e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    public boolean isEmpty() {
212e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta        return mItems.isEmpty();
213e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta    }
214e98d2cb65c0915d5278c593d14ff4bdc778557f7Deepanshu Gupta
215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // ---- HeterogeneousExpandableList
216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getChildType(int groupPosition, int childPosition) {
219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return getChildItem(groupPosition, childPosition).getType();
220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getChildTypeCount() {
224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mChildrenTypes.size();
225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getGroupType(int groupPosition) {
229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mItems.get(groupPosition).getType();
230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getGroupTypeCount() {
234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mGroupTypes.size();
235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
237