diff options
| author | Kenny Root <kenny@the-b.org> | 2009-07-09 18:14:17 +0000 | 
|---|---|---|
| committer | Kenny Root <kenny@the-b.org> | 2009-07-09 18:14:17 +0000 | 
| commit | fac1309bac44d6ba4294ff397197ddb7baffb8ba (patch) | |
| tree | be48fbda36e6c8745d8174f451e30211803ae501 /src | |
| parent | d9ff9718e72836b418e0c9f33ba3fdc197e66055 (diff) | |
| download | connectbot-fac1309bac44d6ba4294ff397197ddb7baffb8ba.tar.gz connectbot-fac1309bac44d6ba4294ff397197ddb7baffb8ba.tar.bz2 connectbot-fac1309bac44d6ba4294ff397197ddb7baffb8ba.zip  | |
Add menu item to scan for URLs in the current console
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@365 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src')
| -rw-r--r-- | src/org/connectbot/ConsoleActivity.java | 64 | ||||
| -rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 25 | 
2 files changed, 88 insertions, 1 deletions
diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java index 2f217c2..2fff48d 100644 --- a/src/org/connectbot/ConsoleActivity.java +++ b/src/org/connectbot/ConsoleActivity.java @@ -18,6 +18,9 @@  package org.connectbot; +import java.lang.ref.WeakReference; +import java.util.List; +  import org.connectbot.bean.HostBean;  import org.connectbot.bean.PortForwardBean;  import org.connectbot.bean.SelectionArea; @@ -28,6 +31,7 @@ import org.connectbot.util.PreferenceConstants;  import android.app.Activity;  import android.app.AlertDialog; +import android.app.Dialog;  import android.content.ComponentName;  import android.content.Context;  import android.content.DialogInterface; @@ -62,13 +66,17 @@ import android.view.View.OnTouchListener;  import android.view.animation.Animation;  import android.view.animation.AnimationUtils;  import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter;  import android.widget.Button;  import android.widget.EditText;  import android.widget.ImageView; +import android.widget.ListView;  import android.widget.RelativeLayout;  import android.widget.TextView;  import android.widget.Toast;  import android.widget.ViewFlipper; +import android.widget.AdapterView.OnItemClickListener;  import com.nullwire.trace.ExceptionHandler; @@ -112,7 +120,7 @@ public class ConsoleActivity extends Activity {  	private InputMethodManager inputManager; -	private MenuItem disconnect, copy, paste, portForward, resize; +	private MenuItem disconnect, copy, paste, portForward, resize, urlscan;  	protected TerminalBridge copySource = null;  	private int lastTouchRow, lastTouchCol; @@ -718,6 +726,30 @@ public class ConsoleActivity extends Activity {  			}  		}); +		urlscan = menu.add(R.string.console_menu_urlscan); +		urlscan.setAlphabeticShortcut('u'); +		urlscan.setIcon(android.R.drawable.ic_menu_search); +		urlscan.setOnMenuItemClickListener(new OnMenuItemClickListener() { +			public boolean onMenuItemClick(MenuItem item) { +				final TerminalView terminalView = (TerminalView) findCurrentView(R.id.console_flip); + +				List<String> urls = terminalView.bridge.scanForURLs(); + +				Dialog urlDialog = new Dialog(ConsoleActivity.this); +				urlDialog.setTitle(R.string.console_menu_urlscan); + +				ListView urlListView = new ListView(ConsoleActivity.this); +				URLItemListener urlListener = new URLItemListener(ConsoleActivity.this); +				urlListView.setOnItemClickListener(urlListener); + +				urlListView.setAdapter(new ArrayAdapter<String>(ConsoleActivity.this, android.R.layout.simple_list_item_1, urls)); +				urlDialog.setContentView(urlListView); +				urlDialog.show(); + +				return true; +			} +		}); +  		resize = menu.add(R.string.console_menu_resize);  		resize.setAlphabeticShortcut('s');  		resize.setIcon(android.R.drawable.ic_menu_crop); @@ -945,6 +977,36 @@ public class ConsoleActivity extends Activity {  		}  	} +	private class URLItemListener implements OnItemClickListener { +		private WeakReference<Context> contextRef; + +		URLItemListener(Context context) { +			this.contextRef = new WeakReference<Context>(context); +		} + +		public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { +			Context context = contextRef.get(); + +			if (context == null) +				return; + +			try { +				TextView urlView = (TextView) view; + +				String url = urlView.getText().toString(); +				if (url.indexOf("://") < 0) +					url = "http://" + url; + +				Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); +				context.startActivity(intent); +			} catch (Exception e) { +				Log.e(TAG, "couldn't open URL", e); +				// We should probably tell the user that we couldn't find a handler... +			} +		} + +	} +  	@Override  	public void onConfigurationChanged(Configuration newConfig) {  		super.onConfigurationChanged(newConfig); diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index de507ad..500a821 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -22,6 +22,8 @@ import java.io.IOException;  import java.nio.charset.Charset;  import java.util.LinkedList;  import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern;  import org.connectbot.R;  import org.connectbot.TerminalView; @@ -1279,4 +1281,27 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {  		color = manager.hostdb.getColorsForHost(host);  	} + +	// This was taken from http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx +	private final static String urlRegex = "(?:(?:ht|f)tp(?:s?)\\:\\/\\/|~/|/)?(?:\\w+:\\w+@)?(?:(?:[-\\w]+\\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?::[\\d]{1,5})?(?:(?:(?:/(?:[-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|/)+|\\?|#)?(?:(?:\\?(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)(?:&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*(?:#(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?"; +	private static Pattern urlPattern = null; + +	/** +	 * @return +	 */ +	public List<String> scanForURLs() { +		List<String> urls = new LinkedList<String>(); + +		if (urlPattern == null) +			urlPattern = Pattern.compile(urlRegex); + +		for (int l = 0; l < buffer.height; l++) { +			Matcher urlMatcher = urlPattern.matcher( +					new String(buffer.charArray[buffer.windowBase + l])); +			while (urlMatcher.find()) +				urls.add(urlMatcher.group()); +		} + +		return urls; +	}  }  | 
