summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2016-11-15 23:19:51 -0500
committerArne Schwabe <arne@rfc2549.org>2016-11-15 23:19:51 -0500
commitfc24fcf01e55d51b091c451f69e441ad2115af87 (patch)
treee124ff7e998b176b207226ec35bfe4956e12e109
parent205f6900134544fcd3841e90d97aab18fc976803 (diff)
Fix more IPC
-rw-r--r--main/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl23
-rw-r--r--main/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl3
-rw-r--r--main/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl2
-rw-r--r--main/src/main/java/de/blinkt/openvpn/OpenVPNTileService.java20
-rw-r--r--main/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java26
-rw-r--r--main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java28
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java4
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java47
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java11
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/StatusListener.java5
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java25
-rw-r--r--main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java6
-rw-r--r--main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java9
13 files changed, 165 insertions, 44 deletions
diff --git a/main/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl b/main/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl
new file mode 100644
index 00000000..3958bcf3
--- /dev/null
+++ b/main/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+/**
+ * Created by arne on 15.11.16.
+ */
+
+interface IOpenVPNServiceInternal {
+
+ boolean protect(int fd);
+
+ void userPause(boolean b);
+
+ /**
+ * @param replaceConnection True if the VPN is connected by a new connection.
+ * @return true if there was a process that has been send a stop signal
+ */
+ boolean stopVPN(boolean replaceConnection);
+}
diff --git a/main/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl b/main/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl
index 49bf0619..0772dcb9 100644
--- a/main/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl
+++ b/main/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl
@@ -13,6 +13,7 @@ interface IServiceStatus {
/**
* Remove a previously registered callback interface.
- */
+ */
void unregisterStatusCallback(in IStatusCallbacks cb);
+
}
diff --git a/main/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl b/main/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl
index 23bee8b4..b72a2ffa 100644
--- a/main/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl
+++ b/main/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl
@@ -18,4 +18,6 @@ interface IStatusCallbacks {
oneway void updateStateString(in String state, in String msg, in int resid, in ConnectionStatus level);
oneway void updateByteCount(long inBytes, long outBytes);
+
+ oneway void connectedVPN(String uuid);
}
diff --git a/main/src/main/java/de/blinkt/openvpn/OpenVPNTileService.java b/main/src/main/java/de/blinkt/openvpn/OpenVPNTileService.java
index 3996f25e..ce14cc98 100644
--- a/main/src/main/java/de/blinkt/openvpn/OpenVPNTileService.java
+++ b/main/src/main/java/de/blinkt/openvpn/OpenVPNTileService.java
@@ -13,11 +13,13 @@ import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.IBinder;
+import android.os.RemoteException;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.widget.Toast;
import de.blinkt.openvpn.core.ConnectionStatus;
+import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
import de.blinkt.openvpn.core.OpenVPNService;
import de.blinkt.openvpn.core.ProfileManager;
import de.blinkt.openvpn.core.VpnStatus;
@@ -57,10 +59,14 @@ public class OpenVPNTileService extends TileService implements VpnStatus.StateLi
bindService(intent, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder binder) {
- OpenVPNService service = ((OpenVPNService.LocalBinder) binder).getService();
+ IOpenVPNServiceInternal service = IOpenVPNServiceInternal.Stub.asInterface(binder);
- if (service != null && service.getManagement() != null)
- service.getManagement().stopVPN(false);
+ if (service != null)
+ try {
+ service.stopVPN(false);
+ } catch (RemoteException e) {
+ VpnStatus.logException(e);
+ }
unbindService(this);
}
@@ -119,7 +125,7 @@ public class OpenVPNTileService extends TileService implements VpnStatus.StateLi
t.setState(Tile.STATE_INACTIVE);
}
} else {
- vpn = ProfileManager.getLastConnectedVpn();
+ vpn = ProfileManager.get(getBaseContext(), VpnStatus.getLastConnectedVPNProfile());
String name;
if (vpn == null)
name = "null?!";
@@ -129,11 +135,15 @@ public class OpenVPNTileService extends TileService implements VpnStatus.StateLi
t.setState(Tile.STATE_ACTIVE);
}
-
t.updateTile();
}
@Override
+ public void setConnectedVPN(String uuid) {
+
+ }
+
+ @Override
public void onStopListening() {
VpnStatus.removeStateListener(this);
super.onStopListening();
diff --git a/main/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java b/main/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
index f63f5ed2..c3a0072b 100644
--- a/main/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
+++ b/main/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
@@ -7,15 +7,17 @@ package de.blinkt.openvpn.activities;
import android.app.Activity;
import android.app.AlertDialog;
-import android.content.*;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
import android.os.RemoteException;
import de.blinkt.openvpn.LaunchVPN;
import de.blinkt.openvpn.R;
-import de.blinkt.openvpn.VpnProfile;
+import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
import de.blinkt.openvpn.core.OpenVPNService;
import de.blinkt.openvpn.core.ProfileManager;
import de.blinkt.openvpn.core.VpnStatus;
@@ -24,7 +26,7 @@ import de.blinkt.openvpn.core.VpnStatus;
* Created by arne on 13.10.13.
*/
public class DisconnectVPN extends Activity implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
- private Messenger mMessenger;
+ private IOpenVPNServiceInternal mService;
private ServiceConnection mConnection = new ServiceConnection() {
@@ -32,13 +34,13 @@ public class DisconnectVPN extends Activity implements DialogInterface.OnClickLi
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
- mMessenger = new Messenger(service);
+ mService = IOpenVPNServiceInternal.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
- mMessenger = null;
+ mService = null;
}
};
@@ -72,20 +74,18 @@ public class DisconnectVPN extends Activity implements DialogInterface.OnClickLi
@Override
public void onClick(DialogInterface dialog, int which) {
- VpnProfile lastVPN = ProfileManager.getLastConnectedVpn();
if (which == DialogInterface.BUTTON_POSITIVE) {
ProfileManager.setConntectedVpnProfileDisconnected(this);
- if (mMessenger != null) {
- Message msg = Message.obtain(null, OpenVPNService.DISCONNECT_VPN_MSG);
+ if (mService != null) {
try {
- mMessenger.send(msg);
+ mService.stopVPN(false);
} catch (RemoteException e) {
VpnStatus.logException(e);
}
}
- } else if (which == DialogInterface.BUTTON_NEUTRAL && lastVPN !=null) {
+ } else if (which == DialogInterface.BUTTON_NEUTRAL) {
Intent intent = new Intent(this, LaunchVPN.class);
- intent.putExtra(LaunchVPN.EXTRA_KEY, lastVPN.getUUID().toString());
+ intent.putExtra(LaunchVPN.EXTRA_KEY, VpnStatus.getLastConnectedVPNProfile());
intent.setAction(Intent.ACTION_MAIN);
startActivity(intent);
}
diff --git a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
index ce72f346..6d7e9a4b 100644
--- a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
@@ -37,8 +37,8 @@ import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.core.ConfigParser;
import de.blinkt.openvpn.core.ConfigParser.ConfigParseError;
import de.blinkt.openvpn.core.ConnectionStatus;
+import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
import de.blinkt.openvpn.core.OpenVPNService;
-import de.blinkt.openvpn.core.OpenVPNService.LocalBinder;
import de.blinkt.openvpn.core.ProfileManager;
import de.blinkt.openvpn.core.VPNLaunchHelper;
import de.blinkt.openvpn.core.VpnStatus;
@@ -52,7 +52,7 @@ public class ExternalOpenVPNService extends Service implements StateListener {
final RemoteCallbackList<IOpenVPNStatusCallback> mCallbacks =
new RemoteCallbackList<>();
- private OpenVPNService mService;
+ private IOpenVPNServiceInternal mService;
private ExternalAppDatabase mExtAppDb;
@@ -63,8 +63,7 @@ public class ExternalOpenVPNService extends Service implements StateListener {
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
- LocalBinder binder = (LocalBinder) service;
- mService = binder.getService();
+ mService = (IOpenVPNServiceInternal) (service);
}
@Override
@@ -82,8 +81,12 @@ public class ExternalOpenVPNService extends Service implements StateListener {
VpnProfile vp = ProfileManager.getLastConnectedVpn();
if (ProfileManager.isTempProfile()) {
if(intent.getPackage().equals(vp.mProfileCreator)) {
- if (mService != null && mService.getManagement() != null)
- mService.getManagement().stopVPN(false);
+ if (mService != null)
+ try {
+ mService.stopVPN(false);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
}
}
}
@@ -304,8 +307,8 @@ public class ExternalOpenVPNService extends Service implements StateListener {
@Override
public void disconnect() throws RemoteException {
checkOpenVPNPermission();
- if (mService != null && mService.getManagement() != null)
- mService.getManagement().stopVPN(false);
+ if (mService != null)
+ mService.stopVPN(false);
}
@Override
@@ -347,9 +350,9 @@ public class ExternalOpenVPNService extends Service implements StateListener {
public String state;
public String logmessage;
public ConnectionStatus level;
- public String vpnUUID;
+ String vpnUUID;
- public UpdateMessage(String state, String logmessage, ConnectionStatus level) {
+ UpdateMessage(String state, String logmessage, ConnectionStatus level) {
this.state = state;
this.logmessage = logmessage;
this.level = level;
@@ -367,6 +370,11 @@ public class ExternalOpenVPNService extends Service implements StateListener {
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+
+ }
+
private static final OpenVPNServiceHandler mHandler = new OpenVPNServiceHandler();
diff --git a/main/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java b/main/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
index 4b31180a..7d10063f 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
@@ -24,10 +24,6 @@ public class ICSOpenVPNApplication extends Application {
super.onCreate();
PRNGFixes.apply();
- if (BuildConfig.DEBUG) {
- //ACRA.init(this);
- }
-
VpnStatus.initLogCache(getApplicationContext().getCacheDir());
mStatus = new StatusListener();
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index 818ef30a..86a4043a 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -27,6 +27,7 @@ import android.os.Handler.Callback;
import android.os.IBinder;
import android.os.Message;
import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.system.OsConstants;
import android.text.TextUtils;
@@ -34,6 +35,7 @@ import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
+import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.Inet6Address;
@@ -55,7 +57,7 @@ import static de.blinkt.openvpn.core.NetworkSpace.ipAddress;
import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_CONNECTED;
import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT;
-public class OpenVPNService extends VpnService implements StateListener, Callback, ByteCountListener {
+public class OpenVPNService extends VpnService implements StateListener, Callback, ByteCountListener, IOpenVPNServiceInternal {
public static final String START_SERVICE = "de.blinkt.openvpn.START_SERVICE";
public static final String START_SERVICE_STICKY = "de.blinkt.openvpn.START_SERVICE_STICKY";
public static final String ALWAYS_SHOW_NOTIFICATION = "de.blinkt.openvpn.NOTIFICATION_ALWAYS_VISIBLE";
@@ -63,7 +65,6 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
private static final String PAUSE_VPN = "de.blinkt.openvpn.PAUSE_VPN";
private static final String RESUME_VPN = "de.blinkt.openvpn.RESUME_VPN";
private static final int OPENVPN_STATUS = 1;
- public static final int DISCONNECT_VPN_MSG = 100;
private static boolean mNotificationAlwaysVisible = false;
private final Vector<String> mDnslist = new Vector<>();
private final NetworkSpace mRoutes = new NetworkSpace();
@@ -88,6 +89,24 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
private Runnable mOpenVPNThread;
private static Class mNotificationActivityClass;
+ private final IBinder mBinder = new IOpenVPNServiceInternal.Stub() {
+
+ @Override
+ public boolean protect(int fd) throws RemoteException {
+ return OpenVPNService.this.protect(fd);
+ }
+
+ @Override
+ public void userPause(boolean shouldbePaused) throws RemoteException {
+ OpenVPNService.this.userPause(shouldbePaused);
+ }
+
+ @Override
+ public boolean stopVPN(boolean replaceConnection) throws RemoteException {
+ return OpenVPNService.this.stopVPN(replaceConnection);
+ }
+ };
+
// From: http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java
public static String humanReadableByteCount(long bytes, boolean mbit) {
if (mbit)
@@ -340,6 +359,14 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@Override
+ public boolean stopVPN(boolean replaceConnection) throws RemoteException {
+ if(getManagement() !=null)
+ return getManagement().stopVPN(replaceConnection);
+ else
+ return false;
+ }
+
+ @Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getBooleanExtra(ALWAYS_SHOW_NOTIFICATION, false))
@@ -405,6 +432,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
ProfileManager.setConnectedVpnProfile(this, mProfile);
+ VpnStatus.setConnectedVPNProfile(mProfile.getUUIDString());
/* TODO: At the moment we have no way to handle asynchronous PW input
* Fixing will also allow to handle challenge/response authentication */
if (mProfile.needUserPWInput(true) != 0)
@@ -542,6 +570,16 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@Override
+ public IBinder asBinder() {
+ return mBinder;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ @Override
public void onDestroy() {
synchronized (mProcessLock) {
if (mProcessThread != null) {
@@ -555,7 +593,6 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
// Just in case unregister for state
VpnStatus.removeStateListener(this);
VpnStatus.flushLog();
-
}
private String getTunConfigString() {
@@ -969,6 +1006,10 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
+
private void doSendBroadcast(String state, ConnectionStatus level) {
Intent vpnstatus = new Intent();
vpnstatus.setAction("de.blinkt.openvpn.VPN_STATUS");
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java
index f84445ad..4b32d9fa 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java
@@ -104,11 +104,18 @@ public class OpenVPNStatusService extends Service implements VpnStatus.LogListen
msg.sendToTarget();
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ Message msg = mHandler.obtainMessage(SEND_NEW_CONNECTED_VPN, uuid);
+ msg.sendToTarget();
+ }
+
private static final OpenVPNStatusHandler mHandler = new OpenVPNStatusHandler();
private static final int SEND_NEW_LOGITEM = 100;
private static final int SEND_NEW_STATE = 101;
private static final int SEND_NEW_BYTECOUNT = 102;
+ private static final int SEND_NEW_CONNECTED_VPN = 103;
static class OpenVPNStatusHandler extends Handler {
WeakReference<OpenVPNStatusService> service = null;
@@ -142,6 +149,10 @@ public class OpenVPNStatusService extends Service implements VpnStatus.LogListen
case SEND_NEW_STATE:
sendUpdate(broadcastItem, (UpdateMessage) msg.obj);
break;
+
+ case SEND_NEW_CONNECTED_VPN:
+ broadcastItem.connectedVPN((String) msg.obj);
+ break;
}
} catch (RemoteException e) {
// The RemoteCallbackList will take care of removing
diff --git a/main/src/main/java/de/blinkt/openvpn/core/StatusListener.java b/main/src/main/java/de/blinkt/openvpn/core/StatusListener.java
index d0f845ee..d6660147 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/StatusListener.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/StatusListener.java
@@ -72,6 +72,11 @@ public class StatusListener {
public void updateByteCount(long inBytes, long outBytes) throws RemoteException {
VpnStatus.updateByteCount(inBytes, outBytes);
}
+
+ @Override
+ public void connectedVPN(String uuid) throws RemoteException {
+ VpnStatus.setConnectedVPNProfile(uuid);
+ }
};
}
diff --git a/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java b/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
index 5f6a30d6..db0d10bd 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
@@ -18,6 +18,7 @@ import java.util.Locale;
import java.util.Vector;
import de.blinkt.openvpn.R;
+import de.blinkt.openvpn.VpnProfile;
public class VpnStatus {
@@ -37,6 +38,8 @@ public class VpnStatus {
private static long mlastByteCount[] = {0, 0, 0, 0};
private static HandlerThread mHandlerThread;
+ private static String mLastConnectedVPNUUID;
+
public static void logException(LogLevel ll, String context, Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
@@ -123,6 +126,18 @@ public class VpnStatus {
mLogFileHandler.sendEmptyMessage(LogFileHandler.FLUSH_TO_DISK);
}
+ public static void setConnectedVPNProfile(String uuid) {
+ mLastConnectedVPNUUID = uuid;
+ for (StateListener sl: stateListener)
+ sl.setConnectedVPN(uuid);
+ }
+
+
+ public static String getLastConnectedVPNProfile()
+ {
+ return mLastConnectedVPNUUID;
+ }
+
public enum LogLevel {
INFO(2),
@@ -158,10 +173,10 @@ public class VpnStatus {
}
// keytool -printcert -jarfile de.blinkt.openvpn_85.apk
- public static final byte[] officalkey = {-58, -42, -44, -106, 90, -88, -87, -88, -52, -124, 84, 117, 66, 79, -112, -111, -46, 86, -37, 109};
- public static final byte[] officaldebugkey = {-99, -69, 45, 71, 114, -116, 82, 66, -99, -122, 50, -70, -56, -111, 98, -35, -65, 105, 82, 43};
- public static final byte[] amazonkey = {-116, -115, -118, -89, -116, -112, 120, 55, 79, -8, -119, -23, 106, -114, -85, -56, -4, 105, 26, -57};
- public static final byte[] fdroidkey = {-92, 111, -42, -46, 123, -96, -60, 79, -27, -31, 49, 103, 11, -54, -68, -27, 17, 2, 121, 104};
+ static final byte[] officalkey = {-58, -42, -44, -106, 90, -88, -87, -88, -52, -124, 84, 117, 66, 79, -112, -111, -46, 86, -37, 109};
+ static final byte[] officaldebugkey = {-99, -69, 45, 71, 114, -116, 82, 66, -99, -122, 50, -70, -56, -111, 98, -35, -65, 105, 82, 43};
+ static final byte[] amazonkey = {-116, -115, -118, -89, -116, -112, 120, 55, 79, -8, -119, -23, 106, -114, -85, -56, -4, 105, 26, -57};
+ static final byte[] fdroidkey = {-92, 111, -42, -46, 123, -96, -60, 79, -27, -31, 49, 103, 11, -54, -68, -27, 17, 2, 121, 104};
private static ConnectionStatus mLastLevel = ConnectionStatus.LEVEL_NOTCONNECTED;
@@ -186,6 +201,8 @@ public class VpnStatus {
public interface StateListener {
void updateState(String state, String logmessage, int localizedResId, ConnectionStatus level);
+
+ void setConnectedVPN(String uuid);
}
public interface ByteCountListener {
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java b/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
index 067c7390..d704e61e 100644
--- a/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
+++ b/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
@@ -431,7 +431,7 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
} else if (item.getItemId() == R.id.send) {
ladapter.shareLog();
} else if (item.getItemId() == R.id.edit_vpn) {
- VpnProfile lastConnectedprofile = ProfileManager.getLastConnectedVpn();
+ VpnProfile lastConnectedprofile = ProfileManager.get(getActivity(), VpnStatus.getLastConnectedVPNProfile());
if (lastConnectedprofile != null) {
Intent vprefintent = new Intent(getActivity(), VPNPreferences.class)
@@ -674,6 +674,10 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
}
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
+
@Override
public void onDestroy() {
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java b/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java
index de41d509..2aaf81c6 100644
--- a/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java
+++ b/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java
@@ -66,8 +66,11 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
});
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
- class VPNArrayAdapter extends ArrayAdapter<VpnProfile> {
+ private class VPNArrayAdapter extends ArrayAdapter<VpnProfile> {
public VPNArrayAdapter(Context context, int resource,
int textViewResourceId) {
@@ -99,7 +102,7 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
});
TextView subtitle = (TextView) v.findViewById(R.id.vpn_item_subtitle);
- if (ProfileManager.getLastConnectedVpn() == profile) {
+ if (profile.getUUIDString().equals(VpnStatus.getLastConnectedVPNProfile())) {
subtitle.setText(mLastStatusMessage);
subtitle.setVisibility(View.VISIBLE);
} else {
@@ -113,7 +116,7 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
}
private void startOrStopVPN(VpnProfile profile) {
- if (VpnStatus.isVPNActive() && ProfileManager.getLastConnectedVpn() == profile) {
+ if (VpnStatus.isVPNActive() && profile.getUUIDString().equals(VpnStatus.getLastConnectedVPNProfile())) {
Intent disconnectVPN = new Intent(getActivity(), DisconnectVPN.class);
startActivity(disconnectVPN);
} else {