Fix bug #16660405 Stability: ISE in Settings: Observer ...

com.android.settings.SettingsPreferenceFragment$1@3c1d9ecb was not registered

- use a monitor to control registering / unregistering

Change-Id: Id66dd698abf92643c97938e2091c3be38e6b78bd
This commit is contained in:
Fabrice Di Meglio
2014-07-29 16:02:22 -07:00
parent d5ec63ad51
commit 7c435f6b44

View File

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