diff options
-rw-r--r-- | res/drawable/ic_notification_icon.xml | 13 | ||||
-rw-r--r-- | res/drawable/notification_icon.xml | 20 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/LogWindow.java | 2 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVPN.java | 53 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVPNThread.java | 2 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVpnManagementThread.java | 4 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVpnService.java | 31 |
7 files changed, 73 insertions, 52 deletions
diff --git a/res/drawable/ic_notification_icon.xml b/res/drawable/ic_notification_icon.xml index db5e6e0f..852da869 100644 --- a/res/drawable/ic_notification_icon.xml +++ b/res/drawable/ic_notification_icon.xml @@ -1,5 +1,14 @@ <level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- connected -->
<item android:maxLevel="0" android:drawable="@drawable/ic_stat_vpn" />
- <item android:maxLevel="1" android:drawable="@drawable/ic_stat_vpn" />
- <item android:maxLevel="2" android:drawable="@drawable/ic_stat_vpn" />
+ <!-- connecting, server reply -->
+ <item android:maxLevel="1" android:drawable="@drawable/ic_stat_vpn_more_halo" />
+ <!-- connecting, no server rply yet -->
+ <item android:maxLevel="2" android:drawable="@drawable/ic_stat_vpn_minimal_halo" />
+ <!-- no useable network -->
+ <item android:maxLevel="3" android:drawable="@drawable/ic_stat_vpn_offline" />
+ <!-- Authentication failed -->
+ <item android:maxLevel="4" android:drawable="@drawable/ic_stat_vpn_more_halo" />
+ <!-- client not running, not used -->
+ <item android:maxLevel="5" android:drawable="@drawable/ic_stat_vpn_offline" />
</level-list>
\ No newline at end of file diff --git a/res/drawable/notification_icon.xml b/res/drawable/notification_icon.xml deleted file mode 100644 index 6968e806..00000000 --- a/res/drawable/notification_icon.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- - <string name="state_auth">Authenticating</string> - <string name="state_get_config">Getting client configuration</string> - <string name="state_assign_ip">Assigning IP addresses</string> - <string name="state_add_routes">Adding routes</string> - <string name="state_connected">Connected</string> - <string name="state_reconnecting">Reconnecting</string> - <string name="state_exiting">Exiting</string> - <string name="state_noprocess">Not running</string> - <string name="state_resolve">Resolving host names</string> - <string name="state_tcp_connect">Connecting (TCP)</string> - <string name="state_auth_failed">Authentication failed</string> - <string name="state_nonetwork">Waiting for usable network</string> - --> - - <level-list xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:maxLevel="0" android:drawable="@drawable/ic_stat_vpn" /> - <item android:maxLevel="1" android:drawable="@drawable/ic_stat_vpn" /> - <item android:maxLevel="2" android:drawable="@drawable/ic_stat_vpn" /> - </level-list>
\ No newline at end of file diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java index ef29ad5e..4e153357 100644 --- a/src/de/blinkt/openvpn/LogWindow.java +++ b/src/de/blinkt/openvpn/LogWindow.java @@ -392,7 +392,7 @@ public class LogWindow extends ListActivity implements StateListener { } @Override - public void updateState(final String status,final String logmessage, final int resid) { + public void updateState(final String status,final String logmessage, final int resid, final int level) { runOnUiThread(new Runnable() { @Override diff --git a/src/de/blinkt/openvpn/OpenVPN.java b/src/de/blinkt/openvpn/OpenVPN.java index 03db7677..607f87e3 100644 --- a/src/de/blinkt/openvpn/OpenVPN.java +++ b/src/de/blinkt/openvpn/OpenVPN.java @@ -28,6 +28,18 @@ public class OpenVPN { private static long mlastByteCount[]={0,0,0,0}; + + + + static final int LEVEL_NONETWORK = 3; + static final int LEVEL_NOTCONNECTED = 4; + public static final int LEVEL_AUTH_FAILED = 5; + static final int LEVEL_CONNECTING_SERVER_REPLIED = 1; + static final int LEVEL_CONNECTING_NO_SERVER_REPLY_YET = 2; + static final int LEVEL_CONNECTED = 0; + + private static int mLastLevel=LEVEL_NOTCONNECTED; + static { logbuffer = new LinkedList<LogItem>(); logListener = new Vector<OpenVPN.LogListener>(); @@ -145,7 +157,7 @@ public class OpenVPN { } public interface StateListener { - void updateState(String state, String logmessage, int localizedResId); + void updateState(String state, String logmessage, int localizedResId, int level); } public interface ByteCountListener { @@ -190,7 +202,7 @@ public class OpenVPN { if(!stateListener.contains(sl)){ stateListener.add(sl); if(mLaststate!=null) - sl.updateState(mLaststate, mLaststatemsg, mLastStateresid); + sl.updateState(mLaststate, mLaststatemsg, mLastStateresid, mLastLevel); } } @@ -224,6 +236,35 @@ public class OpenVPN { } + private static int getLevel(String state){ + String[] noreplyet = {"CONNECTING","WAIT", "RECONNECTING", "RESOLVE", "TCP_CONNECT"}; + String[] reply = {"AUTH","GETCONFIG","ASSIGN_IP","ADD_ROUTES"}; + String[] connected = {"CONNECTED"}; + String[] notconnected = {"DISCONNECTED", "EXITING"}; + + for(String x:noreplyet) + if(state.equals(x)) + return LEVEL_CONNECTING_NO_SERVER_REPLY_YET; + + for(String x:reply) + if(state.equals(x)) + return LEVEL_CONNECTING_SERVER_REPLIED; + + for(String x:connected) + if(state.equals(x)) + return LEVEL_CONNECTED; + + for(String x:notconnected) + if(state.equals(x)) + return LEVEL_NOTCONNECTED; + + return -1; + + } + + + + public synchronized static void removeStateListener(StateListener sl) { stateListener.remove(sl); } @@ -252,16 +293,18 @@ public class OpenVPN { public static void updateStateString (String state, String msg) { int rid = getLocalizedState(state); - updateStateString(state, msg,rid); + int level = getLevel(state); + updateStateString(state, msg, rid, level); } - public synchronized static void updateStateString(String state, String msg, int resid) { + public synchronized static void updateStateString(String state, String msg, int resid, int level) { mLaststate= state; mLaststatemsg = msg; mLastStateresid = resid; + mLastLevel = level; for (StateListener sl : stateListener) { - sl.updateState(state,msg,resid); + sl.updateState(state,msg,resid,level); } } diff --git a/src/de/blinkt/openvpn/OpenVPNThread.java b/src/de/blinkt/openvpn/OpenVPNThread.java index 1ef04f70..67878eb7 100644 --- a/src/de/blinkt/openvpn/OpenVPNThread.java +++ b/src/de/blinkt/openvpn/OpenVPNThread.java @@ -54,7 +54,7 @@ public class OpenVPNThread implements Runnable { if( exitvalue != 0)
OpenVPN.logError("Process exited with exit value " + exitvalue);
- OpenVPN.updateStateString("NOPROCESS","No process running.", R.string.state_noprocess);
+ OpenVPN.updateStateString("NOPROCESS","No process running.", R.string.state_noprocess,OpenVPN.LEVEL_NOTCONNECTED);
if(mDumpPath!=null) {
try {
BufferedWriter logout = new BufferedWriter(new FileWriter(mDumpPath + ".log"));
diff --git a/src/de/blinkt/openvpn/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/OpenVpnManagementThread.java index e4528132..5cd70987 100644 --- a/src/de/blinkt/openvpn/OpenVpnManagementThread.java +++ b/src/de/blinkt/openvpn/OpenVpnManagementThread.java @@ -208,7 +208,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNMangement { releaseHoldCmd();
} else {
mWaitingForRelease=true;
- OpenVPN.updateStateString("NONETWORK", "",R.string.state_nonetwork);
+ OpenVPN.updateStateString("NONETWORK", "",R.string.state_nonetwork,OpenVPN.LEVEL_NONETWORK);
}
}
private void releaseHoldCmd() {
@@ -423,7 +423,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNMangement { private void proccessPWFailed(String needed, String args) {
- OpenVPN.updateStateString("AUTH_FAILED", needed + args,R.string.state_auth_failed);
+ OpenVPN.updateStateString("AUTH_FAILED", needed + args,R.string.state_auth_failed,OpenVPN.LEVEL_AUTH_FAILED);
}
private void logStatusMessage(String command) {
OpenVPN.logMessage(0,"MGMT:", command);
diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 881eda9d..7e1eebd3 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -77,11 +77,6 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac public static final int PROTECT_FD = 0; - - private static final int LEVEL_OFFLINE = 0; - private static final int LEVEL_NOTCONNECTED = 1; - private static final int LEVEL_CONNECTED = 2; - private static boolean mNotificationalwaysVisible=false; private final IBinder mBinder = new LocalBinder(); @@ -136,7 +131,7 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); - int icon = R.drawable.notification_icon; + int icon = R.drawable.ic_notification_icon; android.app.Notification.Builder nbuilder = new Notification.Builder(this); if(mProfile!=null) @@ -248,8 +243,8 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac this.unregisterReceiver(mNetworkStateReceiver); mNetworkStateReceiver=null; } - - + + @Override public int onStartCommand(Intent intent, int flags, int startId) { @@ -274,7 +269,8 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac mProfile = ProfileManager.get(profileUUID); - showNotification("Starting VPN " + mProfile.mName,"Starting VPN " + mProfile.mName, false,0,LEVEL_NOTCONNECTED); + showNotification("Starting VPN " + mProfile.mName,"Starting VPN " + mProfile.mName, + false,0,OpenVPN.LEVEL_CONNECTING_NO_SERVER_REPLY_YET); // Set a flag that we are starting a new VPN mStarting=true; @@ -320,11 +316,11 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac Runnable processThread; if(mOvpn3) { - + OpenVPNMangement mOpenVPN3 = instantiateOpenVPN3Core(); processThread = (Runnable) mOpenVPN3; mManagement = mOpenVPN3; - + } else { processThread = new OpenVPNThread(this, argv,nativelibdir); @@ -556,7 +552,7 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac } @Override - public void updateState(String state,String logmessage, int resid) { + public void updateState(String state,String logmessage, int resid, int level) { // If the process is not running, ignore any state, // Notification should be invisible in this state if(mProcessThread==null && !mNotificationalwaysVisible) @@ -565,17 +561,10 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac // Display byte count only after being connected { - int level; - if("CONNECTED".equals(state)) { + if(level == OpenVPN.LEVEL_CONNECTED) { mDisplayBytecount = true; mConnecttime = System.currentTimeMillis(); - level = LEVEL_CONNECTED; } else { - if ("NONETWORK".equals(state)) { - level = LEVEL_OFFLINE; - } else { - level = LEVEL_NOTCONNECTED; - } mDisplayBytecount = false; } @@ -598,7 +587,7 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac humanReadableByteCount(diffout, false)); boolean lowpriority = !mNotificationalwaysVisible; - showNotification(netstat,null,lowpriority,mConnecttime, LEVEL_CONNECTED); + showNotification(netstat,null,lowpriority,mConnecttime, OpenVPN.LEVEL_CONNECTED); } } |