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

Commit 02f56803 authored by Alan Viverette's avatar Alan Viverette
Browse files

Add implicit parent dependency for Preferences

Also removes unused dependency change listener interface.

BUG: 10117838
Change-Id: I03f0eb37e7ba69942f7997a8b32adb38a3dee0bd
parent b6c38e9d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18618,6 +18618,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);
        }
    }