Merge "Add implicit parent dependency for Preferences" into klp-dev

This commit is contained in:
Alan Viverette
2013-08-20 23:28:16 +00:00
committed by Android (Google) Code Review
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 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();

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_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.

View File

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

View File

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