diff options
author | Jeffrey Sharkey <jsharkey@jsharkey.org> | 2008-11-03 03:20:34 +0000 |
---|---|---|
committer | Jeffrey Sharkey <jsharkey@jsharkey.org> | 2008-11-03 03:20:34 +0000 |
commit | 65ec6779ea73a8f28928b8774a1c48192b292799 (patch) | |
tree | 65f33700faf60287e0eb0eddd41da6245a9b9875 | |
parent | 353657c1dd040f889470ea59e9e4367e29e59cd5 (diff) | |
download | connectbot-65ec6779ea73a8f28928b8774a1c48192b292799.tar.gz connectbot-65ec6779ea73a8f28928b8774a1c48192b292799.tar.bz2 connectbot-65ec6779ea73a8f28928b8774a1c48192b292799.zip |
* fixed bug where we might try loading passworded keys on startup in background service
* changed updatehelper so that user preference can change between daily/weekly/never frequency
-rw-r--r-- | res/values/arrays.xml | 6 | ||||
-rw-r--r-- | res/values/strings.xml | 8 | ||||
-rw-r--r-- | res/xml/host_prefs.xml | 2 | ||||
-rw-r--r-- | res/xml/preferences.xml | 13 | ||||
-rw-r--r-- | src/org/connectbot/ConsoleActivity.java | 17 | ||||
-rw-r--r-- | src/org/connectbot/PubkeyListActivity.java | 6 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 7 | ||||
-rw-r--r-- | src/org/connectbot/util/PubkeyDatabase.java | 2 | ||||
-rw-r--r-- | src/org/connectbot/util/UpdateHelper.java | 36 |
9 files changed, 77 insertions, 20 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 5c336f4..d10bf73 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -27,6 +27,12 @@ <item>gray</item> </string-array> + <string-array name="list_update"> + <item>@string/list_update_daily</item> + <item>@string/list_update_weekly</item> + <item>@string/list_update_never</item> + </string-array> + <string-array name="list_keymode"> <item>@string/list_keymode_right</item> <item>@string/list_keymode_left</item> diff --git a/res/values/strings.xml b/res/values/strings.xml index 7ae2f18..5dfc9aa 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -27,7 +27,7 @@ <string name="pubkey_touch_prompt">Touch this box to gather randomness: </string> <string name="pubkey_generating">Generating key...</string> <string name="pubkey_copy_clipboard">Copy signature</string> - <string name="pubkey_list_empty">Press "Menu" to\ncreate public keys.</string> + <string name="pubkey_list_empty">Tap "Menu" to create\nor import public keys.</string> <string name="pubkey_unknown_format">Unknown format</string> <string name="pubkey_change_password">Change Password</string> @@ -63,6 +63,8 @@ <string name="pref_memkeys">memkeys</string> <string name="pref_rotation">rotation</string> <string name="pref_camera">camera</string> + <string name="pref_update">update</string> + <string name="pref_lastchecked">lastchecked</string> <string name="list_keymode_right">Use right-side keys</string> <string name="list_keymode_left">Use left-side keys</string> @@ -71,6 +73,10 @@ <string name="list_pubkeyids_none">Do not use keys</string> <string name="list_pubkeyids_any">Use any unlocked key</string> + <string name="list_update_daily">Daily</string> + <string name="list_update_weekly">Weekly</string> + <string name="list_update_never">Never</string> + <string name="bind_minutes">%s minutes ago</string> <string name="bind_hours">%s hours ago</string> <string name="bind_days">%s days ago</string> diff --git a/res/xml/host_prefs.xml b/res/xml/host_prefs.xml index f827f84..9669330 100644 --- a/res/xml/host_prefs.xml +++ b/res/xml/host_prefs.xml @@ -39,7 +39,7 @@ <ListPreference android:key="pubkeyid" - android:title="Use SSH keys" + android:title="Use key authentication" android:entries="@array/list_pubkeyids" android:entryValues="@array/list_pubkeyids" /> diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 8dd2b22..dcf50b6 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -21,10 +21,19 @@ <CheckBoxPreference android:key="@string/pref_memkeys" android:title="Remember keys in memory" - android:summary="Keep unlocked SSH keys in memory until backend service is terminated (behave like 'ssh-add')" + android:summary="Keep unlocked SSH keys in memory until backend service is terminated" android:defaultValue="true" /> + <ListPreference + android:key="@string/pref_update" + android:title="Update check" + android:summary="Set the maximum frequency to check for ConnectBot updates" + android:entries="@array/list_update" + android:entryValues="@array/list_update" + android:defaultValue="@string/list_update_daily" + /> + <PreferenceCategory android:title="Terminal emulation"> @@ -62,7 +71,7 @@ <ListPreference android:key="@string/pref_keymode" android:title="Directory shortcuts" - android:summary="Select how to use Alt for '/' and Shift for Tab" + android:summary="Select how to use Alt for \'/\' and Shift for Tab" android:entries="@array/list_keymode" android:entryValues="@array/list_keymode" android:defaultValue="@string/list_keymode_right" diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java index 27afffa..b1cf8b5 100644 --- a/src/org/connectbot/ConsoleActivity.java +++ b/src/org/connectbot/ConsoleActivity.java @@ -500,16 +500,17 @@ public class ConsoleActivity extends Activity { 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), + int adjust = 0; //copySource.bridge.buffer.windowBase - copySource.bridge.buffer.screenBase; + int top = Math.min(copySource.top, copySource.bottom) + adjust, + bottom = Math.max(copySource.top, copySource.bottom) + adjust, 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++) { + 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 = ' '; @@ -524,6 +525,7 @@ public class ConsoleActivity extends Activity { case MotionEvent.ACTION_CANCEL: // make sure we clear any highlighted area copySource.resetSelected(); + copySource.invalidate(); copying = false; return true; } @@ -675,7 +677,7 @@ public class ConsoleActivity extends Activity { resize = menu.add(R.string.console_menu_resize); resize.setIcon(android.R.drawable.ic_menu_crop); - resize.setEnabled(activeTerminal); + resize.setEnabled(activeTerminal && authenticated); resize.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { final TerminalView terminal = (TerminalView)view; @@ -690,7 +692,7 @@ public class ConsoleActivity extends Activity { terminal.forceSize(width, height); } - }).create().show(); + }).setNegativeButton(R.string.button_cancel, null).create().show(); return true; } @@ -743,7 +745,8 @@ public class ConsoleActivity extends Activity { copy.setEnabled(activeTerminal && authenticated); paste.setEnabled(clipboard.hasText() && activeTerminal && authenticated); tunnel.setEnabled(activeTerminal && authenticated); - + resize.setEnabled(activeTerminal && authenticated); + return true; } diff --git a/src/org/connectbot/PubkeyListActivity.java b/src/org/connectbot/PubkeyListActivity.java index b7fd9ae..14c75f5 100644 --- a/src/org/connectbot/PubkeyListActivity.java +++ b/src/org/connectbot/PubkeyListActivity.java @@ -438,6 +438,12 @@ public class PubkeyListActivity extends ListActivity implements EventListener { .setMessage(getString(R.string.delete_message, nickname)) .setPositiveButton(R.string.delete_pos, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + + // dont forget to remove from in-memory + if(loaded) + bound.removeKey(nickname); + + // delete from backend database and update gui pubkeydb.deletePubkey(id); updateHandler.sendEmptyMessage(-1); } diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index 48ad9d9..bb1ae20 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -348,7 +348,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal } protected boolean tryPublicKey(String username, String keyNickname, Object trileadKey) throws IOException { - outputLine(String.format("Attempting 'publickey' with key '%s' [%s]...", keyNickname, trileadKey.toString())); + //outputLine(String.format("Attempting 'publickey' with key '%s' [%s]...", keyNickname, trileadKey.toString())); boolean success = connection.authenticateWithPublicKey(username, trileadKey); if(!success) outputLine(String.format("Authentication method 'publickey' with key '%s' failed", keyNickname)); @@ -376,11 +376,10 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal // if explicit pubkey defined for this host, then prompt for password as needed // otherwise just try all in-memory keys held in terminalmanager - outputLine("Attempting 'publickey' authentication"); if (pubkeyId == HostDatabase.PUBKEYID_ANY) { // try each of the in-memory keys - outputLine("Trying any loaded SSH keys"); + outputLine("Attempting 'publickey' authentication with any in-memory SSH keys"); for(String nickname : manager.loadedPubkeys.keySet()) { Object trileadKey = manager.loadedPubkeys.get(nickname); if(this.tryPublicKey(this.username, nickname, trileadKey)) { @@ -390,7 +389,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal } } else { - outputLine("Host settings requested a specific SSH key"); + outputLine("Attempting 'publickey' authentication with a specific SSH key"); // use a specific key for this host, as requested Cursor cursor = manager.pubkeydb.getPubkey(pubkeyId); if (cursor.moveToFirst()) diff --git a/src/org/connectbot/util/PubkeyDatabase.java b/src/org/connectbot/util/PubkeyDatabase.java index d3fa3d2..fa838e1 100644 --- a/src/org/connectbot/util/PubkeyDatabase.java +++ b/src/org/connectbot/util/PubkeyDatabase.java @@ -148,7 +148,7 @@ public class PubkeyDatabase extends SQLiteOpenHelper { return db.query(TABLE_PUBKEYS, new String[] { "_id", FIELD_PUBKEY_NICKNAME, FIELD_PUBKEY_TYPE, FIELD_PUBKEY_PRIVATE, FIELD_PUBKEY_PUBLIC, FIELD_PUBKEY_ENCRYPTED, FIELD_PUBKEY_STARTUP }, - FIELD_PUBKEY_STARTUP + " = 1", null, null, null, null); + FIELD_PUBKEY_STARTUP + " = 1 AND " + FIELD_PUBKEY_ENCRYPTED + " = 0", null, null, null, null); } diff --git a/src/org/connectbot/util/UpdateHelper.java b/src/org/connectbot/util/UpdateHelper.java index fc8233e..973e087 100644 --- a/src/org/connectbot/util/UpdateHelper.java +++ b/src/org/connectbot/util/UpdateHelper.java @@ -30,11 +30,15 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.net.Uri; import android.os.Handler; import android.os.Message; +import android.preference.PreferenceManager; import android.util.Log; /** @@ -93,11 +97,35 @@ public class UpdateHelper implements Runnable { } - // place version information in user-agent string to be used later - this.userAgent = String.format("%s/%s (%d)", packageName, versionName, versionCode); + // decide if we really need to check for update + Resources res = context.getResources(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + String frequency = prefs.getString(res.getString(R.string.pref_update), res.getString(R.string.list_update_daily)); + long lastChecked = prefs.getLong(res.getString(R.string.pref_lastchecked), 0); + long now = (System.currentTimeMillis() / 1000); + long passed = now - lastChecked; - // spawn thread to check for update - new Thread(this).start(); + boolean shouldCheck = false; + if(frequency.equals(res.getString(R.string.list_update_daily))) { + shouldCheck = (passed > 60 * 60 * 24); + } else if(frequency.equals(res.getString(R.string.list_update_weekly))) { + shouldCheck = (passed > 60 * 60 * 24 * 7); + } + + // place version information in user-agent string to be used later + this.userAgent = String.format("%s/%s (%d, freq=%s)", packageName, versionName, versionCode, frequency); + + if(shouldCheck) { + // spawn thread to check for update + new Thread(this).start(); + + // update our last-checked time + Editor editor = prefs.edit(); + editor.putLong(res.getString(R.string.pref_lastchecked), now); + editor.commit(); + + } } |