Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 001e14a1 authored by Wink Saville's avatar Wink Saville
Browse files

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
parent 8bea3c3f
Loading
Loading
Loading
Loading
+33 −15
Original line number Diff line number Diff line
@@ -246,30 +246,39 @@ public class WifiSettings extends SettingsPreferenceFragment
                                   public void onSuccess() {
                                   }
                                   public void onFailure(int reason) {
                                        Toast.makeText(getActivity(),
                                       Activity activity = getActivity();
                                       if (activity != null) {
                                           Toast.makeText(activity,
                                                R.string.wifi_failed_connect_message,
                                                Toast.LENGTH_SHORT).show();
                                       }
                                   }
                               };

        mSaveListener = new WifiManager.ActionListener() {
                                public void onSuccess() {
                                }
                                public void onFailure(int reason) {
                                    Toast.makeText(getActivity(),
                                    Activity activity = getActivity();
                                    if (activity != null) {
                                        Toast.makeText(activity,
                                            R.string.wifi_failed_save_message,
                                            Toast.LENGTH_SHORT).show();
                                    }
                                }
                            };

        mForgetListener = new WifiManager.ActionListener() {
                                   public void onSuccess() {
                                   }
                                   public void onFailure(int reason) {
                                        Toast.makeText(getActivity(),
                                       Activity activity = getActivity();
                                       if (activity != null) {
                                           Toast.makeText(activity,
                                               R.string.wifi_failed_forget_message,
                                               Toast.LENGTH_SHORT).show();
                                       }
                                   }
                               };

        if (savedInstanceState != null
@@ -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,
                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);