Merge "[Wi-Fi] Fix exception when WifiTracker2 callbacks to Wi-Fi Settings" into rvc-dev
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 80e5706..659ada4 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -699,4 +699,9 @@
         }
         getActivity().setResult(result);
     }
+
+    protected boolean isFinishingOrDestroyed() {
+        final Activity activity = getActivity();
+        return activity == null || activity.isFinishing() || activity.isDestroyed();
+    }
 }
diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index b94994e..13ccdc3 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -674,11 +674,17 @@
 
     @Override
     public void onNumSavedNetworksChanged() {
+        if (isFinishingOrDestroyed()) {
+            return;
+        }
         setAdditionalSettingsSummaries();
     }
 
     @Override
     public void onNumSavedSubscriptionsChanged() {
+        if (isFinishingOrDestroyed()) {
+            return;
+        }
         setAdditionalSettingsSummaries();
     }
 
@@ -993,12 +999,10 @@
 
         @Override
         public void onFailure(int reason) {
-            final Activity activity = getActivity();
-            if (isFisishingOrDestroyed(activity)) {
+            if (isFinishingOrDestroyed()) {
                 return;
             }
-
-            Toast.makeText(activity, R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
+            Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
                     .show();
         }
     };
@@ -1020,8 +1024,7 @@
 
         @Override
         public void onConnectResult(@ConnectStatus int status) {
-            final Activity activity = getActivity();
-            if (isFisishingOrDestroyed(activity)) {
+            if (isFinishingOrDestroyed()) {
                 return;
             }
 
@@ -1041,10 +1044,6 @@
         }
     }
 
-    private boolean isFisishingOrDestroyed(Activity activity) {
-        return activity == null || activity.isFinishing() || activity.isDestroyed();
-    }
-
     private void launchConfigNewNetworkFragment(WifiEntry wifiEntry) {
         final Bundle bundle = new Bundle();
         bundle.putString(WifiNetworkDetailsFragment2.KEY_CHOSEN_WIFIENTRY_KEY,
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
index 0145bb4..c70f077 100644
--- a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
@@ -153,6 +153,9 @@
 
     @Override
     public void onSavedWifiEntriesChanged() {
+        if (isFinishingOrDestroyed()) {
+            return;
+        }
         final PreferenceScreen screen = getPreferenceScreen();
         use(SavedAccessPointsPreferenceController2.class)
                 .displayPreference(screen, mSavedNetworkTracker.getSavedWifiEntries());
@@ -160,6 +163,9 @@
 
     @Override
     public void onSubscriptionWifiEntriesChanged() {
+        if (isFinishingOrDestroyed()) {
+            return;
+        }
         final PreferenceScreen screen = getPreferenceScreen();
         use(SubscribedAccessPointsPreferenceController2.class)
                 .displayPreference(screen, mSavedNetworkTracker.getSubscriptionWifiEntries());
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
index c85ea49..b4aea4f 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
@@ -280,4 +280,24 @@
 
         verify(mWifiSettings2, times(1)).startActivityForResult(any(), anyInt());
     }
+
+    @Test
+    public void onNumSavedNetworksChanged_isFinishing_ShouldNotCrash() {
+        final FragmentActivity activity = mock(FragmentActivity.class);
+        when(activity.isFinishing()).thenReturn(true);
+        when(mWifiSettings2.getActivity()).thenReturn(activity);
+        when(mWifiSettings2.getContext()).thenReturn(null);
+
+        mWifiSettings2.onNumSavedNetworksChanged();
+    }
+
+    @Test
+    public void onNumSavedSubscriptionsChanged_isFinishing_ShouldNotCrash() {
+        final FragmentActivity activity = mock(FragmentActivity.class);
+        when(activity.isFinishing()).thenReturn(true);
+        when(mWifiSettings2.getActivity()).thenReturn(activity);
+        when(mWifiSettings2.getContext()).thenReturn(null);
+
+        mWifiSettings2.onNumSavedSubscriptionsChanged();
+    }
 }