From da53eca79e02ac70761c379f9f2cb3babce9e79d Mon Sep 17 00:00:00 2001 From: Michael Chan <> Date: Fri, 27 Mar 2009 17:46:36 -0700 Subject: [PATCH] AI 143298: am: CL 143150 Fixed the problem where setEnabled(false) has no effect from onResume(). The problem was that the Preference widget was reenabled when its dependency was in enabled state. The enabled field was basically overloaded. The fix was to add an additional field to keep track of whether its dependencies were met. Original author: chanm Merged from: //branches/donutburger/... Automated import of CL 143298 --- core/java/android/preference/Preference.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index a2554388651ad..fc395732f47e1 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -92,6 +92,7 @@ public class Preference implements Comparable, OnDependencyChangeLis private boolean mPersistent = true; private String mDependencyKey; private Object mDefaultValue; + private boolean mDependencyMet = true; /** * @see #setShouldDisableView(boolean) @@ -594,7 +595,7 @@ public class Preference implements Comparable, OnDependencyChangeLis * @return True if this Preference is enabled, false otherwise. */ public boolean isEnabled() { - return mEnabled; + return mEnabled && mDependencyMet; } /** @@ -1096,7 +1097,14 @@ public class Preference implements Comparable, OnDependencyChangeLis * @param disableDependent Set true to disable this Preference. */ public void onDependencyChanged(Preference dependency, boolean disableDependent) { - setEnabled(!disableDependent); + if (mDependencyMet == disableDependent) { + mDependencyMet = !disableDependent; + + // Enabled state can change dependent preferences' states, so notify + notifyDependencyChange(shouldDisableDependents()); + + notifyChanged(); + } } /**