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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user