diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2013-02-10 21:25:04 +0100 | 
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2013-02-10 21:25:04 +0100 | 
| commit | dad578cff15e77be2f7e1ce6ff2b8dad4753da4d (patch) | |
| tree | 81c2902ad2b11e3f6b6b549c07b63193beb588d3 | |
| parent | af936c72849df3ecd628d88018bc4631c367da49 (diff) | |
Add timestamps to log window
--HG--
extra : rebase_source : cbcf8f519b4a2c616a645636653fe711304a5942
| -rw-r--r-- | res/menu/logmenu.xml | 8 | ||||
| -rwxr-xr-x | res/values/strings.xml | 1 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/LogWindow.java | 47 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVPN.java | 66 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVpnService.java | 1 | 
5 files changed, 95 insertions, 28 deletions
| diff --git a/res/menu/logmenu.xml b/res/menu/logmenu.xml index bb810df0..0cc95b69 100644 --- a/res/menu/logmenu.xml +++ b/res/menu/logmenu.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 +
      <item
          android:id="@+id/clearlog"
          android:icon="@drawable/ic_menu_trash_holo_light"
 @@ -18,7 +19,6 @@          android:showAsAction="ifRoom|withText"
          android:title="@string/show_connection_details"
          android:titleCondensed="@string/info"/>
 -
      <item
          android:id="@+id/send"
          android:icon="@android:drawable/ic_menu_share"
 @@ -31,5 +31,11 @@          android:icon="@android:drawable/ic_menu_edit"
          android:showAsAction="withText|ifRoom"
          android:title="@string/edit_vpn"/>
 +    <item
 +        android:id="@+id/toggle_time"
 +        android:alphabeticShortcut="e"
 +        android:icon="@android:drawable/ic_menu_week"
 +        android:showAsAction="withText|ifRoom"
 +        android:title="@string/toggle_timestamps"/>
  </menu>
\ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 6e406b8b..679681a0 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -264,5 +264,6 @@      <string name="encryption_cipher">Encryption cipher</string>      <string name="packet_auth">Packets authentication</string>      <string name="auth_dialog_title">Enter packet authentication method</string> +    <string name="toggle_timestamps">Toggle timestamps</string>  </resources>
\ No newline at end of file diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java index 4d2047f8..ef29ad5e 100644 --- a/src/de/blinkt/openvpn/LogWindow.java +++ b/src/de/blinkt/openvpn/LogWindow.java @@ -1,5 +1,6 @@  package de.blinkt.openvpn; +import java.util.Date;  import java.util.Vector;  import android.app.AlertDialog; @@ -19,6 +20,7 @@ import android.os.Handler;  import android.os.Handler.Callback;  import android.os.IBinder;  import android.os.Message; +import android.text.format.DateFormat;  import android.view.Menu;  import android.view.MenuInflater;  import android.view.MenuItem; @@ -65,13 +67,17 @@ public class LogWindow extends ListActivity implements StateListener  {  		private static final int MESSAGE_NEWLOG = 0;  		private static final int MESSAGE_CLEARLOG = 1; +		 +		private static final int MESSAGE_NEWTS = 1; -		private Vector<String> myEntries=new Vector<String>(); +		private Vector<LogItem> myEntries=new Vector<LogItem>();  		private Handler mHandler;  		private Vector<DataSetObserver> observers=new Vector<DataSetObserver>(); +		private int mTimeFormat=0; +  		public LogWindowListAdapter() {  			initLogBuffer(); @@ -88,14 +94,14 @@ public class LogWindow extends ListActivity implements StateListener  {  		private void initLogBuffer() {  			myEntries.clear();  			for (LogItem litem : OpenVPN.getlogbuffer()) { -				myEntries.add(litem.getString(getContext()));				 +				myEntries.add(litem);  			}  		}  		String getLogStr() {  			String str = ""; -			for(String entry:myEntries) { -				str+=entry + '\n'; +			for(LogItem entry:myEntries) { +				str+=entry.getString(LogWindow.this) + '\n';  			}  			return str;  		} @@ -147,7 +153,15 @@ public class LogWindow extends ListActivity implements StateListener  {  				v = new TextView(getBaseContext());  			else  				v = (TextView) convertView; -			v.setText(myEntries.get(position)); +			 +			LogItem le = myEntries.get(position); +			String msg = le.getString(LogWindow.this); +			if (mTimeFormat%2 == 1) { +				Date d = new Date(le.getLogtime()); +				String time = DateFormat.getTimeFormat(LogWindow.this).format(d); +				msg =  time + " " + msg; +			} +			v.setText(msg);  			return v;  		} @@ -182,7 +196,7 @@ public class LogWindow extends ListActivity implements StateListener  {  			Message msg = Message.obtain();  			msg.what=MESSAGE_NEWLOG;  			Bundle mbundle=new Bundle(); -			mbundle.putString("logmessage", logmessage.getString(getBaseContext())); +			mbundle.putParcelable("logmessage", logmessage);  			msg.setData(mbundle);  			mHandler.sendMessage(msg);  		} @@ -192,7 +206,7 @@ public class LogWindow extends ListActivity implements StateListener  {  			// We have been called  			if(msg.what==MESSAGE_NEWLOG) { -				String logmessage = msg.getData().getString("logmessage"); +				LogItem logmessage = msg.getData().getParcelable("logmessage");  				myEntries.add(logmessage);  				for (DataSetObserver observer : observers) { @@ -203,7 +217,11 @@ public class LogWindow extends ListActivity implements StateListener  {  				for (DataSetObserver observer : observers) {  					observer.onInvalidated();  				} -			}  +			}  else if (msg.what == MESSAGE_NEWTS) { +				for (DataSetObserver observer : observers) { +					observer.onInvalidated(); +				} +			}  			return true;  		} @@ -215,6 +233,13 @@ public class LogWindow extends ListActivity implements StateListener  {  			OpenVPN.logMessage(0,"","Log cleared.");  			mHandler.sendEmptyMessage(MESSAGE_CLEARLOG);  		} + + + +		public void nextTimeFormat() { +			mTimeFormat+=1; +			mHandler.sendEmptyMessage(MESSAGE_NEWTS); +		}  	} @@ -261,7 +286,8 @@ public class LogWindow extends ListActivity implements StateListener  {  			} else {  				Toast.makeText(this, R.string.log_no_last_vpn, Toast.LENGTH_LONG).show();  			} - +		} else if(item.getItemId() == R.id.toggle_time) { +			ladapter.nextTimeFormat();  		} else if(item.getItemId() == android.R.id.home) {  			// This is called when the Home (Up) button is pressed  			// in the Action Bar. @@ -278,9 +304,6 @@ public class LogWindow extends ListActivity implements StateListener  {  	} -	protected Context getContext() { -		return this; -	}  	@Override  	public boolean onCreateOptionsMenu(Menu menu) { diff --git a/src/de/blinkt/openvpn/OpenVPN.java b/src/de/blinkt/openvpn/OpenVPN.java index 2ca2d259..03db7677 100644 --- a/src/de/blinkt/openvpn/OpenVPN.java +++ b/src/de/blinkt/openvpn/OpenVPN.java @@ -6,6 +6,8 @@ import java.util.Vector;  import android.content.Context;  import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable;  public class OpenVPN { @@ -23,7 +25,7 @@ public class OpenVPN {  	private static String mLaststate = "NOPROCESS";  	private static int mLastStateresid=R.string.state_noprocess; -	 +  	private static long mlastByteCount[]={0,0,0,0};  	static { @@ -34,7 +36,7 @@ public class OpenVPN {  		logInformation();  	} -	public static class LogItem { +	public static class LogItem implements Parcelable {  		public static final int ERROR = 1;  		public static final int INFO = 2;  		public static final int VERBOSE = 3; @@ -44,12 +46,46 @@ public class OpenVPN {  		private int mRessourceId;  		// Default log priority  		int mLevel = INFO; +		private long logtime = System.currentTimeMillis();  		public LogItem(int ressourceId, Object[] args) {  			mRessourceId = ressourceId;  			mArgs = args;  		} +		@Override +		public int describeContents() { +			return 0; +		} + + +		@Override +		public void writeToParcel(Parcel dest, int flags) { +			dest.writeArray(mArgs); +			dest.writeString(mMessage); +			dest.writeInt(mRessourceId); +			dest.writeInt(mLevel); +			dest.writeLong(logtime); +		} + +		public LogItem(Parcel in) { +			mArgs = in.readArray(Object.class.getClassLoader()); +			mMessage = in.readString(); +			mRessourceId = in.readInt(); +			mLevel = in.readInt(); +			logtime = in.readLong(); +		} + +		public static final Parcelable.Creator<LogItem> CREATOR +		= new Parcelable.Creator<LogItem>() { +			public LogItem createFromParcel(Parcel in) { +				return new LogItem(in); +			} + +			public LogItem[] newArray(int size) { +				return new LogItem[size]; +			} +		};  		public LogItem(int loglevel,int ressourceId, Object[] args) {  			mRessourceId = ressourceId; @@ -73,7 +109,6 @@ public class OpenVPN {  			mLevel = loglevel;  		} -  		public String getString(Context c) {  			if(mMessage !=null) {  				return mMessage; @@ -87,21 +122,22 @@ public class OpenVPN {  					String str = String.format(Locale.ENGLISH,"Log (no context) resid %d", mRessourceId);  					if(mArgs !=null)  						for(Object o:mArgs) -						str += "|" +  o.toString(); +							str += "|" +  o.toString();  					return str;  				}  			}  		} -	} -	private static final int MAXLOGENTRIES = 500; - - -	public static final String MANAGMENT_PREFIX = "M:"; +		public long getLogtime() { +			return logtime; +		} +	} +	private static final int MAXLOGENTRIES = 500; +	public static final String MANAGMENT_PREFIX = "M:";  	public interface LogListener { @@ -111,7 +147,7 @@ public class OpenVPN {  	public interface StateListener {  		void updateState(String state, String logmessage, int localizedResId);  	} -	 +  	public interface ByteCountListener {  		void updateByteCount(long in, long out, long diffin, long diffout);  	} @@ -139,12 +175,12 @@ public class OpenVPN {  	public synchronized static void removeLogListener(LogListener ll) {  		logListener.remove(ll);  	} -	 +  	public static void addByteCountListener(ByteCountListener bcl) {  		bcl.updateByteCount(mlastByteCount[0],	mlastByteCount[1], mlastByteCount[2], mlastByteCount[3]);  		byteCountListener.add(bcl);  	}	 -	 +  	public static void removeByteCountListener(ByteCountListener bcl) {  		byteCountListener.remove(bcl);  	} @@ -157,7 +193,7 @@ public class OpenVPN {  				sl.updateState(mLaststate, mLaststatemsg, mLastStateresid);  		}  	}	 -	 +  	private static int getLocalizedState(String state){  		if (state.equals("CONNECTING"))   			return R.string.state_connecting; @@ -223,7 +259,7 @@ public class OpenVPN {  		mLaststate= state;  		mLaststatemsg = msg;  		mLastStateresid = resid; -		 +  		for (StateListener sl : stateListener) {  			sl.updateState(state,msg,resid);  		} @@ -264,7 +300,7 @@ public class OpenVPN {  		long lastOut = mlastByteCount[1];  		long diffin = in - lastIn;  		long diffout = out - lastOut; -		 +  		mlastByteCount = new long[] {in,out,diffin,diffout};  		for(ByteCountListener bcl:byteCountListener){  			bcl.updateByteCount(in, out, diffin,diffout); diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index ce9f75a1..881eda9d 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -316,6 +316,7 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac  		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);          		mOvpn3 = prefs.getBoolean("ovpn3", false); +		mOvpn3 = false;  		Runnable processThread;  		if(mOvpn3) { | 
