Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59bbba7c authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

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

parents 439c9f5b 02f56803
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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();
+0 −32
Original line number Diff line number Diff line
/*
 * 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);
}
+21 −3
Original line number Diff line number Diff line
@@ -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;
    }

    /**
@@ -1260,6 +1261,23 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis
        }
    }

    /**
     * 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.
+4 −0
Original line number Diff line number Diff line
@@ -62,4 +62,8 @@ public class PreferenceCategory extends PreferenceGroup {
        return false;
    }
    
    @Override
    public boolean shouldDisableDependents() {
        return !super.isEnabled();
    }
}
+6 −5
Original line number Diff line number Diff line
@@ -290,13 +290,14 @@ public abstract class PreferenceGroup extends Preference implements GenericInfla
    }

    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
    public void notifyDependencyChange(boolean disableDependents) {
        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();
        for (int i = 0; i < preferenceCount; i++) {
            getPreference(i).setEnabled(enabled);
            getPreference(i).onParentChanged(this, disableDependents);
        }
    }