Merge "Fix bug #16660405 Stability: ISE in Settings: Observer ... com.android.settings.SettingsPreferenceFragment$1@3c1d9ecb was not registered" into lmp-dev

This commit is contained in:
Fabrice Di Meglio
2014-07-29 23:07:27 +00:00
committed by Android (Google) Code Review

View File

@@ -66,6 +66,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
private boolean mPreferenceHighlighted = false; private boolean mPreferenceHighlighted = false;
private Drawable mHighlightDrawable; private Drawable mHighlightDrawable;
private Object mRegisterLock = new Object();
private boolean mIsDataSetObserverRegistered = false; private boolean mIsDataSetObserverRegistered = false;
private DataSetObserver mDataSetObserver = new DataSetObserver() { private DataSetObserver mDataSetObserver = new DataSetObserver() {
@Override @Override
@@ -153,18 +154,22 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
} }
public void registerObserverIfNeeded() { public void registerObserverIfNeeded() {
synchronized (mRegisterLock) {
if (!mIsDataSetObserverRegistered) { if (!mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = true; mIsDataSetObserverRegistered = true;
} }
} }
}
public void unregisterObserverIfNeeded() { public void unregisterObserverIfNeeded() {
synchronized (mRegisterLock) {
if (mIsDataSetObserverRegistered) { if (mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = false; mIsDataSetObserverRegistered = false;
} }
} }
}
public void highlightPreferenceIfNeeded() { public void highlightPreferenceIfNeeded() {
if (isAdded() && !mPreferenceHighlighted &&!TextUtils.isEmpty(mPreferenceKey)) { if (isAdded() && !mPreferenceHighlighted &&!TextUtils.isEmpty(mPreferenceKey)) {