Fix bug #14288652 Settings crash on hitting back key from Tap and Pay screen

Gasp ... the Observer registering/unregistering code was not totally correct as
we were unregistering on a different RootAdapter.

- refactor the code for registering / unregistering the Observer
- unregister when the Fragment is stopped thru onStop().

Change-Id: I036eacd87c80fd2c9dedca705fb94a57a0c9a21d
This commit is contained in:
Fabrice Di Meglio
2014-04-24 10:13:59 -07:00
parent 63bbb8e4fe
commit 405febf56a

View File

@@ -113,16 +113,24 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
@Override @Override
protected void onBindPreferences() { protected void onBindPreferences() {
registerObserverIfNeeded();
}
@Override
public void onStop() {
super.onStop();
unregisterObserverIfNeeded();
}
public void registerObserverIfNeeded() {
if (!mIsDataSetObserverRegistered) { if (!mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = true; mIsDataSetObserverRegistered = true;
} }
} }
@Override public void unregisterObserverIfNeeded() {
public void onDestroy() {
super.onDestroy();
if (mIsDataSetObserverRegistered) { if (mIsDataSetObserverRegistered) {
getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver);
mIsDataSetObserverRegistered = false; mIsDataSetObserverRegistered = false;