OSDN Git Service

Fix null pointer exception when surveys are turned off
authorSalvador Martinez <dehboxturtle@google.com>
Tue, 24 Jan 2017 23:16:52 +0000 (15:16 -0800)
committerSalvador Martinez <dehboxturtle@google.com>
Fri, 27 Jan 2017 18:29:10 +0000 (10:29 -0800)
In some conditions the survey provider could be null on
download completion which could lead to a NPE. This
has been addressed by not requiring an instance for
the removal of the receiver.

Test: RunSettingsRoboTests (master)
Bug: 33707203
Change-Id: Id1ab1a24c697fed8e4dd259682a088b50c35f38a
Merged-In: Icfb545697f24172db734dd7dad421796edf68186

src/com/android/settings/InstrumentedFragment.java
src/com/android/settings/InstrumentedPreferenceFragment.java
src/com/android/settings/overlay/SurveyFeatureProvider.java

index 4dedb98..2966800 100644 (file)
@@ -77,9 +77,7 @@ public abstract class InstrumentedFragment extends PreferenceFragment {
     public void onPause() {
         Activity activity = getActivity();
         if (mReceiver != null && activity != null) {
-            SurveyFeatureProvider provider =
-                    FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
-            provider.unregisterReceiver(activity, mReceiver);
+            SurveyFeatureProvider.unregisterReceiver(activity, mReceiver);
             mReceiver = null;
         }
 
index 1b3d5cd..ba6cb79 100644 (file)
@@ -66,9 +66,7 @@ public abstract class InstrumentedPreferenceFragment extends PreferenceFragment
     public void onPause() {
         Activity activity = getActivity();
         if (mReceiver != null && activity != null) {
-            SurveyFeatureProvider provider =
-                    FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
-            provider.unregisterReceiver(activity, mReceiver);
+            SurveyFeatureProvider.unregisterReceiver(activity, mReceiver);
             mReceiver = null;
         }
 
index 907bed8..416a602 100644 (file)
@@ -20,6 +20,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.IntentFilter;
 import android.support.annotation.Nullable;
+import android.support.v4.content.LocalBroadcastManager;
 
 /**
  * An interface for classes wishing to provide the ability to serve surveys to implement.
@@ -81,5 +82,11 @@ public interface SurveyFeatureProvider {
      * after a call to {@link #createAndRegisterReceiver(Activity)}.
      * @param activity The activity that was used to register the BroadcastReceiver.
      */
-    void unregisterReceiver(Activity activity, BroadcastReceiver receiver);
+    static void unregisterReceiver(Activity activity, BroadcastReceiver receiver) {
+        if (activity == null) {
+            throw new IllegalStateException("Cannot unregister receiver if activity is null");
+        }
+
+        LocalBroadcastManager.getInstance(activity).unregisterReceiver(receiver);
+    }
 }