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
@@ -303,6 +313,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.
*/
@@ -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 @@
Neu verbinden
Verbinde %1$s?
Dies ersetzt die aktuelle VPN Verbindung!
+ VPN Verbindung trennen?
+ Dies trennt die aktuelle VPN Verbindung!
Verbinden
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 @@
Połączyć ponownie
Połącz %1$s?
To zastąpi aktywne połączenie VPN!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
Połącz
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 @@
Переподключить
Подключить %1$s?
Это заменит ваше текущее VPN соединение!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
Соединить
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 @@
Перепідключитися
Підключити %1$s?
Ця дія замінить ваше поточне VPN з\'єднання!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
Підключити
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 @@
重连
是否连接%1$s?
这将覆盖您当前活跃的VPN连接!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
连接
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 @@
重新連線
是否連線%1$s?
這將會覆蓋您當前運作的VPN連線!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
連線
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 @@
Reconnect
Connect %1$s?
This will replace your active VPN connection!
+ Disconnect VPN?
+ This will disconnect the active VPN connection!
Connect