diff options
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/connectbot/HostListActivity.java | 81 | ||||
-rw-r--r-- | src/org/connectbot/bean/HostBean.java | 12 | ||||
-rw-r--r-- | src/org/connectbot/transport/AbsTransport.java | 9 | ||||
-rw-r--r-- | src/org/connectbot/transport/Local.java | 5 | ||||
-rw-r--r-- | src/org/connectbot/transport/SSH.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/transport/Telnet.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/transport/TransportFactory.java | 18 |
7 files changed, 105 insertions, 36 deletions
diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java index 7280176..7d0a687 100644 --- a/src/org/connectbot/HostListActivity.java +++ b/src/org/connectbot/HostListActivity.java @@ -80,6 +80,7 @@ public class HostListActivity extends ListActivity { private MenuItem sortlast; private Spinner transportSpinner; + private TextView quickconnect; protected Handler updateHandler = new Handler() { @Override @@ -197,18 +198,11 @@ public class HostListActivity extends ListActivity { // launch off to console details HostBean host = (HostBean) parent.getAdapter().getItem(position); + Uri uri = host.getUri(); - // create a specific uri that represents this host - Uri uri = Uri.parse(String.format("%s://%s@%s:%d/#%s", - Uri.encode(host.getProtocol()), - Uri.encode(host.getUsername()), - Uri.encode(host.getHostname()), - host.getPort(), - Uri.encode(host.getNickname()))); Intent contents = new Intent(Intent.ACTION_VIEW, uri); contents.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - if (makingShortcut) { // create shortcut if requested ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(HostListActivity.this, R.drawable.icon); @@ -230,37 +224,19 @@ public class HostListActivity extends ListActivity { this.registerForContextMenu(list); - final TextView text = (TextView) this.findViewById(R.id.front_quickconnect); - text.setVisibility(makingShortcut ? View.GONE : View.VISIBLE); - text.setOnKeyListener(new OnKeyListener() { + quickconnect = (TextView) this.findViewById(R.id.front_quickconnect); + quickconnect.setVisibility(makingShortcut ? View.GONE : View.VISIBLE); + quickconnect.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_UP) return false; if(keyCode != KeyEvent.KEYCODE_ENTER) return false; - Uri uri = TransportFactory.getUri((String) transportSpinner - .getSelectedItem(), text.getText().toString()); - - if (uri == null) { - text.setError(getString(R.string.list_format_error)); - return false; - } - - HostBean host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); - host.setColor(HostDatabase.COLOR_GRAY); - host.setPubkeyId(HostDatabase.PUBKEYID_ANY); - hostdb.saveHost(host); - - Intent intent = new Intent(HostListActivity.this, ConsoleActivity.class); - intent.setData(uri); - HostListActivity.this.startActivity(intent); - - return true; + return startConsoleActivity(); } - }); - text.requestFocus(); + quickconnect.requestFocus(); transportSpinner = (Spinner)findViewById(R.id.transport_selection); ArrayAdapter<String> transportSelection = new ArrayAdapter<String>(this, @@ -268,7 +244,20 @@ public class HostListActivity extends ListActivity { transportSelection.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); transportSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { - text.requestFocus(); + String formatHint = TransportFactory.getFormatHint( + (String) transportSpinner.getSelectedItem(), + HostListActivity.this); + + quickconnect.setHint(formatHint); + + // Start ConsoleActivity immediately if the hint is empty. + if ("".equals(formatHint)) { + quickconnect.setEnabled(false); + startConsoleActivity(); + } else { + quickconnect.setEnabled(true); + quickconnect.requestFocus(); + } } public void onNothingSelected(AdapterView<?> arg0) { } }); @@ -403,6 +392,34 @@ public class HostListActivity extends ListActivity { }); } + /** + * @param text + * @return + */ + private boolean startConsoleActivity() { + Uri uri = TransportFactory.getUri((String) transportSpinner + .getSelectedItem(), quickconnect.getText().toString()); + + if (uri == null) { + quickconnect.setError(getString(R.string.list_format_error, + TransportFactory.getFormatHint( + (String) transportSpinner.getSelectedItem(), + HostListActivity.this))); + return false; + } + + HostBean host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); + host.setColor(HostDatabase.COLOR_GRAY); + host.setPubkeyId(HostDatabase.PUBKEYID_ANY); + hostdb.saveHost(host); + + Intent intent = new Intent(HostListActivity.this, ConsoleActivity.class); + intent.setData(uri); + HostListActivity.this.startActivity(intent); + + return true; + } + protected void updateList() { Editor edit = prefs.edit(); edit.putBoolean(PreferenceConstants.SORT_BY_COLOR, sortedByColor); diff --git a/src/org/connectbot/bean/HostBean.java b/src/org/connectbot/bean/HostBean.java index 8dd9d42..3dcdee5 100644 --- a/src/org/connectbot/bean/HostBean.java +++ b/src/org/connectbot/bean/HostBean.java @@ -265,10 +265,14 @@ public class HostBean extends AbstractBean { */ public Uri getUri() { StringBuilder sb = new StringBuilder(); - sb.append("ssh://") - .append(Uri.encode(username)) - .append('@') - .append(Uri.encode(hostname)) + sb.append(protocol) + .append("://"); + + if (username != null) + sb.append(Uri.encode(username)) + .append('@'); + + sb.append(Uri.encode(hostname)) .append(':') .append(port) .append("/#") diff --git a/src/org/connectbot/transport/AbsTransport.java b/src/org/connectbot/transport/AbsTransport.java index f1a664a..582d4e7 100644 --- a/src/org/connectbot/transport/AbsTransport.java +++ b/src/org/connectbot/transport/AbsTransport.java @@ -27,6 +27,7 @@ import org.connectbot.bean.PortForwardBean; import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalManager; +import android.content.Context; import android.net.Uri; /** @@ -234,4 +235,12 @@ public abstract class AbsTransport { * @return */ public abstract HostBean createHost(Uri uri); + + /** + * @param context context containing the correct resources + * @return string that hints at the format for connection + */ + public static String getFormatHint(Context context) { + return "???"; + } } diff --git a/src/org/connectbot/transport/Local.java b/src/org/connectbot/transport/Local.java index 71ccb45..dcdf40d 100644 --- a/src/org/connectbot/transport/Local.java +++ b/src/org/connectbot/transport/Local.java @@ -31,6 +31,7 @@ import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalManager; import org.connectbot.util.HostDatabase; +import android.content.Context; import android.net.Uri; import android.util.Log; @@ -212,4 +213,8 @@ public class Local extends AbsTransport { selection.put(HostDatabase.FIELD_HOST_PROTOCOL, PROTOCOL); selection.put(HostDatabase.FIELD_HOST_NICKNAME, uri.getFragment()); } + + public static String getFormatHint(Context context) { + return ""; + } } diff --git a/src/org/connectbot/transport/SSH.java b/src/org/connectbot/transport/SSH.java index 276cc1b..62ea9d6 100644 --- a/src/org/connectbot/transport/SSH.java +++ b/src/org/connectbot/transport/SSH.java @@ -45,6 +45,7 @@ import org.connectbot.util.HostDatabase; import org.connectbot.util.PubkeyDatabase; import org.connectbot.util.PubkeyUtils; +import android.content.Context; import android.net.Uri; import android.util.Log; @@ -782,4 +783,11 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC public void setCompression(boolean compression) { this.compression = compression; } + + public static String getFormatHint(Context context) { + return String.format("%s@%s:%s", + context.getString(R.string.format_username), + context.getString(R.string.format_hostname), + context.getString(R.string.format_port)); + } } diff --git a/src/org/connectbot/transport/Telnet.java b/src/org/connectbot/transport/Telnet.java index e0d67a7..72e1b2b 100644 --- a/src/org/connectbot/transport/Telnet.java +++ b/src/org/connectbot/transport/Telnet.java @@ -27,11 +27,13 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.connectbot.R; import org.connectbot.bean.HostBean; import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalManager; import org.connectbot.util.HostDatabase; +import android.content.Context; import android.net.Uri; import android.util.Log; import de.mud.telnet.TelnetProtocolHandler; @@ -281,4 +283,10 @@ public class Telnet extends AbsTransport { port = DEFAULT_PORT; selection.put(HostDatabase.FIELD_HOST_PORT, Integer.toString(port)); } + + public static String getFormatHint(Context context) { + return String.format("%s:%s", + context.getString(R.string.format_hostname), + context.getString(R.string.format_port)); + } } diff --git a/src/org/connectbot/transport/TransportFactory.java b/src/org/connectbot/transport/TransportFactory.java index e5b893a..7e64363 100644 --- a/src/org/connectbot/transport/TransportFactory.java +++ b/src/org/connectbot/transport/TransportFactory.java @@ -18,6 +18,7 @@ package org.connectbot.transport; +import android.content.Context; import android.net.Uri; import android.util.Log; @@ -83,4 +84,21 @@ public class TransportFactory { return false; } } + + /** + * @param protocol text name of protocol + * @param context + * @return expanded format hint + */ + public static String getFormatHint(String protocol, Context context) { + if (SSH.getProtocolName().equals(protocol)) { + return SSH.getFormatHint(context); + } else if (Telnet.getProtocolName().equals(protocol)) { + return Telnet.getFormatHint(context); + } else if (Local.getProtocolName().equals(protocol)) { + return Local.getFormatHint(context); + } else { + return AbsTransport.getFormatHint(context); + } + } } |