12fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet/*
22fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Copyright (C) 2011 The Android Open Source Project
32fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet *
42fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License");
52fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * you may not use this file except in compliance with the License.
62fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * You may obtain a copy of the License at
72fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet *
82fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet *      http://www.apache.org/licenses/LICENSE-2.0
92fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet *
102fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Unless required by applicable law or agreed to in writing, software
112fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS,
122fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * See the License for the specific language governing permissions and
142fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * limitations under the License.
152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet */
162fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
172fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetpackage com.android.layoutlib.bridge.impl.binding;
182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.AdapterBinding;
202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.DataBindingItem;
212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.IProjectCallback;
222fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.ResourceReference;
2354d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Guptaimport com.android.util.Pair;
242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
2554d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Guptaimport android.database.DataSetObserver;
262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.view.View;
272fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.view.ViewGroup;
282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.ExpandableListAdapter;
292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.HeterogeneousExpandableList;
302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport java.util.ArrayList;
322fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport java.util.List;
332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
3454d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta@SuppressWarnings("deprecation")
3554d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Guptapublic class FakeExpandableAdapter implements ExpandableListAdapter, HeterogeneousExpandableList {
3654d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
3754d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    private final IProjectCallback mCallback;
3854d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    private final ResourceReference mAdapterRef;
3954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    private boolean mSkipCallbackParser = false;
4054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
4154d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    protected final List<AdapterItem> mItems = new ArrayList<AdapterItem>();
422fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
432fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    // don't use a set because the order is important.
442fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    private final List<ResourceReference> mGroupTypes = new ArrayList<ResourceReference>();
452fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    private final List<ResourceReference> mChildrenTypes = new ArrayList<ResourceReference>();
462fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
472fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public FakeExpandableAdapter(ResourceReference adapterRef, AdapterBinding binding,
482fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            IProjectCallback callback) {
4954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        mAdapterRef = adapterRef;
5054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        mCallback = callback;
512fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
522fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        createItems(binding, binding.getItemCount(), binding.getRepeatCount(), mGroupTypes, 1);
532fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
542fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
552fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    private void createItems(Iterable<DataBindingItem> iterable, final int itemCount,
562fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            final int repeatCount, List<ResourceReference> types, int depth) {
572fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // Need an array to count for each type.
582fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // This is likely too big, but is the max it can be.
592fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        int[] typeCount = new int[itemCount];
602fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
612fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // we put several repeating sets.
622fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        for (int r = 0 ; r < repeatCount ; r++) {
632fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            // loop on the type of list items, and add however many for each type.
642fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            for (DataBindingItem dataBindingItem : iterable) {
652fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                ResourceReference viewRef = dataBindingItem.getViewReference();
662fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                int typeIndex = types.indexOf(viewRef);
672fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                if (typeIndex == -1) {
682fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    typeIndex = types.size();
692fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    types.add(viewRef);
702fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                }
712fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
722fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                List<DataBindingItem> children = dataBindingItem.getChildren();
732fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                int count = dataBindingItem.getCount();
742fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
752fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                // if there are children, we use the count as a repeat count for the children.
762fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                if (children.size() > 0) {
772fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    count = 1;
782fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                }
792fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
802fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                int index = typeCount[typeIndex];
812fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                typeCount[typeIndex] += count;
822fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
832fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                for (int k = 0 ; k < count ; k++) {
842fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    AdapterItem item = new AdapterItem(dataBindingItem, typeIndex, mItems.size(),
852fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                            index++);
862fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    mItems.add(item);
872fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
882fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    if (children.size() > 0) {
892fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                        createItems(dataBindingItem, depth + 1);
902fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                    }
912fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet                }
922fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            }
932fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        }
942fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
952fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
962fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    private void createItems(DataBindingItem item, int depth) {
972fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        if (depth == 2) {
982fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            createItems(item, item.getChildren().size(), item.getCount(), mChildrenTypes, depth);
992fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        }
1002fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1012fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
1022fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    private AdapterItem getChildItem(int groupPosition, int childPosition) {
1032fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        AdapterItem item = mItems.get(groupPosition);
1042fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
1052fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        List<AdapterItem> children = item.getChildren();
1062fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return children.get(childPosition);
1072fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1082fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
1092fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    // ---- ExpandableListAdapter
1102fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
11146d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1122fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getGroupCount() {
1132fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return mItems.size();
1142fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
11646d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1172fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getChildrenCount(int groupPosition) {
1182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        AdapterItem item = mItems.get(groupPosition);
1192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return item.getChildren().size();
1202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
12246d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1232fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public Object getGroup(int groupPosition) {
1242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return mItems.get(groupPosition);
1252fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
12746d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public Object getChild(int groupPosition, int childPosition) {
1292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return getChildItem(groupPosition, childPosition);
1302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
13246d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
1342fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            ViewGroup parent) {
1352fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // we don't care about recycling here because we never scroll.
1362fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        AdapterItem item = mItems.get(groupPosition);
13754d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        Pair<View, Boolean> pair = AdapterHelper.getView(item, null /*parentItem*/, parent,
13854d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta                mCallback, mAdapterRef, mSkipCallbackParser);
13954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        mSkipCallbackParser = pair.getSecond();
14054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        return pair.getFirst();
1412fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1422fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
14346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1442fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
1452fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet            View convertView, ViewGroup parent) {
1462fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // we don't care about recycling here because we never scroll.
1472fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        AdapterItem parentItem = mItems.get(groupPosition);
1482fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        AdapterItem item = getChildItem(groupPosition, childPosition);
14954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        Pair<View, Boolean> pair = AdapterHelper.getView(item, parentItem, parent, mCallback,
15054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta                mAdapterRef, mSkipCallbackParser);
15154d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        mSkipCallbackParser = pair.getSecond();
15254d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        return pair.getFirst();
1532fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1542fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
15546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1562fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public long getGroupId(int groupPosition) {
1572fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return groupPosition;
1582fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1592fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
16046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1612fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public long getChildId(int groupPosition, int childPosition) {
1622fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return childPosition;
1632fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1642fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
16546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1662fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public long getCombinedGroupId(long groupId) {
1672fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return groupId << 16 | 0x0000FFFF;
1682fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1692fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
17046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1712fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public long getCombinedChildId(long groupId, long childId) {
1722fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return groupId << 16 | childId;
1732fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1742fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
17546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1762fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public boolean isChildSelectable(int groupPosition, int childPosition) {
1772fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return true;
1782fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1792fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
18046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1812fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public void onGroupCollapsed(int groupPosition) {
1822fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // pass
1832fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1842fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
18546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1862fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public void onGroupExpanded(int groupPosition) {
1872fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        // pass
1882fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
1892fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
19054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    @Override
19154d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    public void registerDataSetObserver(DataSetObserver observer) {
19254d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        // pass
19354d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    }
19454d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
19554d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    @Override
19654d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    public void unregisterDataSetObserver(DataSetObserver observer) {
19754d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        // pass
19854d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    }
19954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
20054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    @Override
20154d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    public boolean hasStableIds() {
20254d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        return true;
20354d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    }
20454d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
20554d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    @Override
20654d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    public boolean areAllItemsEnabled() {
20754d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        return true;
20854d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    }
20954d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
21054d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    @Override
21154d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    public boolean isEmpty() {
21254d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta        return mItems.isEmpty();
21354d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta    }
21454d88f7678387a6eb871ec2dccd36af4ff35b1feDeepanshu Gupta
2152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    // ---- HeterogeneousExpandableList
2162fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
21746d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getChildType(int groupPosition, int childPosition) {
2192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return getChildItem(groupPosition, childPosition).getType();
2202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
2212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
22246d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2232fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getChildTypeCount() {
2242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return mChildrenTypes.size();
2252fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
2262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
22746d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getGroupType(int groupPosition) {
2292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return mItems.get(groupPosition).getType();
2302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
2312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet
23246d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    public int getGroupTypeCount() {
2342fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet        return mGroupTypes.size();
2352fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet    }
2362fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet}
237