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;