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

Commit 5456b596 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Disconnect if the user cancels the no/partial connectivity dialog

If the user exits the no Internet or partial connectivity dialog
without taking any action, there is no longer any way to use the
network. So, disconnect the network.

Bug: 130766237
Test: clicking outside dialog disconnects network
Test: orientation changes do not disconnect network
Change-Id: I80c2c98c994dc01e53b32f40332b3f1bd03b6012
parent acac31e7
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ public final class WifiNoInternetDialog extends AlertActivity implements
    private ConnectivityManager.NetworkCallback mNetworkCallback;
    private CheckBox mAlwaysAllow;
    private String mAction;
    private boolean mButtonClicked;

    private boolean isKnownAction(Intent intent) {
        return intent.getAction().equals(ACTION_PROMPT_UNVALIDATED)
@@ -169,14 +170,31 @@ public final class WifiNoInternetDialog extends AlertActivity implements
            mCM.unregisterNetworkCallback(mNetworkCallback);
            mNetworkCallback = null;
        }

        // If the user exits the no Internet or partial connectivity dialog without taking any
        // action, disconnect the network, because once the dialog has been dismissed there is no
        // way to use the network.
        //
        // Unfortunately, AlertDialog does not seem to offer any good way to get an onCancel or
        // onDismiss callback. So we implement this ourselves.
        if (isFinishing() && !mButtonClicked) {
            if (ACTION_PROMPT_PARTIAL_CONNECTIVITY.equals(mAction)) {
                mCM.setAcceptPartialConnectivity(mNetwork, false /* accept */, false /* always */);
            } else if (ACTION_PROMPT_UNVALIDATED.equals(mAction)) {
                mCM.setAcceptUnvalidated(mNetwork, false /* accept */, false /* always */);
            }
        }
        super.onDestroy();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        if (which != BUTTON_NEGATIVE && which != BUTTON_POSITIVE) return;
        final boolean always = mAlwaysAllow.isChecked();
        final String what, action;

        mButtonClicked = true;

        if (ACTION_PROMPT_UNVALIDATED.equals(mAction)) {
            what = "NO_INTERNET";
            final boolean accept = (which == BUTTON_POSITIVE);