Handle two new err codes:
REMOTE_PPP_HUNG_UP and PPP_NEGOTIATION_FAILED.
Also refactor the dialog creation code to directly use the err code as
the dialog id and make it easier to tell which type of dialog (reconnect
or edit) is invoked for which err code.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bd6a078..9c0c30d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1883,6 +1883,8 @@
<string name="vpn_secret_not_set_dialog_msg">One or more secrets are missing in this VPN configuration. Do you want to check your secret setting?</string>
<string name="vpn_auth_error_dialog_msg">The username or password you entered is incorrect. Do you want to try again?</string>
<string name="vpn_remote_hung_up_error_dialog_msg">Server hung up. The username or password you entered could be incorrect. Do you want to try again?</string>
+ <string name="vpn_remote_ppp_hung_up_error_dialog_msg">Server hung up. It is possible that you are behind a firewall that prevents you from connecting to the server. Do you want to try again?</string>
+ <string name="vpn_ppp_negotiation_failed_dialog_msg">Server negotiation failed. The server may not agree with your encryption option. Do you want to check your encryption setting?</string>
<!-- VPN type selection activity title -->
<string name="vpn_type_title">Add VPN</string>
diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java
index 8cef7f8..61b2701 100644
--- a/src/com/android/settings/vpn/VpnSettings.java
+++ b/src/com/android/settings/vpn/VpnSettings.java
@@ -104,16 +104,10 @@
private static final int CONNECT_BUTTON = DialogInterface.BUTTON1;
private static final int OK_BUTTON = DialogInterface.BUTTON1;
- private static final int DIALOG_CONNECT = 1;
- private static final int DIALOG_RECONNECT = 2;
- private static final int DIALOG_AUTH_ERROR = 3;
- private static final int DIALOG_UNKNOWN_SERVER = 4;
- private static final int DIALOG_SECRET_NOT_SET = 5;
- private static final int DIALOG_CHALLENGE_ERROR = 6;
- private static final int DIALOG_REMOTE_HUNG_UP_ERROR = 7;
- private static final int DIALOG_CONNECTION_LOST = 8;
+ private static final int DIALOG_CONNECT = VpnManager.VPN_ERROR_LARGEST + 1;
+ private static final int DIALOG_SECRET_NOT_SET = DIALOG_CONNECT + 1;
- private static final int NO_ERROR = 0;
+ private static final int NO_ERROR = VpnManager.VPN_ERROR_NO_ERROR;
private static final String NAMESPACE_VPN = "vpn";
private static final String KEY_PREFIX_IPSEC_PSK = "ipsk000";
@@ -201,29 +195,17 @@
case DIALOG_CONNECT:
return createConnectDialog();
- case DIALOG_RECONNECT:
- return createReconnectDialog();
-
- case DIALOG_AUTH_ERROR:
- return createAuthErrorDialog();
-
- case DIALOG_REMOTE_HUNG_UP_ERROR:
- return createRemoteHungUpErrorDialog();
-
- case DIALOG_CHALLENGE_ERROR:
- return createChallengeErrorDialog();
-
- case DIALOG_UNKNOWN_SERVER:
- return createUnknownServerDialog();
-
case DIALOG_SECRET_NOT_SET:
return createSecretNotSetDialog();
- case DIALOG_CONNECTION_LOST:
- return createConnectionLostDialog();
+ case VpnManager.VPN_ERROR_CHALLENGE:
+ case VpnManager.VPN_ERROR_UNKNOWN_SERVER:
+ case VpnManager.VPN_ERROR_PPP_NEGOTIATION_FAILED:
+ return createEditDialog(id);
default:
- return super.onCreateDialog(id);
+ Log.d(TAG, "create reconnect dialog for event " + id);
+ return createReconnectDialog(id);
}
}
@@ -245,34 +227,50 @@
.create();
}
- private Dialog createReconnectDialog() {
- return createCommonDialogBuilder()
- .setMessage(R.string.vpn_confirm_reconnect)
- .create();
+ private Dialog createReconnectDialog(int id) {
+ int msgId;
+ switch (id) {
+ case VpnManager.VPN_ERROR_AUTH:
+ msgId = R.string.vpn_auth_error_dialog_msg;
+ break;
+
+ case VpnManager.VPN_ERROR_REMOTE_HUNG_UP:
+ msgId = R.string.vpn_remote_hung_up_error_dialog_msg;
+ break;
+
+ case VpnManager.VPN_ERROR_CONNECTION_LOST:
+ msgId = R.string.vpn_reconnect_from_lost;
+ break;
+
+ case VpnManager.VPN_ERROR_REMOTE_PPP_HUNG_UP:
+ msgId = R.string.vpn_remote_ppp_hung_up_error_dialog_msg;
+ break;
+
+ default:
+ msgId = R.string.vpn_confirm_reconnect;
+ }
+ return createCommonDialogBuilder().setMessage(msgId).create();
}
- private Dialog createAuthErrorDialog() {
- return createCommonDialogBuilder()
- .setMessage(R.string.vpn_auth_error_dialog_msg)
- .create();
- }
+ private Dialog createEditDialog(int id) {
+ int msgId;
+ switch (id) {
+ case VpnManager.VPN_ERROR_CHALLENGE:
+ msgId = R.string.vpn_challenge_error_dialog_msg;
+ break;
- private Dialog createRemoteHungUpErrorDialog() {
- return createCommonDialogBuilder()
- .setMessage(R.string.vpn_remote_hung_up_error_dialog_msg)
- .create();
- }
+ case VpnManager.VPN_ERROR_UNKNOWN_SERVER:
+ msgId = R.string.vpn_unknown_server_dialog_msg;
+ break;
- private Dialog createChallengeErrorDialog() {
- return createCommonEditDialogBuilder()
- .setMessage(R.string.vpn_challenge_error_dialog_msg)
- .create();
- }
+ case VpnManager.VPN_ERROR_PPP_NEGOTIATION_FAILED:
+ msgId = R.string.vpn_ppp_negotiation_failed_dialog_msg;
+ break;
- private Dialog createUnknownServerDialog() {
- return createCommonEditDialogBuilder()
- .setMessage(R.string.vpn_unknown_server_dialog_msg)
- .create();
+ default:
+ return null;
+ }
+ return createCommonEditDialogBuilder().setMessage(msgId).create();
}
private Dialog createSecretNotSetDialog() {
@@ -299,12 +297,6 @@
});
}
- private Dialog createConnectionLostDialog() {
- return createCommonDialogBuilder()
- .setMessage(R.string.vpn_reconnect_from_lost)
- .create();
- }
-
private AlertDialog.Builder createCommonDialogBuilder() {
return new AlertDialog.Builder(this)
.setTitle(android.R.string.dialog_alert_title)
@@ -748,36 +740,12 @@
case IDLE:
assert(mActiveProfile == p);
- switch (mConnectingErrorCode) {
- case NO_ERROR:
- onIdle();
- break;
-
- case VpnManager.VPN_ERROR_AUTH:
- showDialog(DIALOG_AUTH_ERROR);
- break;
-
- case VpnManager.VPN_ERROR_REMOTE_HUNG_UP:
- showDialog(DIALOG_REMOTE_HUNG_UP_ERROR);
- break;
-
- case VpnManager.VPN_ERROR_CHALLENGE:
- showDialog(DIALOG_CHALLENGE_ERROR);
- break;
-
- case VpnManager.VPN_ERROR_UNKNOWN_SERVER:
- showDialog(DIALOG_UNKNOWN_SERVER);
- break;
-
- case VpnManager.VPN_ERROR_CONNECTION_LOST:
- showDialog(DIALOG_CONNECTION_LOST);
- break;
-
- default:
- showDialog(DIALOG_RECONNECT);
- break;
+ if (mConnectingErrorCode == NO_ERROR) {
+ onIdle();
+ } else {
+ showDialog(mConnectingErrorCode);
+ mConnectingErrorCode = NO_ERROR;
}
- mConnectingErrorCode = NO_ERROR;
break;
}
}