Merge "Disconnect if the user cancels the no/partial connectivity dialog" into qt-dev
diff --git a/src/com/android/settings/wifi/WifiNoInternetDialog.java b/src/com/android/settings/wifi/WifiNoInternetDialog.java
index e33cab6..eb42097 100644
--- a/src/com/android/settings/wifi/WifiNoInternetDialog.java
+++ b/src/com/android/settings/wifi/WifiNoInternetDialog.java
@@ -52,6 +52,7 @@
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 @@
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);