diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/preference/OnDependencyChangeListener.java | 32 | ||||
| -rw-r--r-- | core/java/android/preference/Preference.java | 24 | ||||
| -rw-r--r-- | core/java/android/preference/PreferenceCategory.java | 4 | ||||
| -rw-r--r-- | core/java/android/preference/PreferenceGroup.java | 11 |
5 files changed, 32 insertions, 40 deletions
diff --git a/api/current.txt b/api/current.txt index 394acba82cbc..591841706ddf 100644 --- a/api/current.txt +++ b/api/current.txt @@ -18621,6 +18621,7 @@ package android.preference { method protected android.view.View onCreateView(android.view.ViewGroup); method public void onDependencyChanged(android.preference.Preference, boolean); method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int); + method public void onParentChanged(android.preference.Preference, boolean); method protected void onPrepareForRemoval(); method protected void onRestoreInstanceState(android.os.Parcelable); method protected android.os.Parcelable onSaveInstanceState(); diff --git a/core/java/android/preference/OnDependencyChangeListener.java b/core/java/android/preference/OnDependencyChangeListener.java deleted file mode 100644 index ce25e34ec9f5..000000000000 --- a/core/java/android/preference/OnDependencyChangeListener.java +++ /dev/null @@ -1,32 +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; - -/** - * Interface definition for a callback to be invoked when this - * {@link Preference} changes with respect to enabling/disabling - * dependents. - */ -interface OnDependencyChangeListener { - /** - * Called when this preference has changed in a way that dependents should - * care to change their state. - * - * @param disablesDependent Whether the dependent should be disabled. - */ - void onDependencyChanged(Preference dependency, boolean disablesDependent); -} diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 6c0296537b50..08e3d7b895cb 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -77,7 +77,7 @@ import java.util.Set; * @attr ref android.R.styleable#Preference_defaultValue * @attr ref android.R.styleable#Preference_shouldDisableView */ -public class Preference implements Comparable<Preference>, OnDependencyChangeListener { +public class Preference implements Comparable<Preference> { /** * Specify for {@link #setOrder(int)} if a specific order is not required. */ @@ -115,6 +115,7 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis private String mDependencyKey; private Object mDefaultValue; private boolean mDependencyMet = true; + private boolean mParentDependencyMet = true; /** * @see #setShouldDisableView(boolean) @@ -733,7 +734,7 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis * @return True if this Preference is enabled, false otherwise. */ public boolean isEnabled() { - return mEnabled && mDependencyMet; + return mEnabled && mDependencyMet && mParentDependencyMet; } /** @@ -1259,7 +1260,24 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis notifyChanged(); } } - + + /** + * Called when the implicit parent dependency changes. + * + * @param parent The Preference that this Preference depends on. + * @param disableChild Set true to disable this Preference. + */ + public void onParentChanged(Preference parent, boolean disableChild) { + if (mParentDependencyMet == disableChild) { + mParentDependencyMet = !disableChild; + + // Enabled state can change dependent preferences' states, so notify + notifyDependencyChange(shouldDisableDependents()); + + notifyChanged(); + } + } + /** * Checks whether this preference's dependents should currently be * disabled. diff --git a/core/java/android/preference/PreferenceCategory.java b/core/java/android/preference/PreferenceCategory.java index d8af3248f7d2..229a96a18735 100644 --- a/core/java/android/preference/PreferenceCategory.java +++ b/core/java/android/preference/PreferenceCategory.java @@ -62,4 +62,8 @@ public class PreferenceCategory extends PreferenceGroup { return false; } + @Override + public boolean shouldDisableDependents() { + return !super.isEnabled(); + } } diff --git a/core/java/android/preference/PreferenceGroup.java b/core/java/android/preference/PreferenceGroup.java index f33a6be9ff55..a5e05ba31a74 100644 --- a/core/java/android/preference/PreferenceGroup.java +++ b/core/java/android/preference/PreferenceGroup.java @@ -290,13 +290,14 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla } @Override - public void setEnabled(boolean enabled) { - super.setEnabled(enabled); - - // Dispatch to all contained preferences + public void notifyDependencyChange(boolean disableDependents) { + super.notifyDependencyChange(disableDependents); + + // Child preferences have an implicit dependency on their containing + // group. Dispatch dependency change to all contained preferences. final int preferenceCount = getPreferenceCount(); for (int i = 0; i < preferenceCount; i++) { - getPreference(i).setEnabled(enabled); + getPreference(i).onParentChanged(this, disableDependents); } } |