am 737fc5ec: am 0147d813: am d83b3c2a: Fix bug #16957601 Stability: ISE in Settings: Observer com.android.settings. SettingsPreferenceFragment@273c8fdb was not registered

* commit '737fc5ec9e7509a5336be601674a1c3590c86ca8':
  Fix bug #16957601 Stability: ISE in Settings: Observer com.android.settings. SettingsPreferenceFragment$1@273c8fdb was not registered
This commit is contained in:
Fabrice Di Meglio
2014-08-15 11:42:40 +00:00
committed by Android Git Automerger

View File

@@ -66,7 +66,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
private boolean mPreferenceHighlighted = false;
private Drawable mHighlightDrawable;
private Object mRegisterLock = new Object();
private ListAdapter mCurrentRootAdapter;
private boolean mIsDataSetObserverRegistered = false;
private DataSetObserver mDataSetObserver = new DataSetObserver() {
@Override
@@ -146,6 +146,11 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
registerObserverIfNeeded();
}
@Override
protected void onUnbindPreferences() {
unregisterObserverIfNeeded();
}
@Override
public void onStop() {
super.onStop();
@@ -154,20 +159,23 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
}
public void registerObserverIfNeeded() {
synchronized (mRegisterLock) {
if (!mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = true;
if (!mIsDataSetObserverRegistered) {
if (mCurrentRootAdapter != null) {
mCurrentRootAdapter.unregisterDataSetObserver(mDataSetObserver);
}
mCurrentRootAdapter = getPreferenceScreen().getRootAdapter();
mCurrentRootAdapter.registerDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = true;
}
}
public void unregisterObserverIfNeeded() {
synchronized (mRegisterLock) {
if (mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = false;
if (mIsDataSetObserverRegistered) {
if (mCurrentRootAdapter != null) {
mCurrentRootAdapter.unregisterDataSetObserver(mDataSetObserver);
mCurrentRootAdapter = null;
}
mIsDataSetObserverRegistered = false;
}
}