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
This commit is contained in:
Lorenzo Colitti
2019-06-07 15:18:21 +09:00
parent acac31e75a
commit 5456b596a2

View File

@@ -52,6 +52,7 @@ public final class WifiNoInternetDialog extends AlertActivity implements
private ConnectivityManager.NetworkCallback mNetworkCallback; private ConnectivityManager.NetworkCallback mNetworkCallback;
private CheckBox mAlwaysAllow; private CheckBox mAlwaysAllow;
private String mAction; private String mAction;
private boolean mButtonClicked;
private boolean isKnownAction(Intent intent) { private boolean isKnownAction(Intent intent) {
return intent.getAction().equals(ACTION_PROMPT_UNVALIDATED) return intent.getAction().equals(ACTION_PROMPT_UNVALIDATED)
@@ -169,14 +170,31 @@ public final class WifiNoInternetDialog extends AlertActivity implements
mCM.unregisterNetworkCallback(mNetworkCallback); mCM.unregisterNetworkCallback(mNetworkCallback);
mNetworkCallback = null; 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(); super.onDestroy();
} }
@Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (which != BUTTON_NEGATIVE && which != BUTTON_POSITIVE) return; if (which != BUTTON_NEGATIVE && which != BUTTON_POSITIVE) return;
final boolean always = mAlwaysAllow.isChecked(); final boolean always = mAlwaysAllow.isChecked();
final String what, action; final String what, action;
mButtonClicked = true;
if (ACTION_PROMPT_UNVALIDATED.equals(mAction)) { if (ACTION_PROMPT_UNVALIDATED.equals(mAction)) {
what = "NO_INTERNET"; what = "NO_INTERNET";
final boolean accept = (which == BUTTON_POSITIVE); final boolean accept = (which == BUTTON_POSITIVE);