OSDN Git Service

Fixed the crash on screen rotation
authorLifu Tang <lifu@google.com>
Tue, 3 Sep 2013 20:47:02 +0000 (13:47 -0700)
committerLifu Tang <lifu@google.com>
Tue, 3 Sep 2013 20:53:16 +0000 (13:53 -0700)
- Fix b/10607566

Change-Id: I078e59af2a76deb272b870d7708ee4148c68590e

src/com/android/settings/location/LocationSettingsBase.java

index 81e841a..9ceefe7 100644 (file)
@@ -38,12 +38,29 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment
 
     private static final int LOADER_ID_LOCATION_MODE = 1;
 
+    /**
+     * Whether the fragment is actively running.
+     */
+    private boolean mActive = false;
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         getLoaderManager().initLoader(LOADER_ID_LOCATION_MODE, null, this);
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        mActive = true;
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mActive = false;
+    }
+
     /** Called when location mode has changed. */
     public abstract void onModeChanged(int mode, boolean restricted);
 
@@ -61,7 +78,9 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment
             }
             mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
                     Settings.Secure.LOCATION_MODE_OFF);
-            onModeChanged(mode, true);
+            if (mActive) {
+                onModeChanged(mode, true);
+            }
             return;
         }
         Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, mode);
@@ -69,9 +88,11 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment
     }
 
     public void refreshLocationMode() {
-        int mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
-                Settings.Secure.LOCATION_MODE_OFF);
-        onModeChanged(mode, isRestricted());
+        if (mActive) {
+            int mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
+                    Settings.Secure.LOCATION_MODE_OFF);
+            onModeChanged(mode, isRestricted());
+        }
     }
 
     @Override