aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Sharkey <jsharkey@jsharkey.org>2008-11-03 03:20:34 +0000
committerJeffrey Sharkey <jsharkey@jsharkey.org>2008-11-03 03:20:34 +0000
commit65ec6779ea73a8f28928b8774a1c48192b292799 (patch)
tree65f33700faf60287e0eb0eddd41da6245a9b9875
parent353657c1dd040f889470ea59e9e4367e29e59cd5 (diff)
downloadconnectbot-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.xml6
-rw-r--r--res/values/strings.xml8
-rw-r--r--res/xml/host_prefs.xml2
-rw-r--r--res/xml/preferences.xml13
-rw-r--r--src/org/connectbot/ConsoleActivity.java17
-rw-r--r--src/org/connectbot/PubkeyListActivity.java6
-rw-r--r--src/org/connectbot/service/TerminalBridge.java7
-rw-r--r--src/org/connectbot/util/PubkeyDatabase.java2
-rw-r--r--src/org/connectbot/util/UpdateHelper.java36
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();
+
+ }
}