aboutsummaryrefslogtreecommitdiffstats
path: root/src/org
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-07-09 18:14:17 +0000
committerKenny Root <kenny@the-b.org>2009-07-09 18:14:17 +0000
commitfac1309bac44d6ba4294ff397197ddb7baffb8ba (patch)
treebe48fbda36e6c8745d8174f451e30211803ae501 /src/org
parentd9ff9718e72836b418e0c9f33ba3fdc197e66055 (diff)
downloadconnectbot-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/org')
-rw-r--r--src/org/connectbot/ConsoleActivity.java64
-rw-r--r--src/org/connectbot/service/TerminalBridge.java25
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;
+ }
}