summaryrefslogtreecommitdiffstats
path: root/core/java/android/preference/PreferenceGroupAdapter.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:45 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:45 -0800
commitd83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /core/java/android/preference/PreferenceGroupAdapter.java
parent076357b8567458d4b6dfdcf839ef751634cd2bfb (diff)
downloadframeworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.zip
frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.gz
frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'core/java/android/preference/PreferenceGroupAdapter.java')
-rw-r--r--core/java/android/preference/PreferenceGroupAdapter.java248
1 files changed, 0 insertions, 248 deletions
diff --git a/core/java/android/preference/PreferenceGroupAdapter.java b/core/java/android/preference/PreferenceGroupAdapter.java
deleted file mode 100644
index 14c0054..0000000
--- a/core/java/android/preference/PreferenceGroupAdapter.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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.preference;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import android.os.Handler;
-import android.preference.Preference.OnPreferenceChangeInternalListener;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-
-/**
- * An adapter that returns the {@link Preference} contained in this group.
- * In most cases, this adapter should be the base class for any custom
- * adapters from {@link Preference#getAdapter()}.
- * <p>
- * This adapter obeys the
- * {@link Preference}'s adapter rule (the
- * {@link Adapter#getView(int, View, ViewGroup)} should be used instead of
- * {@link Preference#getView(ViewGroup)} if a {@link Preference} has an
- * adapter via {@link Preference#getAdapter()}).
- * <p>
- * This adapter also propagates data change/invalidated notifications upward.
- * <p>
- * This adapter does not include this {@link PreferenceGroup} in the returned
- * adapter, use {@link PreferenceCategoryAdapter} instead.
- *
- * @see PreferenceCategoryAdapter
- */
-class PreferenceGroupAdapter extends BaseAdapter implements OnPreferenceChangeInternalListener {
-
- private static final String TAG = "PreferenceGroupAdapter";
-
- /**
- * The group that we are providing data from.
- */
- private PreferenceGroup mPreferenceGroup;
-
- /**
- * Maps a position into this adapter -> {@link Preference}. These
- * {@link Preference}s don't have to be direct children of this
- * {@link PreferenceGroup}, they can be grand children or younger)
- */
- private List<Preference> mPreferenceList;
-
- /**
- * List of unique Preference and its subclasses' names. This is used to find
- * out how many types of views this adapter can return. Once the count is
- * returned, this cannot be modified (since the ListView only checks the
- * count once--when the adapter is being set). We will not recycle views for
- * Preference subclasses seen after the count has been returned.
- */
- private List<String> mPreferenceClassNames;
-
- /**
- * Blocks the mPreferenceClassNames from being changed anymore.
- */
- private boolean mHasReturnedViewTypeCount = false;
-
- private volatile boolean mIsSyncing = false;
-
- private Handler mHandler = new Handler();
-
- private Runnable mSyncRunnable = new Runnable() {
- public void run() {
- syncMyPreferences();
- }
- };
-
- public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
- mPreferenceGroup = preferenceGroup;
- // If this group gets or loses any children, let us know
- mPreferenceGroup.setOnPreferenceChangeInternalListener(this);
-
- mPreferenceList = new ArrayList<Preference>();
- mPreferenceClassNames = new ArrayList<String>();
-
- syncMyPreferences();
- }
-
- private void syncMyPreferences() {
- synchronized(this) {
- if (mIsSyncing) {
- return;
- }
-
- mIsSyncing = true;
- }
-
- List<Preference> newPreferenceList = new ArrayList<Preference>(mPreferenceList.size());
- flattenPreferenceGroup(newPreferenceList, mPreferenceGroup);
- mPreferenceList = newPreferenceList;
-
- notifyDataSetChanged();
-
- synchronized(this) {
- mIsSyncing = false;
- notifyAll();
- }
- }
-
- private void flattenPreferenceGroup(List<Preference> preferences, PreferenceGroup group) {
- // TODO: shouldn't always?
- group.sortPreferences();
-
- final int groupSize = group.getPreferenceCount();
- for (int i = 0; i < groupSize; i++) {
- final Preference preference = group.getPreference(i);
-
- preferences.add(preference);
-
- if (!mHasReturnedViewTypeCount) {
- addPreferenceClassName(preference);
- }
-
- if (preference instanceof PreferenceGroup) {
- final PreferenceGroup preferenceAsGroup = (PreferenceGroup) preference;
- if (preferenceAsGroup.isOnSameScreenAsChildren()) {
- flattenPreferenceGroup(preferences, preferenceAsGroup);
- }
- }
-
- preference.setOnPreferenceChangeInternalListener(this);
- }
- }
-
- private void addPreferenceClassName(Preference preference) {
- final String name = preference.getClass().getName();
- int insertPos = Collections.binarySearch(mPreferenceClassNames, name);
-
- // Only insert if it doesn't exist (when it is negative).
- if (insertPos < 0) {
- // Convert to insert index
- insertPos = insertPos * -1 - 1;
- mPreferenceClassNames.add(insertPos, name);
- }
- }
-
- public int getCount() {
- return mPreferenceList.size();
- }
-
- public Preference getItem(int position) {
- if (position < 0 || position >= getCount()) return null;
- return mPreferenceList.get(position);
- }
-
- public long getItemId(int position) {
- if (position < 0 || position >= getCount()) return ListView.INVALID_ROW_ID;
- return this.getItem(position).getId();
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- final Preference preference = this.getItem(position);
-
- if (preference.hasSpecifiedLayout()) {
- // If the preference had specified a layout (as opposed to the
- // default), don't use convert views.
- convertView = null;
- } else {
- // TODO: better way of doing this
- final String name = preference.getClass().getName();
- if (Collections.binarySearch(mPreferenceClassNames, name) < 0) {
- convertView = null;
- }
- }
-
- return preference.getView(convertView, parent);
- }
-
- @Override
- public boolean isEnabled(int position) {
- if (position < 0 || position >= getCount()) return true;
- return this.getItem(position).isSelectable();
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- // There should always be a preference group, and these groups are always
- // disabled
- return false;
- }
-
- public void onPreferenceChange(Preference preference) {
- notifyDataSetChanged();
- }
-
- public void onPreferenceHierarchyChange(Preference preference) {
- mHandler.removeCallbacks(mSyncRunnable);
- mHandler.post(mSyncRunnable);
- }
-
- @Override
- public boolean hasStableIds() {
- return true;
- }
-
- @Override
- public int getItemViewType(int position) {
- if (!mHasReturnedViewTypeCount) {
- mHasReturnedViewTypeCount = true;
- }
-
- final Preference preference = this.getItem(position);
- if (preference.hasSpecifiedLayout()) {
- return IGNORE_ITEM_VIEW_TYPE;
- }
-
- final String name = preference.getClass().getName();
- int viewType = Collections.binarySearch(mPreferenceClassNames, name);
- if (viewType < 0) {
- // This is a class that was seen after we returned the count, so
- // don't recycle it.
- return IGNORE_ITEM_VIEW_TYPE;
- } else {
- return viewType;
- }
- }
-
- @Override
- public int getViewTypeCount() {
- if (!mHasReturnedViewTypeCount) {
- mHasReturnedViewTypeCount = true;
- }
-
- return Math.max(1, mPreferenceClassNames.size());
- }
-
-}