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
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index f32f8ba..2c290b1 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -113,16 +113,24 @@
@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;