am 59bbba7c: Merge "Add implicit parent dependency for Preferences" into klp-dev

* commit '59bbba7c37f2ce7b7fd00aef87b49d681b4a3a79':
  Add implicit parent dependency for Preferences
This commit is contained in:
Alan Viverette
2013-08-20 16:31:07 -07:00
committed by Android Git Automerger
5 changed files with 32 additions and 40 deletions

View File

@@ -18621,6 +18621,7 @@ package android.preference {
method protected android.view.View onCreateView(android.view.ViewGroup); method protected android.view.View onCreateView(android.view.ViewGroup);
method public void onDependencyChanged(android.preference.Preference, boolean); method public void onDependencyChanged(android.preference.Preference, boolean);
method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int); 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 onPrepareForRemoval();
method protected void onRestoreInstanceState(android.os.Parcelable); method protected void onRestoreInstanceState(android.os.Parcelable);
method protected android.os.Parcelable onSaveInstanceState(); method protected android.os.Parcelable onSaveInstanceState();

View File

@@ -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);
}

View File

@@ -77,7 +77,7 @@ import java.util.Set;
* @attr ref android.R.styleable#Preference_defaultValue * @attr ref android.R.styleable#Preference_defaultValue
* @attr ref android.R.styleable#Preference_shouldDisableView * @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. * 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 String mDependencyKey;
private Object mDefaultValue; private Object mDefaultValue;
private boolean mDependencyMet = true; private boolean mDependencyMet = true;
private boolean mParentDependencyMet = true;
/** /**
* @see #setShouldDisableView(boolean) * @see #setShouldDisableView(boolean)
@@ -733,7 +734,7 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis
* @return True if this Preference is enabled, false otherwise. * @return True if this Preference is enabled, false otherwise.
*/ */
public boolean isEnabled() { public boolean isEnabled() {
return mEnabled && mDependencyMet; return mEnabled && mDependencyMet && mParentDependencyMet;
} }
/** /**
@@ -1259,7 +1260,24 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis
notifyChanged(); 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 * Checks whether this preference's dependents should currently be
* disabled. * disabled.

View File

@@ -62,4 +62,8 @@ public class PreferenceCategory extends PreferenceGroup {
return false; return false;
} }
@Override
public boolean shouldDisableDependents() {
return !super.isEnabled();
}
} }

View File

@@ -290,13 +290,14 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
} }
@Override @Override
public void setEnabled(boolean enabled) { public void notifyDependencyChange(boolean disableDependents) {
super.setEnabled(enabled); super.notifyDependencyChange(disableDependents);
// Dispatch to all contained preferences // Child preferences have an implicit dependency on their containing
// group. Dispatch dependency change to all contained preferences.
final int preferenceCount = getPreferenceCount(); final int preferenceCount = getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) { for (int i = 0; i < preferenceCount; i++) {
getPreference(i).setEnabled(enabled); getPreference(i).onParentChanged(this, disableDependents);
} }
} }