diff options
author | Jeffrey Sharkey <jsharkey@jsharkey.org> | 2008-10-27 15:58:43 +0000 |
---|---|---|
committer | Jeffrey Sharkey <jsharkey@jsharkey.org> | 2008-10-27 15:58:43 +0000 |
commit | c394e79b95caaa2b0eb21241dacf5b7373cef887 (patch) | |
tree | 7af6489d0f0cf628038127d8a86f24be3134e643 /src | |
parent | cb8a0cf9827bcec452fd49023a2a940bdd334f62 (diff) | |
download | connectbot-c394e79b95caaa2b0eb21241dacf5b7373cef887.tar.gz connectbot-c394e79b95caaa2b0eb21241dacf5b7373cef887.tar.bz2 connectbot-c394e79b95caaa2b0eb21241dacf5b7373cef887.zip |
* finished implementing copy functionality
* added right or left alt- or shift- helping keys (/ and tab), disableable from settings
* fixed a few random bugs
Diffstat (limited to 'src')
-rw-r--r-- | src/de/mud/terminal/VDUBuffer.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/ConsoleActivity.java | 79 | ||||
-rw-r--r-- | src/org/connectbot/HostEditorActivity.java | 31 | ||||
-rw-r--r-- | src/org/connectbot/HostListActivity.java | 1 | ||||
-rw-r--r-- | src/org/connectbot/R.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/TerminalView.java | 15 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 118 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalManager.java | 38 |
8 files changed, 238 insertions, 60 deletions
diff --git a/src/de/mud/terminal/VDUBuffer.java b/src/de/mud/terminal/VDUBuffer.java index 120f093..60e7abf 100644 --- a/src/de/mud/terminal/VDUBuffer.java +++ b/src/de/mud/terminal/VDUBuffer.java @@ -33,7 +33,7 @@ import android.util.Log; * all methods to manipulate the buffer that stores characters and their * attributes as well as the regions displayed. * - * @author Matthias L. Jugel, Marcus Mei§ner + * @author Matthias L. Jugel, Marcus Meiner * @version $Id: VDUBuffer.java 503 2005-10-24 07:34:13Z marcus $ */ public class VDUBuffer { @@ -343,8 +343,10 @@ public class VDUBuffer { if (scrollDown) { if (n > (bottom - top)) n = (bottom - top); - cbuf = new char[bottom - l - (n - 1)][width]; - abuf = new int[bottom - l - (n - 1)][width]; + int size = bottom - l - (n - 1); + if(size < 0) size = 0; + cbuf = new char[size][width]; + abuf = new int[size][width]; System.arraycopy(charArray, oldBase + l, cbuf, 0, bottom - l - (n - 1)); System.arraycopy(charAttributes, oldBase + l, diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java index 34cc83a..d7be9de 100644 --- a/src/org/connectbot/ConsoleActivity.java +++ b/src/org/connectbot/ConsoleActivity.java @@ -109,6 +109,7 @@ public class ConsoleActivity extends Activity { // let them know about our prompt handler services bridge.promptHelper.setHandler(promptHandler); + bridge.refreshKeymode(); // inflate each terminal view RelativeLayout view = (RelativeLayout)inflater.inflate(R.layout.item_terminal, flip, false); @@ -387,6 +388,9 @@ public class ConsoleActivity extends Activity { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + + // if copying, then ignore + if(copying) return false; // if releasing then reset total scroll if(e2.getAction() == MotionEvent.ACTION_UP) { @@ -467,6 +471,58 @@ public class ConsoleActivity extends Activity { flip.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { + + // when copying, highlight the area + if(copying) { + if(copySource == null) return false; + int row = (int)(event.getY() / copySource.bridge.charHeight); + int col = (int)(event.getX() / copySource.bridge.charWidth); + + switch(event.getAction()) { + case MotionEvent.ACTION_DOWN: + // recording starting area + copySource.top = row; + copySource.left = col; + return false; + case MotionEvent.ACTION_MOVE: + // update selected area + copySource.bottom = row; + copySource.right = col; + copySource.invalidate(); + return false; + case MotionEvent.ACTION_UP: + // copy selected area to clipboard + int top = Math.min(copySource.top, copySource.bottom), + bottom = Math.max(copySource.top, copySource.bottom), + left = Math.min(copySource.left, copySource.right), + right = Math.max(copySource.left, copySource.right); + + // perform actual buffer copy + int size = (right - left) * (bottom - top); + StringBuffer buffer = new StringBuffer(size); + for(int y = top; y <= bottom; y++) { + for(int x = left; x <= right; x++) { + // only copy printable chars + char c = copySource.bridge.buffer.getChar(x, y); + if(c < 32 || c >= 127) c = ' '; + buffer.append(c); + } + buffer.append("\n"); + } + + clipboard.setText(buffer.toString()); + Toast.makeText(ConsoleActivity.this, String.format("Copied %d bytes to clipboard", buffer.length()), Toast.LENGTH_LONG).show(); + + case MotionEvent.ACTION_CANCEL: + // make sure we clear any highlighted area + copySource.resetSelected(); + copying = false; + return true; + } + + + } + // pass any touch events back to detector return detect.onTouchEvent(event); } @@ -520,6 +576,9 @@ public class ConsoleActivity extends Activity { protected MenuItem disconnect, copy, paste, tunnel; + protected boolean copying = false; + protected TerminalView copySource = null; + @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); @@ -528,7 +587,7 @@ public class ConsoleActivity extends Activity { boolean activeTerminal = (view instanceof TerminalView); boolean authenticated = false; if(activeTerminal) - authenticated = ((TerminalView)view).bridge.connection.isAuthenticationComplete(); + authenticated = ((TerminalView)view).bridge.fullyConnected; disconnect = menu.add("Disconnect"); disconnect.setEnabled(activeTerminal); @@ -547,8 +606,18 @@ public class ConsoleActivity extends Activity { copy = menu.add("Copy"); copy.setIcon(android.R.drawable.ic_menu_set_as); - copy.setEnabled(false && activeTerminal && authenticated); - // TODO: freeze current console, allow selection, and set clipboard to contents + copy.setEnabled(activeTerminal && authenticated); + copy.setOnMenuItemClickListener(new OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + // mark as copying and reset any previous bounds + copying = true; + copySource = (TerminalView)view; + copySource.resetSelected(); + + Toast.makeText(ConsoleActivity.this, "Touch and drag to select area to copy", Toast.LENGTH_LONG).show(); + return true; + } + }); paste = menu.add("Paste"); @@ -637,10 +706,10 @@ public class ConsoleActivity extends Activity { boolean activeTerminal = (view instanceof TerminalView); boolean authenticated = false; if(activeTerminal) - authenticated = ((TerminalView)view).bridge.connection.isAuthenticationComplete(); + authenticated = ((TerminalView)view).bridge.fullyConnected; disconnect.setEnabled(activeTerminal); - copy.setEnabled(false && activeTerminal && authenticated); + copy.setEnabled(activeTerminal && authenticated); paste.setEnabled(clipboard.hasText() && activeTerminal && authenticated); tunnel.setEnabled(activeTerminal && authenticated); diff --git a/src/org/connectbot/HostEditorActivity.java b/src/org/connectbot/HostEditorActivity.java index 84e0790..d0f628f 100644 --- a/src/org/connectbot/HostEditorActivity.java +++ b/src/org/connectbot/HostEditorActivity.java @@ -42,14 +42,12 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr public class CursorPreferenceHack implements SharedPreferences { - protected final SQLiteDatabase db; protected final String table; protected final int id; protected Map<String, String> values = new HashMap<String, String>(); - public CursorPreferenceHack(SQLiteDatabase db, String table, int id) { - this.db = db; + public CursorPreferenceHack(String table, int id) { this.table = table; this.id = id; @@ -61,6 +59,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // fill a cursor and cache the values locally // this makes sure we dont have any floating cursor to dispose later + SQLiteDatabase db = hostdb.getReadableDatabase(); Cursor cursor = db.query(table, null, "_id = ?", new String[] { Integer.toString(id) }, null, null, null); cursor.moveToFirst(); @@ -73,6 +72,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr } cursor.close(); + db.close(); } @@ -92,7 +92,9 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr public boolean commit() { Log.d(this.getClass().toString(), "commit() changes back to database"); + SQLiteDatabase db = hostdb.getWritableDatabase(); db.update(table, update, "_id = ?", new String[] { Integer.toString(id) }); + db.close(); // make sure we refresh the parent cached values cacheValues(); @@ -187,19 +189,21 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr return this.pref; } - public CursorPreferenceHack pref; + protected HostDatabase hostdb = null; + protected CursorPreferenceHack pref; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - HostDatabase db = new HostDatabase(this); int id = this.getIntent().getIntExtra(Intent.EXTRA_TITLE, -1); // TODO: we could pass through a specific ContentProvider uri here //this.getPreferenceManager().setSharedPreferencesName(uri); - this.pref = new CursorPreferenceHack(db.getWritableDatabase(), HostDatabase.TABLE_HOSTS, id); + this.hostdb = new HostDatabase(this); + + this.pref = new CursorPreferenceHack(HostDatabase.TABLE_HOSTS, id); this.pref.registerOnSharedPreferenceChangeListener(this); this.addPreferencesFromResource(R.xml.host_prefs); @@ -209,6 +213,21 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr } + public void onStart() { + super.onStart(); + if(this.hostdb == null) + this.hostdb = new HostDatabase(this); + + } + + public void onStop() { + super.onStop(); + if(this.hostdb != null) { + this.hostdb.close(); + this.hostdb = null; + } + } + public void updateSummaries() { // for all text preferences, set hint as current database value for(String key : this.pref.values.keySet()) { diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java index 6581b59..d9bc586 100644 --- a/src/org/connectbot/HostListActivity.java +++ b/src/org/connectbot/HostListActivity.java @@ -294,6 +294,7 @@ public class HostListActivity extends ListActivity { // refresh cursor because of possible sorting change if(this.hosts != null) this.hosts.close(); + if(this.hostdb == null) return; this.hosts = this.hostdb.allHosts(sortedByColor); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item_host, this.hosts, diff --git a/src/org/connectbot/R.java b/src/org/connectbot/R.java index 2e6c118..d33398a 100644 --- a/src/org/connectbot/R.java +++ b/src/org/connectbot/R.java @@ -19,6 +19,7 @@ public final class R { public static final class array { public static final int list_colors=0x7f060001; public static final int list_emulation_modes=0x7f060000; + public static final int list_keymode=0x7f060002; } public static final class attr { } @@ -68,9 +69,9 @@ public final class R { public static final int alert_disconnect_msg=0x7f070015; public static final int app_desc=0x7f070001; public static final int app_name=0x7f070000; - public static final int bind_days=0x7f07001d; - public static final int bind_hours=0x7f07001c; - public static final int bind_minutes=0x7f07001b; + public static final int bind_days=0x7f07001e; + public static final int bind_hours=0x7f07001d; + public static final int bind_minutes=0x7f07001c; public static final int button_add=0x7f070011; public static final int button_cancel=0x7f070012; public static final int button_change=0x7f070013; @@ -85,6 +86,7 @@ public final class R { public static final int msg_version=0x7f070017; public static final int pref_emulation=0x7f070018; public static final int pref_keepalive=0x7f07001a; + public static final int pref_keymode=0x7f07001b; public static final int pref_scrollback=0x7f070019; public static final int prompt_touch=0x7f07000f; public static final int resolve_connect=0x7f070009; diff --git a/src/org/connectbot/TerminalView.java b/src/org/connectbot/TerminalView.java index c25507c..23c6770 100644 --- a/src/org/connectbot/TerminalView.java +++ b/src/org/connectbot/TerminalView.java @@ -41,6 +41,15 @@ public class TerminalView extends View { protected final TerminalBridge bridge; protected final Paint paint; protected final Paint cursorPaint; + + public int top = -1, bottom = -1, left = -1, right = -1; + + public void resetSelected() { + this.top = -1; + this.bottom = -1; + this.left = -1; + this.right = -1; + } public TerminalView(Context context, TerminalBridge bridge) { super(context); @@ -92,6 +101,12 @@ public class TerminalView extends View { y + this.bridge.charHeight, cursorPaint); } + + // draw any highlighted area + if(top >= 0 && bottom >= 0 && left >= 0 && right >= 0) { + canvas.drawRect(left * this.bridge.charWidth, top * this.bridge.charHeight, + right * this.bridge.charWidth, bottom * this.bridge.charHeight, cursorPaint); + } } diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index 45cc7cb..ea677f2 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -91,9 +91,10 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal public final static int COLOR_FG_STD = 7; public final static int COLOR_BG_STD = 0; + + protected final TerminalManager manager; public final String nickname; - protected final HostDatabase hostdb; protected final String username; public String postlogin = null; @@ -126,7 +127,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal public boolean verifyServerHostKey(String hostname, int port, String serverHostKeyAlgorithm, byte[] serverHostKey) throws Exception { // read in all known hosts from hostdb - KnownHosts hosts = hostdb.getKnownHosts(); + KnownHosts hosts = manager.hostdb.getKnownHosts(); switch(hosts.verifyHostkey(hostname, serverHostKeyAlgorithm, serverHostKey)) { case KnownHosts.HOSTKEY_IS_OK: @@ -142,7 +143,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal if(result == null) return false; if(result.booleanValue()) { // save this key in known database - hostdb.saveKnownHost(hostname, serverHostKeyAlgorithm, serverHostKey); + manager.hostdb.saveKnownHost(hostname, serverHostKeyAlgorithm, serverHostKey); } return result.booleanValue(); @@ -172,14 +173,15 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal * launch thread to start SSH connection and handle any hostkey verification * and password authentication. */ - public TerminalBridge(final HostDatabase hostdb, final String nickname, final String username, final String hostname, final int port, String emulation, int scrollback) throws Exception { + public TerminalBridge(final TerminalManager manager, final String nickname, final String username, final String hostname, final int port) throws Exception { - this.hostdb = hostdb; + this.manager = manager; this.nickname = nickname; this.username = username; - this.emulation = emulation; - this.scrollback = scrollback; + this.emulation = manager.getEmulation(); + this.scrollback = manager.getScrollback(); + this.postlogin = manager.getPostLogin(nickname); // create prompt helper to relay password and hostkey requests up to gui this.promptHelper = new PromptHelper(this); @@ -314,14 +316,21 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal * Inject a specific string into this terminal. Used for post-login strings * and pasting clipboard. */ - public void injectString(String string) { - if(string == null || string.length() == 0) return; - KeyEvent[] events = keymap.getEvents(string.toCharArray()); - for(KeyEvent event : events) { - this.onKey(null, event.getKeyCode(), event); - } + public void injectString(final String string) { + new Thread(new Runnable() { + public void run() { + if(string == null || string.length() == 0) return; + KeyEvent[] events = keymap.getEvents(string.toCharArray()); + if(events == null || events.length == 0) return; + for(KeyEvent event : events) { + onKey(null, event.getKeyCode(), event); + } + } + }).start(); } + public boolean fullyConnected = false; + /** * Internal method to request actual PTY terminal once we've finished * authentication. If called before authenticated, it will just fail. @@ -367,6 +376,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal // force font-size to make sure we resizePTY as needed this.setFontSize(this.fontSize); + this.fullyConnected = true; + // finally send any post-login string, if requested this.injectString(postlogin); @@ -399,6 +410,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal }).start(); this.disconnectFlag = true; + this.fullyConnected = false; // pass notification back up to terminal manager // the manager will do any gui notification if applicable @@ -407,8 +419,14 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal } + public String keymode = null; + + public void refreshKeymode() { + this.keymode = this.manager.getKeyMode(); + } + public KeyCharacterMap keymap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD); - + /** * Handle onKey() events coming down from a {@link TerminalView} above us. * We might collect these for our internal buffer when working with hostkeys @@ -435,12 +453,16 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal // skip keys if we arent connected yet if(this.session == null) return false; - + // otherwise pass through to existing session // print normal keys if (printing) { int key = keymap.get(keyCode, event.getMetaState()); + + Log.d(TAG, Integer.toString(event.getMetaState())); + if (ctrlPressed) { + //if((event.getMetaState() & KeyEvent.META_SYM_ON) != 0) { // Support CTRL-A through CTRL-Z if (key >= 0x61 && key <= 0x79) key -= 0x60; @@ -448,26 +470,64 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal key -= 0x39; ctrlPressed = false; } + + // handle pressing f-keys + if((event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0) { + Log.d(TAG, "yay pressing an fkey"); + switch(key) { + case '!': ((vt320)buffer).keyPressed(vt320.KEY_F1, ' ', 0); return true; + case '@': ((vt320)buffer).keyPressed(vt320.KEY_F2, ' ', 0); return true; + case '#': ((vt320)buffer).keyPressed(vt320.KEY_F3, ' ', 0); return true; + case '$': ((vt320)buffer).keyPressed(vt320.KEY_F4, ' ', 0); return true; + case '%': ((vt320)buffer).keyPressed(vt320.KEY_F5, ' ', 0); return true; + case '^': ((vt320)buffer).keyPressed(vt320.KEY_F6, ' ', 0); return true; + case '&': ((vt320)buffer).keyPressed(vt320.KEY_F7, ' ', 0); return true; + case '*': ((vt320)buffer).keyPressed(vt320.KEY_F8, ' ', 0); return true; + case '(': ((vt320)buffer).keyPressed(vt320.KEY_F9, ' ', 0); return true; + case ')': ((vt320)buffer).keyPressed(vt320.KEY_F10, ' ', 0); return true; + } + } + this.stdin.write(key); return true; } + + // try handling keymode shortcuts + if("Use right-side keys".equals(this.keymode)) { + switch(keyCode) { + case KeyEvent.KEYCODE_ALT_RIGHT: this.stdin.write('/'); return true; + case KeyEvent.KEYCODE_SHIFT_RIGHT: this.stdin.write(0x09); return true; + } + } else if("Use left-side keys".equals(this.keymode)) { + switch(keyCode) { + case KeyEvent.KEYCODE_ALT_LEFT: this.stdin.write('/'); return true; + case KeyEvent.KEYCODE_SHIFT_LEFT: this.stdin.write(0x09); return true; + } + } // look for special chars switch(keyCode) { - case KeyEvent.KEYCODE_DEL: stdin.write(0x08); return true; - case KeyEvent.KEYCODE_ENTER: ((vt320)buffer).keyTyped(vt320.KEY_ENTER, ' ', event.getMetaState()); return true; - case KeyEvent.KEYCODE_DPAD_LEFT: ((vt320)buffer).keyPressed(vt320.KEY_LEFT, ' ', event.getMetaState()); return true; - case KeyEvent.KEYCODE_DPAD_UP: ((vt320)buffer).keyPressed(vt320.KEY_UP, ' ', event.getMetaState()); return true; - case KeyEvent.KEYCODE_DPAD_DOWN: ((vt320)buffer).keyPressed(vt320.KEY_DOWN, ' ', event.getMetaState()); return true; - case KeyEvent.KEYCODE_DPAD_RIGHT: ((vt320)buffer).keyPressed(vt320.KEY_RIGHT, ' ', event.getMetaState()); return true; - case KeyEvent.KEYCODE_DPAD_CENTER: - // TODO: Add some visual indication of Ctrl state - if (ctrlPressed) { - stdin.write(0x1B); // ESC - ctrlPressed = false; - } else - ctrlPressed = true; - return true; + case KeyEvent.KEYCODE_CAMERA: + this.stdin.write(0x01); + this.stdin.write(' '); + //((vt320)buffer).keyTyped('a', 'a', vt320.KEY_CONTROL); + //((vt320)buffer).keyTyped(' ', ' ', 0); + break; + + case KeyEvent.KEYCODE_DEL: stdin.write(0x08); return true; + case KeyEvent.KEYCODE_ENTER: ((vt320)buffer).keyTyped(vt320.KEY_ENTER, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_LEFT: ((vt320)buffer).keyPressed(vt320.KEY_LEFT, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_UP: ((vt320)buffer).keyPressed(vt320.KEY_UP, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_DOWN: ((vt320)buffer).keyPressed(vt320.KEY_DOWN, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_RIGHT: ((vt320)buffer).keyPressed(vt320.KEY_RIGHT, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_CENTER: + // TODO: Add some visual indication of Ctrl state + if (ctrlPressed) { + stdin.write(0x1B); // ESC + ctrlPressed = false; + } else + ctrlPressed = true; + return true; } } catch (IOException e) { diff --git a/src/org/connectbot/service/TerminalManager.java b/src/org/connectbot/service/TerminalManager.java index 1941f8b..f37315d 100644 --- a/src/org/connectbot/service/TerminalManager.java +++ b/src/org/connectbot/service/TerminalManager.java @@ -54,7 +54,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen protected HostDatabase hostdb; protected SharedPreferences prefs; - protected String pref_emulation, pref_scrollback; + protected String pref_emulation, pref_scrollback, pref_keymode; @Override public void onCreate() { @@ -62,6 +62,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen this.prefs = PreferenceManager.getDefaultSharedPreferences(this); this.pref_emulation = this.getResources().getString(R.string.pref_emulation); this.pref_scrollback = this.getResources().getString(R.string.pref_scrollback); + this.pref_keymode = this.getResources().getString(R.string.pref_keymode); this.hostdb = new HostDatabase(this); @@ -89,19 +90,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen throw new Exception("Connection already open for that nickname"); } - String emulation = prefs.getString(this.pref_emulation, "screen"); - int scrollback = 140; - try { - scrollback = Integer.parseInt(prefs.getString(this.pref_scrollback, "140")); - } catch(Exception e) { - } - - // find the post-connection string for this host - String postlogin = hostdb.getPostLogin(nickname); - - TerminalBridge bridge = new TerminalBridge(hostdb, nickname, username, hostname, port, emulation, scrollback); - bridge.disconnectListener = this; - bridge.postlogin = postlogin; + TerminalBridge bridge = new TerminalBridge(this, nickname, username, hostname, port); bridge.setOnDisconnectedListener(this); bridge.startConnection(); this.bridges.add(bridge); @@ -111,6 +100,27 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen } + public String getEmulation() { + return prefs.getString(this.pref_emulation, "screen"); + } + + public int getScrollback() { + int scrollback = 140; + try { + scrollback = Integer.parseInt(prefs.getString(this.pref_scrollback, "140")); + } catch(Exception e) { + } + return scrollback; + } + + public String getPostLogin(String nickname) { + return hostdb.getPostLogin(nickname); + } + + public String getKeyMode() { + return prefs.getString(this.pref_keymode, "Use right-side keys"); + } + /** * Open a new SSH session by reading parameters from the given URI. Follows * format <code>ssh://user@host:port/#nickname</code> |