diff options
author | Tobias Brunner <tobias@strongswan.org> | 2017-06-23 10:35:08 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2017-07-03 10:39:26 +0200 |
commit | 1265b353d4634892c9c97da19f2f197466891ba6 (patch) | |
tree | 735aa686898710d2b55ae5c06058bada1250b768 /src/frontends | |
parent | d0ed8ee89e150cd063185d724a7a7e88e4d9dc25 (diff) | |
download | strongswan-1265b353d4634892c9c97da19f2f197466891ba6.tar.bz2 strongswan-1265b353d4634892c9c97da19f2f197466891ba6.tar.xz |
android: Allow disconnecting via MainActivity but display a confirmation dialog
Diffstat (limited to 'src/frontends')
9 files changed, 65 insertions, 6 deletions
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java index ecc69aed8..cfed2e384 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java @@ -365,10 +365,10 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe builder.setContentTitle(getString(s)); if (!publicVersion) { - Intent intent = new Intent(getApplicationContext(), CharonVpnService.class); - intent.setAction(CharonVpnService.DISCONNECT_ACTION); - PendingIntent pending = PendingIntent.getService(getApplicationContext(), 0, intent, - PendingIntent.FLAG_ONE_SHOT); + Intent intent = new Intent(getApplicationContext(), MainActivity.class); + intent.setAction(MainActivity.DISCONNECT); + PendingIntent pending = PendingIntent.getActivity(getApplicationContext(), 0, intent, + PendingIntent.FLAG_UPDATE_CURRENT); builder.addAction(R.drawable.ic_notification_disconnect, getString(R.string.disconnect), pending); builder.setContentText(name); builder.setPublicVersion(buildNotification(true)); diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java index 5ba1061c2..76aef7258 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java @@ -2,7 +2,7 @@ * Copyright (C) 2012-2017 Tobias Brunner * Copyright (C) 2012 Giuliano Grassi * Copyright (C) 2012 Ralf Sager - * Hochschule fuer Technik Rapperswil + * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -58,6 +58,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec { public static final String CONTACT_EMAIL = "android@strongswan.org"; public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE"; + public static final String DISCONNECT = "org.strongswan.android.action.DISCONNECT"; public static final String EXTRA_VPN_PROFILE_ID = "org.strongswan.android.VPN_PROFILE_ID"; /** * Use "bring your own device" (BYOD) features @@ -67,6 +68,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec private static final String PROFILE_NAME = "org.strongswan.android.MainActivity.PROFILE_NAME"; private static final String PROFILE_REQUIRES_PASSWORD = "org.strongswan.android.MainActivity.REQUIRES_PASSWORD"; private static final String PROFILE_RECONNECT = "org.strongswan.android.MainActivity.RECONNECT"; + private static final String PROFILE_DISCONNECT = "org.strongswan.android.MainActivity.DISCONNECT"; private static final String DIALOG_TAG = "Dialog"; private Bundle mProfileInfo; @@ -88,6 +90,10 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec { startVpnProfile(getIntent()); } + else if (DISCONNECT.equals(getIntent().getAction())) + { + disconnect(); + } } }; @@ -132,6 +138,10 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec { startVpnProfile(intent); } + else if (DISCONNECT.equals(intent.getAction())) + { + disconnect(); + } } @Override @@ -304,6 +314,25 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec } /** + * Disconnect the current connection, if any (silently ignored if there is no connection). + */ + private void disconnect() + { + removeFragmentByTag(DIALOG_TAG); + + if (mService != null && (mService.getState() == State.CONNECTED || mService.getState() == State.CONNECTING)) + { + Bundle args = new Bundle(); + args.putBoolean(PROFILE_DISCONNECT, true); + + ConfirmationDialog dialog = new ConfirmationDialog(); + dialog.setArguments(args); + dialog.show(this.getSupportFragmentManager(), DIALOG_TAG); + return; + } + } + + /** * Class that loads the cached CA certificates. */ private class LoadCertificatesTask extends AsyncTask<Void, Void, TrustedCertificateManager> @@ -364,6 +393,12 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec message = R.string.vpn_profile_connected; button = R.string.reconnect; } + else if (profileInfo.getBoolean(PROFILE_DISCONNECT)) + { + title = R.string.disconnect_question; + message = R.string.disconnect_active_connection; + button = R.string.disconnect; + } return new AlertDialog.Builder(getActivity()) .setIcon(icon) @@ -375,7 +410,17 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec public void onClick(DialogInterface dialog, int whichButton) { MainActivity activity = (MainActivity)getActivity(); - activity.startVpnProfile(profileInfo); + if (profileInfo.getBoolean(PROFILE_DISCONNECT)) + { + if (activity.mService != null) + { + activity.mService.disconnect(); + } + } + else + { + activity.startVpnProfile(profileInfo); + } } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() diff --git a/src/frontends/android/app/src/main/res/values-de/strings.xml b/src/frontends/android/app/src/main/res/values-de/strings.xml index 34fe84609..bc6927d51 100644 --- a/src/frontends/android/app/src/main/res/values-de/strings.xml +++ b/src/frontends/android/app/src/main/res/values-de/strings.xml @@ -166,6 +166,8 @@ <string name="reconnect">Neu verbinden</string> <string name="connect_profile_question">Verbinde %1$s?</string> <string name="replaces_active_connection">Dies ersetzt die aktuelle VPN Verbindung!</string> + <string name="disconnect_question">VPN Verbindung trennen?</string> + <string name="disconnect_active_connection">Dies trennt die aktuelle VPN Verbindung!</string> <string name="connect">Verbinden</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values-pl/strings.xml b/src/frontends/android/app/src/main/res/values-pl/strings.xml index a87381aa1..424837adf 100644 --- a/src/frontends/android/app/src/main/res/values-pl/strings.xml +++ b/src/frontends/android/app/src/main/res/values-pl/strings.xml @@ -166,6 +166,8 @@ <string name="reconnect">Połączyć ponownie</string> <string name="connect_profile_question">Połącz %1$s?</string> <string name="replaces_active_connection">To zastąpi aktywne połączenie VPN!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">Połącz</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values-ru/strings.xml b/src/frontends/android/app/src/main/res/values-ru/strings.xml index 0ce54e56e..a53772014 100644 --- a/src/frontends/android/app/src/main/res/values-ru/strings.xml +++ b/src/frontends/android/app/src/main/res/values-ru/strings.xml @@ -163,6 +163,8 @@ <string name="reconnect">Переподключить</string> <string name="connect_profile_question">Подключить %1$s?</string> <string name="replaces_active_connection">Это заменит ваше текущее VPN соединение!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">Соединить</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values-ua/strings.xml b/src/frontends/android/app/src/main/res/values-ua/strings.xml index 5b769b787..4d3600952 100644 --- a/src/frontends/android/app/src/main/res/values-ua/strings.xml +++ b/src/frontends/android/app/src/main/res/values-ua/strings.xml @@ -164,6 +164,8 @@ <string name="reconnect">Перепідключитися</string> <string name="connect_profile_question">Підключити %1$s?</string> <string name="replaces_active_connection">Ця дія замінить ваше поточне VPN з\'єднання!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">Підключити</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml b/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml index 4202c5f84..606bd2783 100644 --- a/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml @@ -163,6 +163,8 @@ <string name="reconnect">重连</string> <string name="connect_profile_question">是否连接%1$s?</string> <string name="replaces_active_connection">这将覆盖您当前活跃的VPN连接!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">连接</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml b/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml index 6c0e104b5..52f21f8da 100644 --- a/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml @@ -163,6 +163,8 @@ <string name="reconnect">重新連線</string> <string name="connect_profile_question">是否連線%1$s?</string> <string name="replaces_active_connection">這將會覆蓋您當前運作的VPN連線!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">連線</string> </resources> diff --git a/src/frontends/android/app/src/main/res/values/strings.xml b/src/frontends/android/app/src/main/res/values/strings.xml index f99f7dea5..4ee6be390 100644 --- a/src/frontends/android/app/src/main/res/values/strings.xml +++ b/src/frontends/android/app/src/main/res/values/strings.xml @@ -166,6 +166,8 @@ <string name="reconnect">Reconnect</string> <string name="connect_profile_question">Connect %1$s?</string> <string name="replaces_active_connection">This will replace your active VPN connection!</string> + <string name="disconnect_question">Disconnect VPN?</string> + <string name="disconnect_active_connection">This will disconnect the active VPN connection!</string> <string name="connect">Connect</string> </resources> |