| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.widget; |
| |
| import android.database.DataSetObservable; |
| import android.database.DataSetObserver; |
| |
| /** |
| * Base class for a {@link ExpandableListAdapter} used to provide data and Views |
| * from some data to an expandable list view. |
| * <p> |
| * Adapters inheriting this class should verify that the base implementations of |
| * {@link #getCombinedChildId(long, long)} and {@link #getCombinedGroupId(long)} |
| * are correct in generating unique IDs from the group/children IDs. |
| * <p> |
| * @see SimpleExpandableListAdapter |
| * @see SimpleCursorTreeAdapter |
| */ |
| public abstract class BaseExpandableListAdapter implements ExpandableListAdapter, |
| HeterogeneousExpandableList { |
| private final DataSetObservable mDataSetObservable = new DataSetObservable(); |
| |
| public void registerDataSetObserver(DataSetObserver observer) { |
| mDataSetObservable.registerObserver(observer); |
| } |
| |
| public void unregisterDataSetObserver(DataSetObserver observer) { |
| mDataSetObservable.unregisterObserver(observer); |
| } |
| |
| /** |
| * @see DataSetObservable#notifyInvalidated() |
| */ |
| public void notifyDataSetInvalidated() { |
| mDataSetObservable.notifyInvalidated(); |
| } |
| |
| /** |
| * @see DataSetObservable#notifyChanged() |
| */ |
| public void notifyDataSetChanged() { |
| mDataSetObservable.notifyChanged(); |
| } |
| |
| public boolean areAllItemsEnabled() { |
| return true; |
| } |
| |
| public void onGroupCollapsed(int groupPosition) { |
| } |
| |
| public void onGroupExpanded(int groupPosition) { |
| } |
| |
| /** |
| * Override this method if you foresee a clash in IDs based on this scheme: |
| * <p> |
| * Base implementation returns a long: |
| * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method |
| * this bit will be 1. |
| * <li> bit 1-31: Lower 31 bits of the groupId |
| * <li> bit 32-63: Lower 32 bits of the childId. |
| * <p> |
| * {@inheritDoc} |
| */ |
| public long getCombinedChildId(long groupId, long childId) { |
| return 0x8000000000000000L | ((groupId & 0x7FFFFFFF) << 32) | (childId & 0xFFFFFFFF); |
| } |
| |
| /** |
| * Override this method if you foresee a clash in IDs based on this scheme: |
| * <p> |
| * Base implementation returns a long: |
| * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method |
| * this bit will be 0. |
| * <li> bit 1-31: Lower 31 bits of the groupId |
| * <li> bit 32-63: Lower 32 bits of the childId. |
| * <p> |
| * {@inheritDoc} |
| */ |
| public long getCombinedGroupId(long groupId) { |
| return (groupId & 0x7FFFFFFF) << 32; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| public boolean isEmpty() { |
| return getGroupCount() == 0; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| * @return 0 for any group or child position, since only one child type count is declared. |
| */ |
| public int getChildType(int groupPosition, int childPosition) { |
| return 0; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * @return 1 as a default value in BaseExpandableListAdapter. |
| */ |
| public int getChildTypeCount() { |
| return 1; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * @return 0 for any groupPosition, since only one group type count is declared. |
| */ |
| public int getGroupType(int groupPosition) { |
| return 0; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * @return 1 as a default value in BaseExpandableListAdapter. |
| */ |
| public int getGroupTypeCount() { |
| return 1; |
| } |
| } |