From 405febf56adbb2dfb3b2c68d8e76cc5212b9d683 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Thu, 24 Apr 2014 10:13:59 -0700 Subject: [PATCH] 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 --- .../settings/SettingsPreferenceFragment.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index f32f8ba7a68..2c290b10545 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -113,16 +113,24 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di @Override protected void onBindPreferences() { + registerObserverIfNeeded(); + } + + @Override + public void onStop() { + super.onStop(); + + unregisterObserverIfNeeded(); + } + + public void registerObserverIfNeeded() { if (!mIsDataSetObserverRegistered) { getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); mIsDataSetObserverRegistered = true; } } - @Override - public void onDestroy() { - super.onDestroy(); - + public void unregisterObserverIfNeeded() { if (mIsDataSetObserverRegistered) { getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); mIsDataSetObserverRegistered = false;