From 001e14a118e8d5c0fac5876439dc0356d7943eb7 Mon Sep 17 00:00:00 2001 From: Wink Saville Date: Thu, 27 Sep 2012 16:16:15 -0700 Subject: [PATCH] Fix an NPE in WifiSettings. Under stressful conditions, like the Monkey tests, getActivity() can return null. We assume this occurs when the fragment has shut down but asynchronous commands are returning results. This change adds appropriate null checks but assumes during normal operation the checks are not needed. Bug: 7152711 Change-Id: I7a3736ccead33738dab1a36e78ae1d8042db6e94 --- .../android/settings/wifi/WifiSettings.java | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index b28aef33498..61f8dcf2509 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -246,9 +246,12 @@ public class WifiSettings extends SettingsPreferenceFragment public void onSuccess() { } public void onFailure(int reason) { - Toast.makeText(getActivity(), - R.string.wifi_failed_connect_message, - Toast.LENGTH_SHORT).show(); + Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, + R.string.wifi_failed_connect_message, + Toast.LENGTH_SHORT).show(); + } } }; @@ -256,9 +259,12 @@ public class WifiSettings extends SettingsPreferenceFragment public void onSuccess() { } public void onFailure(int reason) { - Toast.makeText(getActivity(), - R.string.wifi_failed_save_message, - Toast.LENGTH_SHORT).show(); + Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, + R.string.wifi_failed_save_message, + Toast.LENGTH_SHORT).show(); + } } }; @@ -266,9 +272,12 @@ public class WifiSettings extends SettingsPreferenceFragment public void onSuccess() { } public void onFailure(int reason) { - Toast.makeText(getActivity(), - R.string.wifi_failed_forget_message, - Toast.LENGTH_SHORT).show(); + Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, + R.string.wifi_failed_forget_message, + Toast.LENGTH_SHORT).show(); + } } }; @@ -291,7 +300,7 @@ public class WifiSettings extends SettingsPreferenceFragment } final ConnectivityManager connectivity = (ConnectivityManager) - getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); + activity.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null && connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { super.onActivityCreated(savedInstanceState); @@ -307,7 +316,7 @@ public class WifiSettings extends SettingsPreferenceFragment if (mEnableNextOnConnection) { if (hasNextButton()) { final ConnectivityManager connectivity = (ConnectivityManager) - getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); + activity.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo info = connectivity.getNetworkInfo( ConnectivityManager.TYPE_WIFI); @@ -742,7 +751,10 @@ public class WifiSettings extends SettingsPreferenceFragment updateAccessPoints(); updateConnectionState(info.getDetailedState()); if (mAutoFinishOnConnection && info.isConnected()) { - getActivity().finish(); + Activity activity = getActivity(); + if (activity != null) { + activity.finish(); + } return; } } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { @@ -779,7 +791,10 @@ public class WifiSettings extends SettingsPreferenceFragment } private void updateWifiState(int state) { - getActivity().invalidateOptionsMenu(); + Activity activity = getActivity(); + if (activity != null) { + activity.invalidateOptionsMenu(); + } switch (state) { case WifiManager.WIFI_STATE_ENABLED: @@ -825,8 +840,11 @@ public class WifiSettings extends SettingsPreferenceFragment mRetry = 0; } else if (++mRetry >= 3) { mRetry = 0; - Toast.makeText(getActivity(), R.string.wifi_fail_to_scan, - Toast.LENGTH_LONG).show(); + Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, R.string.wifi_fail_to_scan, + Toast.LENGTH_LONG).show(); + } return; } sendEmptyMessageDelayed(0, WIFI_RESCAN_INTERVAL_MS);