Merge "Add implicit parent dependency for Preferences" into klp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
59bbba7c37
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -62,4 +62,8 @@ public class PreferenceCategory extends PreferenceGroup {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldDisableDependents() {
|
||||
return !super.isEnabled();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user