From 562fb9aee4a7976219c2a51038ed393f8c6e7231 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:29:34 -0700 Subject: Wrap all HostDatabase writes in a transaction --- .../java/org/connectbot/util/HostDatabase.java | 131 +++++++++++++++------ 1 file changed, 92 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index f721aeb..c3eaa8b 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -303,8 +303,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = this.getWritableDatabase(); - - db.update(TABLE_HOSTS, values, "_id = ?", new String[] { String.valueOf(host.getId()) }); + db.beginTransaction(); + try { + db.update(TABLE_HOSTS, values, "_id = ?", new String[] {String.valueOf(host.getId())}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } } @@ -316,8 +321,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = this.getWritableDatabase(); - - id = db.insert(TABLE_HOSTS, null, host.getValues()); + db.beginTransaction(); + try { + id = db.insert(TABLE_HOSTS, null, host.getValues()); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } host.setId(id); @@ -338,9 +348,14 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = getWritableDatabase(); - - db.update(TABLE_HOSTS, updates, "_id = ?", - new String[] { String.valueOf(id) }); + db.beginTransaction(); + try { + db.update(TABLE_HOSTS, updates, "_id = ?", + new String[] {String.valueOf(id)}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } @@ -356,7 +371,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = this.getWritableDatabase(); - db.delete(TABLE_HOSTS, "_id = ?", new String[] { String.valueOf(host.getId()) }); + db.beginTransaction(); + try { + db.delete(TABLE_HOSTS, "_id = ?", new String[] {String.valueOf(host.getId())}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } } @@ -594,8 +615,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = this.getWritableDatabase(); - - db.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] { String.valueOf(pubkeyId) }); + db.beginTransaction(); + try { + db.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] {String.valueOf(pubkeyId)}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } Log.d(TAG, String.format("Set all hosts using pubkey id %d to -1", pubkeyId)); @@ -649,22 +675,28 @@ public class HostDatabase extends RobustSQLiteOpenHelper { * @return true on success */ public boolean savePortForward(PortForwardBean pfb) { - boolean success = false; - synchronized (dbLock) { SQLiteDatabase db = getWritableDatabase(); + db.beginTransaction(); + try { + if (pfb.getId() < 0) { + long addedId = db.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); + if (addedId == -1) { + return false; + } + pfb.setId(addedId); + } else { + if (db.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] {String.valueOf(pfb.getId())}) <= 0) { + return false; + } + } - if (pfb.getId() < 0) { - long id = db.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); - pfb.setId(id); - success = true; - } else { - if (db.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] { String.valueOf(pfb.getId()) }) > 0) - success = true; + db.setTransactionSuccessful(); + return true; + } finally { + db.endTransaction(); } } - - return success; } /** @@ -677,7 +709,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { SQLiteDatabase db = this.getWritableDatabase(); - db.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] { String.valueOf(pfb.getId()) }); + db.beginTransaction(); + try { + db.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] {String.valueOf(pfb.getId())}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } } @@ -711,9 +749,14 @@ public class HostDatabase extends RobustSQLiteOpenHelper { if (value == Colors.defaults[number]) { synchronized (dbLock) { db = getWritableDatabase(); - - db.delete(TABLE_COLORS, - WHERE_SCHEME_AND_COLOR, whereArgs); + db.beginTransaction(); + try { + db.delete(TABLE_COLORS, + WHERE_SCHEME_AND_COLOR, whereArgs); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } } else { final ContentValues values = new ContentValues(); @@ -721,14 +764,19 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { db = getWritableDatabase(); - - final int rowsAffected = db.update(TABLE_COLORS, values, - WHERE_SCHEME_AND_COLOR, whereArgs); - - if (rowsAffected == 0) { - values.put(FIELD_COLOR_SCHEME, scheme); - values.put(FIELD_COLOR_NUMBER, number); - db.insert(TABLE_COLORS, null, values); + db.beginTransaction(); + try { + final int rowsAffected = db.update(TABLE_COLORS, values, + WHERE_SCHEME_AND_COLOR, whereArgs); + + if (rowsAffected == 0) { + values.put(FIELD_COLOR_SCHEME, scheme); + values.put(FIELD_COLOR_NUMBER, number); + db.insert(TABLE_COLORS, null, values); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); } } } @@ -780,13 +828,18 @@ public class HostDatabase extends RobustSQLiteOpenHelper { synchronized (dbLock) { db = getWritableDatabase(); + db.beginTransaction(); + try { + int rowsAffected = db.update(TABLE_COLOR_DEFAULTS, values, + schemeWhere, whereArgs); - int rowsAffected = db.update(TABLE_COLOR_DEFAULTS, values, - schemeWhere, whereArgs); - - if (rowsAffected == 0) { - values.put(FIELD_COLOR_SCHEME, scheme); - db.insert(TABLE_COLOR_DEFAULTS, null, values); + if (rowsAffected == 0) { + values.put(FIELD_COLOR_SCHEME, scheme); + db.insert(TABLE_COLOR_DEFAULTS, null, values); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); } } } -- cgit v1.2.3 From 1439f51aea7dcb8bd1320df23df92fe13f3d178f Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:29:59 -0700 Subject: Remove unnecessary nulling of parameter --- app/src/main/java/org/connectbot/util/HostDatabase.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index c3eaa8b..2f64015 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -501,7 +501,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper { String selectionValues[] = new String[selectionValuesList.size()]; selectionValuesList.toArray(selectionValues); - selectionValuesList = null; HostBean host; -- cgit v1.2.3 From f70fef25cbb10fc358598816870305400bb4d17b Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:33:26 -0700 Subject: Never close the database --- app/src/main/java/org/connectbot/util/HostDatabase.java | 3 --- app/src/main/java/org/connectbot/util/PubkeyDatabase.java | 12 ------------ 2 files changed, 15 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 2f64015..1c42dce 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -148,8 +148,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper { super(context, DB_NAME, null, DB_VERSION); this.displayDensity = context.getResources().getDisplayMetrics().density; - - getWritableDatabase().close(); } @Override @@ -216,7 +214,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper { db.execSQL("DROP TABLE IF EXISTS " + TABLE_COLORS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_COLOR_DEFAULTS); createTables(db); - db.close(); } @Override diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index 02bf5b9..3423f4b 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -100,11 +100,9 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { public void deletePubkey(PubkeyBean pubkey) { HostDatabase hostdb = new HostDatabase(context); hostdb.stopUsingPubkey(pubkey.getId()); - hostdb.close(); SQLiteDatabase db = getWritableDatabase(); db.delete(TABLE_PUBKEYS, "_id = ?", new String[] { Long.toString(pubkey.getId()) }); - db.close(); } /** @@ -164,8 +162,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { c.close(); } - db.close(); - return pubkeys; } @@ -189,8 +185,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { c.close(); } - db.close(); - return pubkey; } @@ -230,8 +224,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { c.close(); } - db.close(); - return list; } @@ -250,8 +242,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { c.close(); } - db.close(); - return nickname; } @@ -322,8 +312,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { pubkey.setId(id); } - db.close(); - return pubkey; } } -- cgit v1.2.3 From 1505987f9d090829e63cee3b6f60b2d8605701c0 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:38:53 -0700 Subject: Wrap pubkey database writes in transactions --- .../java/org/connectbot/util/PubkeyDatabase.java | 35 +++++++++++++++------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index 3423f4b..a8f8175 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -102,7 +102,13 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { hostdb.stopUsingPubkey(pubkey.getId()); SQLiteDatabase db = getWritableDatabase(); - db.delete(TABLE_PUBKEYS, "_id = ?", new String[] { Long.toString(pubkey.getId()) }); + db.beginTransaction(); + try { + db.delete(TABLE_PUBKEYS, "_id = ?", new String[] {Long.toString(pubkey.getId())}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } /** @@ -301,17 +307,26 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { ContentValues values = pubkey.getValues(); - if (pubkey.getId() > 0) { - values.remove("_id"); - if (db.update(TABLE_PUBKEYS, values, "_id = ?", new String[] { String.valueOf(pubkey.getId()) }) > 0) - success = true; - } + db.beginTransaction(); + try { + if (pubkey.getId() > 0) { + values.remove("_id"); + if (db.update(TABLE_PUBKEYS, values, "_id = ?", new String[] {String.valueOf(pubkey.getId())}) > 0) + success = true; + } - if (!success) { - long id = db.insert(TABLE_PUBKEYS, null, pubkey.getValues()); - pubkey.setId(id); - } + if (!success) { + long id = db.insert(TABLE_PUBKEYS, null, pubkey.getValues()); + if (id != -1) { + // TODO add some error handling here? + pubkey.setId(id); + } + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } return pubkey; } } -- cgit v1.2.3 From b89c2aca1bb78202bfc7be36ba5d06e6bbe75642 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:39:13 -0700 Subject: Add some Javadoc to PubkeyDatabase --- app/src/main/java/org/connectbot/util/PubkeyDatabase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index a8f8175..5438e1b 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -172,8 +172,8 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { } /** - * @param hostId - * @return + * @param pubkeyId database ID for a desired pubkey + * @return object representing the pubkey */ public PubkeyBean findPubkeyById(long pubkeyId) { SQLiteDatabase db = getReadableDatabase(); -- cgit v1.2.3 From 278ff1a5fd6762d4f2fbdc224f6545ff1a810d17 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:39:51 -0700 Subject: Remove commented PubkeyDatabase code --- .../java/org/connectbot/util/PubkeyDatabase.java | 59 ---------------------- 1 file changed, 59 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index 5438e1b..026b9e8 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -111,18 +111,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { } } - /** - * Return a cursor that contains information about all known hosts. - */ - /* - public Cursor allPubkeys() { - SQLiteDatabase db = this.getReadableDatabase(); - 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 }, - null, null, null, null, null); - }*/ - public List allPubkeys() { return getPubkeys(null, null); } @@ -251,53 +239,6 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { return nickname; } -/* - public void setOnStart(long id, boolean onStart) { - - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(FIELD_PUBKEY_STARTUP, onStart ? 1 : 0); - - db.update(TABLE_PUBKEYS, values, "_id = ?", new String[] { Long.toString(id) }); - - } - - public boolean changePassword(long id, String oldPassword, String newPassword) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException { - SQLiteDatabase db = this.getWritableDatabase(); - - Cursor c = db.query(TABLE_PUBKEYS, new String[] { FIELD_PUBKEY_TYPE, - FIELD_PUBKEY_PRIVATE, FIELD_PUBKEY_ENCRYPTED }, - "_id = ?", new String[] { String.valueOf(id) }, - null, null, null); - - if (!c.moveToFirst()) - return false; - - String keyType = c.getString(0); - byte[] encPriv = c.getBlob(1); - c.close(); - - PrivateKey priv; - try { - priv = PubkeyUtils.decodePrivate(encPriv, keyType, oldPassword); - } catch (InvalidKeyException e) { - return false; - } catch (BadPaddingException e) { - return false; - } catch (InvalidKeySpecException e) { - return false; - } - - ContentValues values = new ContentValues(); - values.put(FIELD_PUBKEY_PRIVATE, PubkeyUtils.getEncodedPrivate(priv, newPassword)); - values.put(FIELD_PUBKEY_ENCRYPTED, newPassword.length() > 0 ? 1 : 0); - db.update(TABLE_PUBKEYS, values, "_id = ?", new String[] { String.valueOf(id) }); - - return true; - } - */ - /** * @param pubkey */ -- cgit v1.2.3 From e3832c059545e8519b33aa9e35d1cbb9f95d69c3 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:43:27 -0700 Subject: Create singleton accessors of HostDatabase and PubkeyDatabase --- app/src/main/java/org/connectbot/util/HostDatabase.java | 15 +++++++++++++++ .../main/java/org/connectbot/util/PubkeyDatabase.java | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 1c42dce..abb4c5b 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -144,6 +144,21 @@ public class HostDatabase extends RobustSQLiteOpenHelper { /** Used during upgrades from DB version 23 to 24. */ private final float displayDensity; + private static final Object sInstanceLock = new Object(); + + private static HostDatabase sInstance; + + public static HostDatabase get(Context context) { + synchronized (sInstanceLock) { + if (sInstance != null) { + return sInstance; + } + + sInstance = new HostDatabase(context.getApplicationContext()); + return sInstance; + } + } + public HostDatabase(Context context) { super(context, DB_NAME, null, DB_VERSION); diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index 026b9e8..e3ca784 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -61,6 +61,22 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { addTableName(TABLE_PUBKEYS); } + private static final Object sInstanceLock = new Object(); + + private static PubkeyDatabase sInstance; + + public static PubkeyDatabase get(Context context) { + synchronized (sInstanceLock) { + if (sInstance != null) { + return sInstance; + } + + Context appContext = context.getApplicationContext(); + sInstance = new PubkeyDatabase(appContext); + return sInstance; + } + } + public PubkeyDatabase(Context context) { super(context, DB_NAME, null, DB_VERSION); -- cgit v1.2.3 From ddce34d05820a01a3505c13779923160a6a268dd Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:46:35 -0700 Subject: Change all database accessors to use singleton --- app/src/androidTest/java/org/connectbot/StartupTest.java | 2 +- app/src/main/java/org/connectbot/ColorsActivity.java | 4 ++-- app/src/main/java/org/connectbot/GeneratePubkeyActivity.java | 2 +- app/src/main/java/org/connectbot/HostEditorActivity.java | 8 ++++---- app/src/main/java/org/connectbot/HostListActivity.java | 6 +++--- app/src/main/java/org/connectbot/PortForwardListActivity.java | 4 ++-- app/src/main/java/org/connectbot/PubkeyListActivity.java | 6 +++--- app/src/main/java/org/connectbot/service/TerminalManager.java | 4 ++-- app/src/main/java/org/connectbot/util/PubkeyDatabase.java | 2 +- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java index a60d00e..2dc75dd 100644 --- a/app/src/androidTest/java/org/connectbot/StartupTest.java +++ b/app/src/androidTest/java/org/connectbot/StartupTest.java @@ -58,7 +58,7 @@ public class StartupTest { @Before public void makeDatabasePristine() { - HostDatabase db = new HostDatabase(InstrumentationRegistry.getTargetContext()); + HostDatabase db = HostDatabase.get(InstrumentationRegistry.getTargetContext()); db.resetDatabase(); mActivityRule.launchActivity(new Intent()); diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index be5dfb1..54f52da 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -74,7 +74,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mColorScheme = HostDatabase.DEFAULT_COLOR_SCHEME; - mHostDb = new HostDatabase(this); + mHostDb = HostDatabase.get(this); mColorList = Arrays.asList(mHostDb.getColorsForScheme(mColorScheme)); mDefaultColors = mHostDb.getDefaultColorsForScheme(mColorScheme); @@ -110,7 +110,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC super.onResume(); if (mHostDb == null) - mHostDb = new HostDatabase(this); + mHostDb = HostDatabase.get(this); } private class ColorsAdapter extends BaseAdapter { diff --git a/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java b/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java index 7510394..55e84ac 100644 --- a/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java +++ b/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java @@ -298,7 +298,7 @@ public class GeneratePubkeyActivity extends Activity implements OnEntropyGathere pubkey.setStartup(unlockAtStartup.isChecked()); pubkey.setConfirmUse(confirmUse.isChecked()); - PubkeyDatabase pubkeydb = new PubkeyDatabase(GeneratePubkeyActivity.this); + PubkeyDatabase pubkeydb = PubkeyDatabase.get(GeneratePubkeyActivity.this); pubkeydb.savePubkey(pubkey); pubkeydb.close(); } catch (Exception e) { diff --git a/app/src/main/java/org/connectbot/HostEditorActivity.java b/app/src/main/java/org/connectbot/HostEditorActivity.java index 3976858..6bd7b14 100644 --- a/app/src/main/java/org/connectbot/HostEditorActivity.java +++ b/app/src/main/java/org/connectbot/HostEditorActivity.java @@ -244,8 +244,8 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // TODO: we could pass through a specific ContentProvider uri here //this.getPreferenceManager().setSharedPreferencesName(uri); - this.hostdb = new HostDatabase(this); - this.pubkeydb = new PubkeyDatabase(this); + this.hostdb = HostDatabase.get(this); + this.pubkeydb = PubkeyDatabase.get(this); host = hostdb.findHostById(hostId); @@ -307,10 +307,10 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); if (this.hostdb == null) - this.hostdb = new HostDatabase(this); + this.hostdb = HostDatabase.get(this); if (this.pubkeydb == null) - this.pubkeydb = new PubkeyDatabase(this); + this.pubkeydb = PubkeyDatabase.get(this); } @Override diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index 0e6fa3e..f2a0d93 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -127,7 +127,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); if (this.hostdb == null) - this.hostdb = new HostDatabase(this); + this.hostdb = HostDatabase.get(this); } @Override @@ -210,7 +210,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange || Intent.ACTION_PICK.equals(getIntent().getAction()); // connect with hosts database and populate list - this.hostdb = new HostDatabase(this); + this.hostdb = HostDatabase.get(this); ListView list = this.getListView(); this.sortedByColor = prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false); @@ -490,7 +490,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange } if (hostdb == null) - hostdb = new HostDatabase(this); + hostdb = HostDatabase.get(this); hosts = hostdb.getHosts(sortedByColor); diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index c1a6b75..84e9ab8 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -85,7 +85,7 @@ public class PortForwardListActivity extends ListActivity { this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); if (this.hostdb == null) - this.hostdb = new HostDatabase(this); + this.hostdb = HostDatabase.get(this); } @Override @@ -109,7 +109,7 @@ public class PortForwardListActivity extends ListActivity { setContentView(R.layout.act_portforwardlist); // connect with hosts database and populate list - this.hostdb = new HostDatabase(this); + this.hostdb = HostDatabase.get(this); host = hostdb.findHostById(hostId); { diff --git a/app/src/main/java/org/connectbot/PubkeyListActivity.java b/app/src/main/java/org/connectbot/PubkeyListActivity.java index 6004327..2f2b0c2 100644 --- a/app/src/main/java/org/connectbot/PubkeyListActivity.java +++ b/app/src/main/java/org/connectbot/PubkeyListActivity.java @@ -121,7 +121,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); if (pubkeydb == null) - pubkeydb = new PubkeyDatabase(this); + pubkeydb = PubkeyDatabase.get(this); } @Override @@ -146,7 +146,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { getResources().getText(R.string.title_pubkey_list))); // connect with hosts database and populate list - pubkeydb = new PubkeyDatabase(this); + pubkeydb = PubkeyDatabase.get(this); updateList(); @@ -546,7 +546,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { // write new value into database if (pubkeydb == null) - pubkeydb = new PubkeyDatabase(this); + pubkeydb = PubkeyDatabase.get(this); pubkeydb.savePubkey(pubkey); updateList(); diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 5416ddb..7e0f4c7 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -129,8 +129,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen pubkeyTimer = new Timer("pubkeyTimer", true); - hostdb = new HostDatabase(this); - pubkeydb = new PubkeyDatabase(this); + hostdb = HostDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); // load all marked pubkeys into memory updateSavingKeys(); diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index e3ca784..dfa3ef6 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -114,7 +114,7 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { * Delete a specific host by its _id value. */ public void deletePubkey(PubkeyBean pubkey) { - HostDatabase hostdb = new HostDatabase(context); + HostDatabase hostdb = HostDatabase.get(context); hostdb.stopUsingPubkey(pubkey.getId()); SQLiteDatabase db = getWritableDatabase(); -- cgit v1.2.3 From c22b5516b27a4c5a75992b794e5be9d9ac3e3d47 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:48:20 -0700 Subject: Make database constructors private --- app/src/main/java/org/connectbot/util/HostDatabase.java | 2 +- app/src/main/java/org/connectbot/util/PubkeyDatabase.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index abb4c5b..e842dad 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -159,7 +159,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } } - public HostDatabase(Context context) { + private HostDatabase(Context context) { super(context, DB_NAME, null, DB_VERSION); this.displayDensity = context.getResources().getDisplayMetrics().density; diff --git a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java index dfa3ef6..c66c8bf 100644 --- a/app/src/main/java/org/connectbot/util/PubkeyDatabase.java +++ b/app/src/main/java/org/connectbot/util/PubkeyDatabase.java @@ -77,7 +77,7 @@ public class PubkeyDatabase extends RobustSQLiteOpenHelper { } } - public PubkeyDatabase(Context context) { + private PubkeyDatabase(Context context) { super(context, DB_NAME, null, DB_VERSION); this.context = context; -- cgit v1.2.3 From 40d14f414255c5b06b6e31fc8894cbda79ca5fd6 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 12:58:41 -0700 Subject: Use in-memory database for instrumentation testing --- .../androidTest/java/org/connectbot/StartupTest.java | 3 +-- app/src/main/java/org/connectbot/util/HostDatabase.java | 17 +++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java index 2dc75dd..6bde448 100644 --- a/app/src/androidTest/java/org/connectbot/StartupTest.java +++ b/app/src/androidTest/java/org/connectbot/StartupTest.java @@ -58,8 +58,7 @@ public class StartupTest { @Before public void makeDatabasePristine() { - HostDatabase db = HostDatabase.get(InstrumentationRegistry.getTargetContext()); - db.resetDatabase(); + HostDatabase.resetInMemoryInstance(InstrumentationRegistry.getTargetContext()); mActivityRule.launchActivity(new Intent()); } diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index e842dad..bfa6c33 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -160,7 +160,11 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } private HostDatabase(Context context) { - super(context, DB_NAME, null, DB_VERSION); + this(context, DB_NAME); + } + + private HostDatabase(Context context, String dbName) { + super(context, dbName, null, DB_VERSION); this.displayDensity = context.getResources().getDisplayMetrics().density; } @@ -222,13 +226,10 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } @VisibleForTesting - public void resetDatabase() { - SQLiteDatabase db = getWritableDatabase(); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_HOSTS); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_PORTFORWARDS); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_COLORS); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_COLOR_DEFAULTS); - createTables(db); + public static void resetInMemoryInstance(Context context) { + synchronized (sInstanceLock) { + sInstance = new HostDatabase(context, null); + } } @Override -- cgit v1.2.3 From 65710ecdfcc1bedda5bf2ec0a03981217ec178c8 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 20:52:09 -0700 Subject: Use member database handle in HostDatabase --- .../java/org/connectbot/util/HostDatabase.java | 130 +++++++++------------ 1 file changed, 54 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index bfa6c33..62e21f2 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -148,6 +148,8 @@ public class HostDatabase extends RobustSQLiteOpenHelper { private static HostDatabase sInstance; + private final SQLiteDatabase mDb; + public static HostDatabase get(Context context) { synchronized (sInstanceLock) { if (sInstance != null) { @@ -167,6 +169,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { super(context, dbName, null, DB_VERSION); this.displayDensity = context.getResources().getDisplayMetrics().density; + mDb = getWritableDatabase(); } @Override @@ -315,13 +318,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_HOST_LASTCONNECT, now); synchronized (dbLock) { - SQLiteDatabase db = this.getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.update(TABLE_HOSTS, values, "_id = ?", new String[] {String.valueOf(host.getId())}); - db.setTransactionSuccessful(); + mDb.update(TABLE_HOSTS, values, "_id = ?", new String[] {String.valueOf(host.getId())}); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } @@ -333,13 +335,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { long id; synchronized (dbLock) { - SQLiteDatabase db = this.getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - id = db.insert(TABLE_HOSTS, null, host.getValues()); - db.setTransactionSuccessful(); + id = mDb.insert(TABLE_HOSTS, null, host.getValues()); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } @@ -360,14 +361,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { updates.put(FIELD_HOST_FONTSIZE, host.getFontSize()); synchronized (dbLock) { - SQLiteDatabase db = getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.update(TABLE_HOSTS, updates, "_id = ?", + mDb.update(TABLE_HOSTS, updates, "_id = ?", new String[] {String.valueOf(id)}); - db.setTransactionSuccessful(); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } @@ -383,13 +383,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { return; synchronized (dbLock) { - SQLiteDatabase db = this.getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.delete(TABLE_HOSTS, "_id = ?", new String[] {String.valueOf(host.getId())}); - db.setTransactionSuccessful(); + mDb.delete(TABLE_HOSTS, "_id = ?", new String[] {String.valueOf(host.getId())}); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } @@ -403,9 +402,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { List hosts; synchronized (dbLock) { - SQLiteDatabase db = this.getReadableDatabase(); - - Cursor c = db.query(TABLE_HOSTS, null, null, null, null, null, sortField + " ASC"); + Cursor c = mDb.query(TABLE_HOSTS, null, null, null, null, null, sortField + " ASC"); hosts = createHostBeans(c); @@ -518,9 +515,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { HostBean host; synchronized (dbLock) { - SQLiteDatabase db = getReadableDatabase(); - - Cursor c = db.query(TABLE_HOSTS, null, + Cursor c = mDb.query(TABLE_HOSTS, null, selectionBuilder.toString(), selectionValues, null, null, null); @@ -539,9 +534,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { HostBean host; synchronized (dbLock) { - SQLiteDatabase db = getReadableDatabase(); - - Cursor c = db.query(TABLE_HOSTS, null, + Cursor c = mDb.query(TABLE_HOSTS, null, "_id = ?", new String[] { String.valueOf(hostId) }, null, null, null); @@ -564,9 +557,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_HOST_HOSTKEY, hostkey); synchronized (dbLock) { - SQLiteDatabase db = getReadableDatabase(); - - db.update(TABLE_HOSTS, values, + mDb.update(TABLE_HOSTS, values, FIELD_HOST_HOSTNAME + " = ? AND " + FIELD_HOST_PORT + " = ?", new String[] { hostname, String.valueOf(port) }); Log.d(TAG, String.format("Finished saving hostkey information for '%s'", hostname)); @@ -581,8 +572,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { KnownHosts known = new KnownHosts(); synchronized (dbLock) { - SQLiteDatabase db = this.getReadableDatabase(); - Cursor c = db.query(TABLE_HOSTS, new String[] { FIELD_HOST_HOSTNAME, + Cursor c = mDb.query(TABLE_HOSTS, new String[] { FIELD_HOST_HOSTNAME, FIELD_HOST_PORT, FIELD_HOST_HOSTKEYALGO, FIELD_HOST_HOSTKEY }, null, null, null, null, null); @@ -626,13 +616,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_HOST_PUBKEYID, PUBKEYID_ANY); synchronized (dbLock) { - SQLiteDatabase db = this.getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] {String.valueOf(pubkeyId)}); - db.setTransactionSuccessful(); + mDb.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] {String.valueOf(pubkeyId)}); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } @@ -655,9 +644,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } synchronized (dbLock) { - SQLiteDatabase db = this.getReadableDatabase(); - - Cursor c = db.query(TABLE_PORTFORWARDS, new String[] { + Cursor c = mDb.query(TABLE_PORTFORWARDS, new String[] { "_id", FIELD_PORTFORWARD_NICKNAME, FIELD_PORTFORWARD_TYPE, FIELD_PORTFORWARD_SOURCEPORT, FIELD_PORTFORWARD_DESTADDR, FIELD_PORTFORWARD_DESTPORT }, FIELD_PORTFORWARD_HOSTID + " = ?", new String[] { String.valueOf(host.getId()) }, @@ -688,25 +675,24 @@ public class HostDatabase extends RobustSQLiteOpenHelper { */ public boolean savePortForward(PortForwardBean pfb) { synchronized (dbLock) { - SQLiteDatabase db = getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { if (pfb.getId() < 0) { - long addedId = db.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); + long addedId = mDb.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); if (addedId == -1) { return false; } pfb.setId(addedId); } else { - if (db.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] {String.valueOf(pfb.getId())}) <= 0) { + if (mDb.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] {String.valueOf(pfb.getId())}) <= 0) { return false; } } - db.setTransactionSuccessful(); + mDb.setTransactionSuccessful(); return true; } finally { - db.endTransaction(); + mDb.endTransaction(); } } } @@ -720,13 +706,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { return; synchronized (dbLock) { - SQLiteDatabase db = this.getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] {String.valueOf(pfb.getId())}); - db.setTransactionSuccessful(); + mDb.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] {String.valueOf(pfb.getId())}); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } @@ -735,9 +720,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { Integer[] colors = Colors.defaults.clone(); synchronized (dbLock) { - SQLiteDatabase db = getReadableDatabase(); - - Cursor c = db.query(TABLE_COLORS, new String[] { + Cursor c = mDb.query(TABLE_COLORS, new String[] { FIELD_COLOR_NUMBER, FIELD_COLOR_VALUE }, FIELD_COLOR_SCHEME + " = ?", new String[] { String.valueOf(scheme) }, @@ -760,14 +743,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { if (value == Colors.defaults[number]) { synchronized (dbLock) { - db = getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - db.delete(TABLE_COLORS, + mDb.delete(TABLE_COLORS, WHERE_SCHEME_AND_COLOR, whereArgs); - db.setTransactionSuccessful(); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } else { @@ -775,20 +757,19 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_COLOR_VALUE, value); synchronized (dbLock) { - db = getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - final int rowsAffected = db.update(TABLE_COLORS, values, + final int rowsAffected = mDb.update(TABLE_COLORS, values, WHERE_SCHEME_AND_COLOR, whereArgs); if (rowsAffected == 0) { values.put(FIELD_COLOR_SCHEME, scheme); values.put(FIELD_COLOR_NUMBER, number); - db.insert(TABLE_COLORS, null, values); + mDb.insert(TABLE_COLORS, null, values); } - db.setTransactionSuccessful(); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } @@ -802,9 +783,7 @@ public class HostDatabase extends RobustSQLiteOpenHelper { int[] colors = new int[] { DEFAULT_FG_COLOR, DEFAULT_BG_COLOR }; synchronized (dbLock) { - SQLiteDatabase db = getReadableDatabase(); - - Cursor c = db.query(TABLE_COLOR_DEFAULTS, + Cursor c = mDb.query(TABLE_COLOR_DEFAULTS, new String[] { FIELD_COLOR_FG, FIELD_COLOR_BG }, FIELD_COLOR_SCHEME + " = ?", new String[] { String.valueOf(scheme) }, @@ -839,19 +818,18 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_COLOR_BG, bg); synchronized (dbLock) { - db = getWritableDatabase(); - db.beginTransaction(); + mDb.beginTransaction(); try { - int rowsAffected = db.update(TABLE_COLOR_DEFAULTS, values, + int rowsAffected = mDb.update(TABLE_COLOR_DEFAULTS, values, schemeWhere, whereArgs); if (rowsAffected == 0) { values.put(FIELD_COLOR_SCHEME, scheme); - db.insert(TABLE_COLOR_DEFAULTS, null, values); + mDb.insert(TABLE_COLOR_DEFAULTS, null, values); } - db.setTransactionSuccessful(); + mDb.setTransactionSuccessful(); } finally { - db.endTransaction(); + mDb.endTransaction(); } } } -- cgit v1.2.3 From 3261fee2eae9b4e0f5b6a39b4422f7419e79812d Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 20:56:23 -0700 Subject: Remove dbLock from HostDatabase --- .../java/org/connectbot/util/HostDatabase.java | 339 +++++++++------------ 1 file changed, 148 insertions(+), 191 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 62e21f2..067dc80 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -139,8 +139,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper { addIndexName(TABLE_COLOR_DEFAULTS + FIELD_COLOR_SCHEME + "index"); } - public static final Object[] dbLock = new Object[0]; - /** Used during upgrades from DB version 23 to 24. */ private final float displayDensity; @@ -317,14 +315,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { ContentValues values = new ContentValues(); values.put(FIELD_HOST_LASTCONNECT, now); - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.update(TABLE_HOSTS, values, "_id = ?", new String[] {String.valueOf(host.getId())}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + mDb.update(TABLE_HOSTS, values, "_id = ?", new String[] {String.valueOf(host.getId())}); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } @@ -334,14 +330,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { public HostBean saveHost(HostBean host) { long id; - synchronized (dbLock) { - mDb.beginTransaction(); - try { - id = mDb.insert(TABLE_HOSTS, null, host.getValues()); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + id = mDb.insert(TABLE_HOSTS, null, host.getValues()); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } host.setId(id); @@ -360,16 +354,13 @@ public class HostDatabase extends RobustSQLiteOpenHelper { ContentValues updates = new ContentValues(); updates.put(FIELD_HOST_FONTSIZE, host.getFontSize()); - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.update(TABLE_HOSTS, updates, "_id = ?", - new String[] {String.valueOf(id)}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } - + mDb.beginTransaction(); + try { + mDb.update(TABLE_HOSTS, updates, "_id = ?", + new String[] {String.valueOf(id)}); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } return true; @@ -379,17 +370,16 @@ public class HostDatabase extends RobustSQLiteOpenHelper { * Delete a specific host by its _id value. */ public void deleteHost(HostBean host) { - if (host.getId() < 0) + if (host.getId() < 0) { return; + } - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.delete(TABLE_HOSTS, "_id = ?", new String[] {String.valueOf(host.getId())}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + mDb.delete(TABLE_HOSTS, "_id = ?", new String[] {String.valueOf(host.getId())}); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } @@ -401,13 +391,11 @@ public class HostDatabase extends RobustSQLiteOpenHelper { String sortField = sortColors ? FIELD_HOST_COLOR : FIELD_HOST_NICKNAME; List hosts; - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_HOSTS, null, null, null, null, null, sortField + " ASC"); + Cursor c = mDb.query(TABLE_HOSTS, null, null, null, null, null, sortField + " ASC"); - hosts = createHostBeans(c); + hosts = createHostBeans(c); - c.close(); - } + c.close(); return hosts; } @@ -512,16 +500,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { String selectionValues[] = new String[selectionValuesList.size()]; selectionValuesList.toArray(selectionValues); - HostBean host; + Cursor c = mDb.query(TABLE_HOSTS, null, + selectionBuilder.toString(), + selectionValues, + null, null, null); - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_HOSTS, null, - selectionBuilder.toString(), - selectionValues, - null, null, null); - - host = getFirstHostBean(c); - } + HostBean host = getFirstHostBean(c); return host; } @@ -531,17 +515,11 @@ public class HostDatabase extends RobustSQLiteOpenHelper { * @return host matching the hostId or {@code null} if none match */ public HostBean findHostById(long hostId) { - HostBean host; - - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_HOSTS, null, - "_id = ?", new String[] { String.valueOf(hostId) }, - null, null, null); + Cursor c = mDb.query(TABLE_HOSTS, null, + "_id = ?", new String[] {String.valueOf(hostId)}, + null, null, null); - host = getFirstHostBean(c); - } - - return host; + return getFirstHostBean(c); } /** @@ -556,12 +534,10 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_HOST_HOSTKEYALGO, hostkeyalgo); values.put(FIELD_HOST_HOSTKEY, hostkey); - synchronized (dbLock) { - mDb.update(TABLE_HOSTS, values, - FIELD_HOST_HOSTNAME + " = ? AND " + FIELD_HOST_PORT + " = ?", - new String[] { hostname, String.valueOf(port) }); - Log.d(TAG, String.format("Finished saving hostkey information for '%s'", hostname)); - } + mDb.update(TABLE_HOSTS, values, + FIELD_HOST_HOSTNAME + " = ? AND " + FIELD_HOST_PORT + " = ?", + new String[] {hostname, String.valueOf(port)}); + Log.d(TAG, String.format("Finished saving hostkey information for '%s'", hostname)); } /** @@ -571,35 +547,33 @@ public class HostDatabase extends RobustSQLiteOpenHelper { public KnownHosts getKnownHosts() { KnownHosts known = new KnownHosts(); - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_HOSTS, new String[] { FIELD_HOST_HOSTNAME, - FIELD_HOST_PORT, FIELD_HOST_HOSTKEYALGO, FIELD_HOST_HOSTKEY }, - null, null, null, null, null); + Cursor c = mDb.query(TABLE_HOSTS, new String[] {FIELD_HOST_HOSTNAME, + FIELD_HOST_PORT, FIELD_HOST_HOSTKEYALGO, FIELD_HOST_HOSTKEY}, + null, null, null, null, null); - if (c != null) { - int COL_HOSTNAME = c.getColumnIndexOrThrow(FIELD_HOST_HOSTNAME), + if (c != null) { + int COL_HOSTNAME = c.getColumnIndexOrThrow(FIELD_HOST_HOSTNAME), COL_PORT = c.getColumnIndexOrThrow(FIELD_HOST_PORT), COL_HOSTKEYALGO = c.getColumnIndexOrThrow(FIELD_HOST_HOSTKEYALGO), COL_HOSTKEY = c.getColumnIndexOrThrow(FIELD_HOST_HOSTKEY); - while (c.moveToNext()) { - String hostname = c.getString(COL_HOSTNAME), + while (c.moveToNext()) { + String hostname = c.getString(COL_HOSTNAME), hostkeyalgo = c.getString(COL_HOSTKEYALGO); - int port = c.getInt(COL_PORT); - byte[] hostkey = c.getBlob(COL_HOSTKEY); + int port = c.getInt(COL_PORT); + byte[] hostkey = c.getBlob(COL_HOSTKEY); - if (hostkeyalgo == null || hostkeyalgo.length() == 0) continue; - if (hostkey == null || hostkey.length == 0) continue; + if (hostkeyalgo == null || hostkeyalgo.length() == 0) continue; + if (hostkey == null || hostkey.length == 0) continue; - try { - known.addHostkey(new String[] { String.format("%s:%d", hostname, port) }, hostkeyalgo, hostkey); - } catch (Exception e) { - Log.e(TAG, "Problem while adding a known host from database", e); - } + try { + known.addHostkey(new String[] {String.format("%s:%d", hostname, port)}, hostkeyalgo, hostkey); + } catch (Exception e) { + Log.e(TAG, "Problem while adding a known host from database", e); } - - c.close(); } + + c.close(); } return known; @@ -615,14 +589,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper { ContentValues values = new ContentValues(); values.put(FIELD_HOST_PUBKEYID, PUBKEYID_ANY); - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] {String.valueOf(pubkeyId)}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + mDb.update(TABLE_HOSTS, values, FIELD_HOST_PUBKEYID + " = ?", new String[] {String.valueOf(pubkeyId)}); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } Log.d(TAG, String.format("Set all hosts using pubkey id %d to -1", pubkeyId)); @@ -643,15 +615,14 @@ public class HostDatabase extends RobustSQLiteOpenHelper { return portForwards; } - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_PORTFORWARDS, new String[] { - "_id", FIELD_PORTFORWARD_NICKNAME, FIELD_PORTFORWARD_TYPE, FIELD_PORTFORWARD_SOURCEPORT, - FIELD_PORTFORWARD_DESTADDR, FIELD_PORTFORWARD_DESTPORT }, - FIELD_PORTFORWARD_HOSTID + " = ?", new String[] { String.valueOf(host.getId()) }, - null, null, null); + Cursor c = mDb.query(TABLE_PORTFORWARDS, new String[] { + "_id", FIELD_PORTFORWARD_NICKNAME, FIELD_PORTFORWARD_TYPE, FIELD_PORTFORWARD_SOURCEPORT, + FIELD_PORTFORWARD_DESTADDR, FIELD_PORTFORWARD_DESTPORT}, + FIELD_PORTFORWARD_HOSTID + " = ?", new String[] {String.valueOf(host.getId())}, + null, null, null); - while (c.moveToNext()) { - PortForwardBean pfb = new PortForwardBean( + while (c.moveToNext()) { + PortForwardBean pfb = new PortForwardBean( c.getInt(0), host.getId(), c.getString(1), @@ -659,12 +630,11 @@ public class HostDatabase extends RobustSQLiteOpenHelper { c.getInt(3), c.getString(4), c.getInt(5)); - portForwards.add(pfb); - } - - c.close(); + portForwards.add(pfb); } + c.close(); + return portForwards; } @@ -674,26 +644,24 @@ public class HostDatabase extends RobustSQLiteOpenHelper { * @return true on success */ public boolean savePortForward(PortForwardBean pfb) { - synchronized (dbLock) { - mDb.beginTransaction(); - try { - if (pfb.getId() < 0) { - long addedId = mDb.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); - if (addedId == -1) { - return false; - } - pfb.setId(addedId); - } else { - if (mDb.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] {String.valueOf(pfb.getId())}) <= 0) { - return false; - } + mDb.beginTransaction(); + try { + if (pfb.getId() < 0) { + long addedId = mDb.insert(TABLE_PORTFORWARDS, null, pfb.getValues()); + if (addedId == -1) { + return false; + } + pfb.setId(addedId); + } else { + if (mDb.update(TABLE_PORTFORWARDS, pfb.getValues(), "_id = ?", new String[] {String.valueOf(pfb.getId())}) <= 0) { + return false; } - - mDb.setTransactionSuccessful(); - return true; - } finally { - mDb.endTransaction(); } + + mDb.setTransactionSuccessful(); + return true; + } finally { + mDb.endTransaction(); } } @@ -702,37 +670,34 @@ public class HostDatabase extends RobustSQLiteOpenHelper { * @param pfb {@link PortForwardBean} to delete */ public void deletePortForward(PortForwardBean pfb) { - if (pfb.getId() < 0) + if (pfb.getId() < 0) { return; + } - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] {String.valueOf(pfb.getId())}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + mDb.delete(TABLE_PORTFORWARDS, "_id = ?", new String[] {String.valueOf(pfb.getId())}); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } public Integer[] getColorsForScheme(int scheme) { Integer[] colors = Colors.defaults.clone(); - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_COLORS, new String[] { - FIELD_COLOR_NUMBER, FIELD_COLOR_VALUE }, - FIELD_COLOR_SCHEME + " = ?", - new String[] { String.valueOf(scheme) }, - null, null, null); + Cursor c = mDb.query(TABLE_COLORS, new String[] { + FIELD_COLOR_NUMBER, FIELD_COLOR_VALUE}, + FIELD_COLOR_SCHEME + " = ?", + new String[] {String.valueOf(scheme)}, + null, null, null); - while (c.moveToNext()) { - colors[c.getInt(0)] = Integer.valueOf(c.getInt(1)); - } - - c.close(); + while (c.moveToNext()) { + colors[c.getInt(0)] = Integer.valueOf(c.getInt(1)); } + c.close(); + return colors; } @@ -742,35 +707,31 @@ public class HostDatabase extends RobustSQLiteOpenHelper { final String[] whereArgs = new String[] { String.valueOf(scheme), String.valueOf(number) }; if (value == Colors.defaults[number]) { - synchronized (dbLock) { - mDb.beginTransaction(); - try { - mDb.delete(TABLE_COLORS, - WHERE_SCHEME_AND_COLOR, whereArgs); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } + mDb.beginTransaction(); + try { + mDb.delete(TABLE_COLORS, + WHERE_SCHEME_AND_COLOR, whereArgs); + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } else { final ContentValues values = new ContentValues(); values.put(FIELD_COLOR_VALUE, value); - synchronized (dbLock) { - mDb.beginTransaction(); - try { - final int rowsAffected = mDb.update(TABLE_COLORS, values, - WHERE_SCHEME_AND_COLOR, whereArgs); - - if (rowsAffected == 0) { - values.put(FIELD_COLOR_SCHEME, scheme); - values.put(FIELD_COLOR_NUMBER, number); - mDb.insert(TABLE_COLORS, null, values); - } - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); + mDb.beginTransaction(); + try { + final int rowsAffected = mDb.update(TABLE_COLORS, values, + WHERE_SCHEME_AND_COLOR, whereArgs); + + if (rowsAffected == 0) { + values.put(FIELD_COLOR_SCHEME, scheme); + values.put(FIELD_COLOR_NUMBER, number); + mDb.insert(TABLE_COLORS, null, values); } + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } } @@ -782,21 +743,19 @@ public class HostDatabase extends RobustSQLiteOpenHelper { public int[] getDefaultColorsForScheme(int scheme) { int[] colors = new int[] { DEFAULT_FG_COLOR, DEFAULT_BG_COLOR }; - synchronized (dbLock) { - Cursor c = mDb.query(TABLE_COLOR_DEFAULTS, - new String[] { FIELD_COLOR_FG, FIELD_COLOR_BG }, - FIELD_COLOR_SCHEME + " = ?", - new String[] { String.valueOf(scheme) }, - null, null, null); + Cursor c = mDb.query(TABLE_COLOR_DEFAULTS, + new String[] {FIELD_COLOR_FG, FIELD_COLOR_BG}, + FIELD_COLOR_SCHEME + " = ?", + new String[] {String.valueOf(scheme)}, + null, null, null); - if (c.moveToFirst()) { - colors[0] = c.getInt(0); - colors[1] = c.getInt(1); - } - - c.close(); + if (c.moveToFirst()) { + colors[0] = c.getInt(0); + colors[1] = c.getInt(1); } + c.close(); + return colors; } @@ -817,20 +776,18 @@ public class HostDatabase extends RobustSQLiteOpenHelper { values.put(FIELD_COLOR_FG, fg); values.put(FIELD_COLOR_BG, bg); - synchronized (dbLock) { - mDb.beginTransaction(); - try { - int rowsAffected = mDb.update(TABLE_COLOR_DEFAULTS, values, - schemeWhere, whereArgs); + mDb.beginTransaction(); + try { + int rowsAffected = mDb.update(TABLE_COLOR_DEFAULTS, values, + schemeWhere, whereArgs); - if (rowsAffected == 0) { - values.put(FIELD_COLOR_SCHEME, scheme); - mDb.insert(TABLE_COLOR_DEFAULTS, null, values); - } - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); + if (rowsAffected == 0) { + values.put(FIELD_COLOR_SCHEME, scheme); + mDb.insert(TABLE_COLOR_DEFAULTS, null, values); } + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } } -- cgit v1.2.3 From 9c32266fe8a898c39561e72f1aefb4b21c264c94 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 21:06:11 -0700 Subject: Get rid of useless backup dbLock usage --- .../org/connectbot/GeneratePubkeyActivity.java | 1 - .../java/org/connectbot/HostEditorActivity.java | 40 ++++------------------ .../main/java/org/connectbot/HostListActivity.java | 8 ++--- .../org/connectbot/PortForwardListActivity.java | 8 ++--- .../java/org/connectbot/PubkeyListActivity.java | 5 +-- .../java/org/connectbot/service/BackupAgent.java | 20 ----------- .../org/connectbot/service/TerminalManager.java | 11 ++---- 7 files changed, 13 insertions(+), 80 deletions(-) diff --git a/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java b/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java index 55e84ac..17db685 100644 --- a/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java +++ b/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java @@ -300,7 +300,6 @@ public class GeneratePubkeyActivity extends Activity implements OnEntropyGathere PubkeyDatabase pubkeydb = PubkeyDatabase.get(GeneratePubkeyActivity.this); pubkeydb.savePubkey(pubkey); - pubkeydb.close(); } catch (Exception e) { Log.e(TAG, "Could not generate key pair"); diff --git a/app/src/main/java/org/connectbot/HostEditorActivity.java b/app/src/main/java/org/connectbot/HostEditorActivity.java index 6bd7b14..a213aa4 100644 --- a/app/src/main/java/org/connectbot/HostEditorActivity.java +++ b/app/src/main/java/org/connectbot/HostEditorActivity.java @@ -66,9 +66,9 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr protected final void cacheValues() { // fill a cursor and cache the values locally - // this makes sure we dont have any floating cursor to dispose later + // this makes sure we don't have any floating cursor to dispose later - SQLiteDatabase db = hostdb.getReadableDatabase(); + SQLiteDatabase db = hostdb.getWritableDatabase(); Cursor cursor = db.query(table, null, "_id = ?", new String[] { String.valueOf(id) }, null, null, null); @@ -81,23 +81,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr } } cursor.close(); - db.close(); - -// db = pubkeydb.getReadableDatabase(); -// cursor = db.query(PubkeyDatabase.TABLE_PUBKEYS, -// new String[] { "_id", PubkeyDatabase.FIELD_PUBKEY_NICKNAME }, -// null, null, null, null, null); -// -// if (cursor.moveToFirst()) { -// do { -// String pubkeyid = String.valueOf(cursor.getLong(0)); -// String value = cursor.getString(1); -// pubkeys.put(pubkeyid, value); -// } while (cursor.moveToNext()); -// } -// -// cursor.close(); -// db.close(); } public boolean contains(String key) { @@ -118,7 +101,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr //Log.d(this.getClass().toString(), "commit() changes back to database"); SQLiteDatabase db = hostdb.getWritableDatabase(); db.update(table, update, "_id = ?", new String[] { String.valueOf(id) }); - db.close(); // make sure we refresh the parent cached values cacheValues(); @@ -306,11 +288,8 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - if (this.hostdb == null) - this.hostdb = HostDatabase.get(this); - - if (this.pubkeydb == null) - this.pubkeydb = PubkeyDatabase.get(this); + hostdb = HostDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); } @Override @@ -319,15 +298,8 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr unbindService(connection); - if (this.hostdb != null) { - this.hostdb.close(); - this.hostdb = null; - } - - if (this.pubkeydb != null) { - this.pubkeydb.close(); - this.pubkeydb = null; - } + hostdb = null; + pubkeydb = null; } private void updateSummaries() { diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index f2a0d93..4c0a443 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -126,8 +126,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange // start the terminal manager service this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - if (this.hostdb == null) - this.hostdb = HostDatabase.get(this); + hostdb = HostDatabase.get(this); } @Override @@ -135,10 +134,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange super.onStop(); this.unbindService(connection); - if (this.hostdb != null) { - this.hostdb.close(); - this.hostdb = null; - } + hostdb = null; closeOnDisconnectAll = true; } diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index 84e9ab8..b0f835d 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -84,8 +84,7 @@ public class PortForwardListActivity extends ListActivity { this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - if (this.hostdb == null) - this.hostdb = HostDatabase.get(this); + hostdb = HostDatabase.get(this); } @Override @@ -94,10 +93,7 @@ public class PortForwardListActivity extends ListActivity { this.unbindService(connection); - if (this.hostdb != null) { - this.hostdb.close(); - this.hostdb = null; - } + hostdb = null; } @Override diff --git a/app/src/main/java/org/connectbot/PubkeyListActivity.java b/app/src/main/java/org/connectbot/PubkeyListActivity.java index 2f2b0c2..5480cb2 100644 --- a/app/src/main/java/org/connectbot/PubkeyListActivity.java +++ b/app/src/main/java/org/connectbot/PubkeyListActivity.java @@ -130,10 +130,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { unbindService(connection); - if (pubkeydb != null) { - pubkeydb.close(); - pubkeydb = null; - } + pubkeydb = null; } @Override diff --git a/app/src/main/java/org/connectbot/service/BackupAgent.java b/app/src/main/java/org/connectbot/service/BackupAgent.java index 312ae3b..f1a69a3 100644 --- a/app/src/main/java/org/connectbot/service/BackupAgent.java +++ b/app/src/main/java/org/connectbot/service/BackupAgent.java @@ -53,24 +53,4 @@ public class BackupAgent extends BackupAgentHelper { addHelper(PubkeyDatabase.DB_NAME, pubkeys); } - - @Override - public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, - ParcelFileDescriptor newState) throws IOException { - synchronized (HostDatabase.dbLock) { - super.onBackup(oldState, data, newState); - } - } - - @Override - public void onRestore(BackupDataInput data, int appVersionCode, - ParcelFileDescriptor newState) throws IOException { - Log.d("ConnectBot.BackupAgent", "onRestore called"); - - synchronized (HostDatabase.dbLock) { - Log.d("ConnectBot.BackupAgent", "onRestore in-lock"); - - super.onRestore(data, appVersionCode, newState); - } - } } diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 7e0f4c7..1f0ee29 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -173,15 +173,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen disconnectAll(true, false); - if (hostdb != null) { - hostdb.close(); - hostdb = null; - } - - if (pubkeydb != null) { - pubkeydb.close(); - pubkeydb = null; - } + hostdb = null; + pubkeydb = null; synchronized (this) { if (idleTimer != null) -- cgit v1.2.3 From 83d73e4fa3f0b1a2b52c44b4ecfdca26f8da15e7 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 21:06:26 -0700 Subject: Make HostEditorActivity use a transaction --- app/src/main/java/org/connectbot/HostEditorActivity.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/connectbot/HostEditorActivity.java b/app/src/main/java/org/connectbot/HostEditorActivity.java index a213aa4..4fc41bf 100644 --- a/app/src/main/java/org/connectbot/HostEditorActivity.java +++ b/app/src/main/java/org/connectbot/HostEditorActivity.java @@ -100,7 +100,13 @@ 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[] { String.valueOf(id) }); + db.beginTransaction(); + try { + db.update(table, update, "_id = ?", new String[] {String.valueOf(id)}); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } // make sure we refresh the parent cached values cacheValues(); -- cgit v1.2.3 From 747e11c6ff28fc833855b9979ce68a15b99915f6 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 21:06:48 -0700 Subject: Update pubkey list in onStart instead of onCreate --- app/src/main/java/org/connectbot/PubkeyListActivity.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/connectbot/PubkeyListActivity.java b/app/src/main/java/org/connectbot/PubkeyListActivity.java index 5480cb2..a2cc170 100644 --- a/app/src/main/java/org/connectbot/PubkeyListActivity.java +++ b/app/src/main/java/org/connectbot/PubkeyListActivity.java @@ -120,8 +120,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - if (pubkeydb == null) - pubkeydb = PubkeyDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); + updateList(); } @Override @@ -142,11 +142,6 @@ public class PubkeyListActivity extends ListActivity implements EventListener { getResources().getText(R.string.app_name), getResources().getText(R.string.title_pubkey_list))); - // connect with hosts database and populate list - pubkeydb = PubkeyDatabase.get(this); - - updateList(); - registerForContextMenu(getListView()); getListView().setOnItemClickListener(new OnItemClickListener() { @@ -542,8 +537,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } // write new value into database - if (pubkeydb == null) - pubkeydb = PubkeyDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); pubkeydb.savePubkey(pubkey); updateList(); -- cgit v1.2.3 From 57afa9bdc5b269a48bd27fc8455cab4cb956d02a Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:15:57 -0700 Subject: Never cache instances of the HostDatabase --- .../main/java/org/connectbot/ColorsActivity.java | 40 +++++++--------------- .../java/org/connectbot/HostEditorActivity.java | 18 ++++------ .../main/java/org/connectbot/HostListActivity.java | 13 ++----- .../org/connectbot/PortForwardListActivity.java | 13 +++---- .../org/connectbot/service/TerminalBridge.java | 11 +++--- .../org/connectbot/service/TerminalManager.java | 15 +++----- .../main/java/org/connectbot/transport/SSH.java | 20 ++++++----- .../java/org/connectbot/util/HostDatabase.java | 2 -- 8 files changed, 50 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index 54f52da..8725a51 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -56,7 +56,6 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private int mColorScheme; private List mColorList; - private HostDatabase mHostDb; private int mCurrentColor = 0; @@ -74,10 +73,10 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mColorScheme = HostDatabase.DEFAULT_COLOR_SCHEME; - mHostDb = HostDatabase.get(this); + HostDatabase hostDb = HostDatabase.get(this); - mColorList = Arrays.asList(mHostDb.getColorsForScheme(mColorScheme)); - mDefaultColors = mHostDb.getDefaultColorsForScheme(mColorScheme); + mColorList = Arrays.asList(hostDb.getColorsForScheme(mColorScheme)); + mDefaultColors = hostDb.getDefaultColorsForScheme(mColorScheme); mColorGrid = (GridView) findViewById(R.id.color_grid); mColorGrid.setAdapter(new ColorsAdapter(true)); @@ -95,24 +94,6 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mBgSpinner.setOnItemSelectedListener(this); } - @Override - protected void onDestroy() { - super.onDestroy(); - - if (mHostDb != null) { - mHostDb.close(); - mHostDb = null; - } - } - - @Override - protected void onResume() { - super.onResume(); - - if (mHostDb == null) - mHostDb = HostDatabase.get(this); - } - private class ColorsAdapter extends BaseAdapter { private final boolean mSquareViews; private final int mResourceLabel; @@ -304,7 +285,8 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC public void onNothingSelected(AdapterView arg0) { } public void colorChanged(int value) { - mHostDb.setGlobalColor(mCurrentColor, value); + HostDatabase hostDb = HostDatabase.get(this); + hostDb.setGlobalColor(mCurrentColor, value); mColorList.set(mCurrentColor, value); mColorGrid.invalidateViews(); } @@ -324,8 +306,10 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC } } - if (needUpdate) - mHostDb.setDefaultColorsForScheme(mColorScheme, mDefaultColors[0], mDefaultColors[1]); + if (needUpdate) { + HostDatabase hostDb = HostDatabase.get(this); + hostDb.setDefaultColorsForScheme(mColorScheme, mDefaultColors[0], mDefaultColors[1]); + } } @Override @@ -338,10 +322,12 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC reset.setIcon(android.R.drawable.ic_menu_revert); reset.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem arg0) { + HostDatabase hostDb = HostDatabase.get(ColorsActivity.this); + // Reset each individual color to defaults. for (int i = 0; i < Colors.defaults.length; i++) { if (!mColorList.get(i).equals(Colors.defaults[i])) { - mHostDb.setGlobalColor(i, Colors.defaults[i]); + hostDb.setGlobalColor(i, Colors.defaults[i]); mColorList.set(i, Colors.defaults[i]); } } @@ -350,7 +336,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC // Reset the default FG/BG colors as well. mFgSpinner.setSelection(HostDatabase.DEFAULT_FG_COLOR); mBgSpinner.setSelection(HostDatabase.DEFAULT_BG_COLOR); - mHostDb.setDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME, + hostDb.setDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME, HostDatabase.DEFAULT_FG_COLOR, HostDatabase.DEFAULT_BG_COLOR); return true; diff --git a/app/src/main/java/org/connectbot/HostEditorActivity.java b/app/src/main/java/org/connectbot/HostEditorActivity.java index 4fc41bf..7316775 100644 --- a/app/src/main/java/org/connectbot/HostEditorActivity.java +++ b/app/src/main/java/org/connectbot/HostEditorActivity.java @@ -68,6 +68,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // fill a cursor and cache the values locally // this makes sure we don't have any floating cursor to dispose later + HostDatabase hostdb = HostDatabase.get(HostEditorActivity.this); SQLiteDatabase db = hostdb.getWritableDatabase(); Cursor cursor = db.query(table, null, "_id = ?", new String[] { String.valueOf(id) }, null, null, null); @@ -98,7 +99,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr } public boolean commit() { - //Log.d(this.getClass().toString(), "commit() changes back to database"); + HostDatabase hostdb = HostDatabase.get(HostEditorActivity.this); SQLiteDatabase db = hostdb.getWritableDatabase(); db.beginTransaction(); try { @@ -214,9 +215,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr protected static final String TAG = "CB.HostEditorActivity"; - protected HostDatabase hostdb = null; - private PubkeyDatabase pubkeydb = null; - private CursorPreferenceHack pref; private ServiceConnection connection; @@ -232,8 +230,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // TODO: we could pass through a specific ContentProvider uri here //this.getPreferenceManager().setSharedPreferencesName(uri); - this.hostdb = HostDatabase.get(this); - this.pubkeydb = PubkeyDatabase.get(this); + HostDatabase hostdb = HostDatabase.get(this); host = hostdb.findHostById(hostId); @@ -259,6 +256,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // TODO: should consider moving into onStart, but we dont have a good way of resetting the listpref after filling once ListPreference pubkeyPref = (ListPreference) findPreference(HostDatabase.FIELD_HOST_PUBKEYID); + PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); List pubkeyNicks = new LinkedList(Arrays.asList(pubkeyPref.getEntries())); pubkeyNicks.addAll(pubkeydb.allValues(PubkeyDatabase.FIELD_PUBKEY_NICKNAME)); pubkeyPref.setEntries(pubkeyNicks.toArray(new CharSequence[pubkeyNicks.size()])); @@ -293,9 +291,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr super.onStart(); bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - - hostdb = HostDatabase.get(this); - pubkeydb = PubkeyDatabase.get(this); } @Override @@ -303,12 +298,11 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr super.onStop(); unbindService(connection); - - hostdb = null; - pubkeydb = null; } private void updateSummaries() { + PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); + // for all text preferences, set hint as current database value for (String key : this.pref.values.keySet()) { if (key.equals(HostDatabase.FIELD_HOST_POSTLOGIN)) continue; diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index 4c0a443..7a4c334 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -72,7 +72,6 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange protected TerminalManager bound = null; - protected HostDatabase hostdb; private List hosts; protected LayoutInflater inflater = null; @@ -125,8 +124,6 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange // start the terminal manager service this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - - hostdb = HostDatabase.get(this); } @Override @@ -134,8 +131,6 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange super.onStop(); this.unbindService(connection); - hostdb = null; - closeOnDisconnectAll = true; } @@ -206,7 +201,6 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange || Intent.ACTION_PICK.equals(getIntent().getAction()); // connect with hosts database and populate list - this.hostdb = HostDatabase.get(this); ListView list = this.getListView(); this.sortedByColor = prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false); @@ -399,7 +393,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange if (bridge != null) bridge.dispatchDisconnect(true); - hostdb.deleteHost(host); + HostDatabase.get(HostListActivity.this).deleteHost(host); updateList(); } }) @@ -460,6 +454,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange return false; } + HostDatabase hostdb = HostDatabase.get(this); HostBean host = TransportFactory.findHost(hostdb, uri); if (host == null) { host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); @@ -485,9 +480,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange edit.commit(); } - if (hostdb == null) - hostdb = HostDatabase.get(this); - + HostDatabase hostdb = HostDatabase.get(this); hosts = hostdb.getHosts(sortedByColor); // Don't lose hosts that are connected via shortcuts but not in the database. diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index b0f835d..408e194 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -68,8 +68,6 @@ public class PortForwardListActivity extends ListActivity { private static final int LISTENER_CYCLE_TIME = 500; - protected HostDatabase hostdb; - private List portForwards; private ServiceConnection connection = null; @@ -83,8 +81,6 @@ public class PortForwardListActivity extends ListActivity { super.onStart(); this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - - hostdb = HostDatabase.get(this); } @Override @@ -92,8 +88,6 @@ public class PortForwardListActivity extends ListActivity { super.onStop(); this.unbindService(connection); - - hostdb = null; } @Override @@ -105,7 +99,7 @@ public class PortForwardListActivity extends ListActivity { setContentView(R.layout.act_portforwardlist); // connect with hosts database and populate list - this.hostdb = HostDatabase.get(this); + HostDatabase hostdb = HostDatabase.get(this); host = hostdb.findHostById(hostId); { @@ -342,6 +336,7 @@ public class PortForwardListActivity extends ListActivity { if (hostBridge != null) hostBridge.removePortForward(pfb); + HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); hostdb.deletePortForward(pfb); } catch (Exception e) { Log.e(TAG, "Could not delete port forward", e); @@ -368,8 +363,8 @@ public class PortForwardListActivity extends ListActivity { if (hostBridge != null) { this.portForwards = hostBridge.getPortForwards(); } else { - if (this.hostdb == null) return; - this.portForwards = this.hostdb.getPortForwardsForHost(host); + HostDatabase hostdb = HostDatabase.get(this); + this.portForwards = hostdb.getPortForwardsForHost(host); } PortForwardAdapter adapter = new PortForwardAdapter(this, portForwards); diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java index 6d47f96..6f76b02 100644 --- a/app/src/main/java/org/connectbot/service/TerminalBridge.java +++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java @@ -273,7 +273,8 @@ public class TerminalBridge implements VDUDisplay { transport.setEmulation(emulation); if (transport.canForwardPorts()) { - for (PortForwardBean portForward : manager.hostdb.getPortForwardsForHost(host)) + HostDatabase hostDb = HostDatabase.get(manager); + for (PortForwardBean portForward : hostDb.getPortForwardsForHost(host)) transport.addPortForward(portForward); } @@ -533,7 +534,8 @@ public class TerminalBridge implements VDUDisplay { } host.setFontSize((int) sizeDp); - manager.hostdb.updateFontSize(host); + HostDatabase hostDb = HostDatabase.get(manager); + hostDb.updateFontSize(host); forcedSize = false; } @@ -950,11 +952,12 @@ public class TerminalBridge implements VDUDisplay { } public final void resetColors() { - int[] defaults = manager.hostdb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + HostDatabase hostDb = HostDatabase.get(manager); + int[] defaults = hostDb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); defaultFg = defaults[0]; defaultBg = defaults[1]; - color = manager.hostdb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + color = hostDb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); } private static Pattern urlPattern = null; diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 1f0ee29..3a58c8a 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -87,9 +87,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen public Resources res; - public HostDatabase hostdb; - public PubkeyDatabase pubkeydb; - protected SharedPreferences prefs; final private IBinder binder = new TerminalBinder(); @@ -129,11 +126,9 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen pubkeyTimer = new Timer("pubkeyTimer", true); - hostdb = HostDatabase.get(this); - pubkeydb = PubkeyDatabase.get(this); - // load all marked pubkeys into memory updateSavingKeys(); + PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); List pubkeys = pubkeydb.getAllStartPubkeys(); for (PubkeyBean pubkey : pubkeys) { @@ -173,9 +168,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen disconnectAll(true, false); - hostdb = null; - pubkeydb = null; - synchronized (this) { if (idleTimer != null) idleTimer.cancel(); @@ -270,10 +262,12 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen * format specified by an individual transport. */ public TerminalBridge openConnection(Uri uri) throws Exception { + HostDatabase hostdb = HostDatabase.get(this); HostBean host = TransportFactory.findHost(hostdb, uri); - if (host == null) + if (host == null) { host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); + } return openConnection(host); } @@ -283,6 +277,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen * to {@link HostDatabase}. */ private void touchHost(HostBean host) { + HostDatabase hostdb = HostDatabase.get(this); hostdb.touchHost(host); } diff --git a/app/src/main/java/org/connectbot/transport/SSH.java b/app/src/main/java/org/connectbot/transport/SSH.java index 4bad2f1..f3b85a6 100644 --- a/app/src/main/java/org/connectbot/transport/SSH.java +++ b/app/src/main/java/org/connectbot/transport/SSH.java @@ -141,7 +141,8 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC String serverHostKeyAlgorithm, byte[] serverHostKey) throws IOException { // read in all known hosts from hostdb - KnownHosts hosts = manager.hostdb.getKnownHosts(); + HostDatabase hostDb = HostDatabase.get(manager); + KnownHosts hosts = hostDb.getKnownHosts(); Boolean result; String matchName = String.format(Locale.US, "%s:%d", hostname, port); @@ -172,7 +173,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC if (result == null) return false; if (result.booleanValue()) { // save this key in known database - manager.hostdb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); + hostDb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); } return result.booleanValue(); @@ -195,7 +196,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_continue_connecting)); if (result != null && result.booleanValue()) { // save this key in known database - manager.hostdb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); + hostDb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); return true; } else { return false; @@ -249,13 +250,16 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC } else { bridge.outputLine(manager.res.getString(R.string.terminal_auth_pubkey_specific)); // use a specific key for this host, as requested - PubkeyBean pubkey = manager.pubkeydb.findPubkeyById(pubkeyId); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(manager); + PubkeyBean pubkey = pubkeyDb.findPubkeyById(pubkeyId); - if (pubkey == null) + if (pubkey == null) { bridge.outputLine(manager.res.getString(R.string.terminal_auth_pubkey_invalid)); - else - if (tryPublicKey(pubkey)) + } else { + if (tryPublicKey(pubkey)) { finishConnection(); + } + } } pubkeysExhausted = true; @@ -293,7 +297,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC /** * Attempt connection with database row pointed to by cursor. - * @param cursor + * @param pubkey * @return true for successful authentication * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 067dc80..83fc6be 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -702,8 +702,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } public void setColorForScheme(int scheme, int number, int value) { - final SQLiteDatabase db; - final String[] whereArgs = new String[] { String.valueOf(scheme), String.valueOf(number) }; if (value == Colors.defaults[number]) { -- cgit v1.2.3 From 3f34fa42ea20546dfccad72a2e31681eb17797c8 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:21:15 -0700 Subject: More no caching of HostDatabase --- .../main/java/org/connectbot/PortForwardListActivity.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index 408e194..c2be62c 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -210,9 +210,12 @@ public class PortForwardListActivity extends ListActivity { hostBridge.enablePortForward(pfb); } - if (host != null && !hostdb.savePortForward(pfb)) - throw new SQLException("Could not save port forward"); - + if (host != null) { + HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); + if (!hostdb.savePortForward(pfb)) { + throw new SQLException("Could not save port forward"); + } + } updateHandler.sendEmptyMessage(-1); } catch (Exception e) { Log.e(TAG, "Could not update port forward", e); @@ -307,8 +310,10 @@ public class PortForwardListActivity extends ListActivity { }, LISTENER_CYCLE_TIME); - if (!hostdb.savePortForward(pfb)) + HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); + if (!hostdb.savePortForward(pfb)) { throw new SQLException("Could not save port forward"); + } updateHandler.sendEmptyMessage(-1); } catch (Exception e) { -- cgit v1.2.3 From 0e89f370983f747f1efdac16571e3f8746c297a8 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:20:34 -0700 Subject: Do not cache instances of PubkeyDatabase --- .../java/org/connectbot/PubkeyListActivity.java | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/connectbot/PubkeyListActivity.java b/app/src/main/java/org/connectbot/PubkeyListActivity.java index a2cc170..8910abf 100644 --- a/app/src/main/java/org/connectbot/PubkeyListActivity.java +++ b/app/src/main/java/org/connectbot/PubkeyListActivity.java @@ -88,7 +88,6 @@ public class PubkeyListActivity extends ListActivity implements EventListener { private static final String ANDEXPLORER_TITLE = "explorer_title"; private static final String MIME_TYPE_ANDEXPLORER_FILE = "vnd.android.cursor.dir/lysesoft.andexplorer.file"; - protected PubkeyDatabase pubkeydb; private List pubkeys; protected ClipboardManager clipboard; @@ -120,7 +119,6 @@ public class PubkeyListActivity extends ListActivity implements EventListener { bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); - pubkeydb = PubkeyDatabase.get(this); updateList(); } @@ -129,8 +127,6 @@ public class PubkeyListActivity extends ListActivity implements EventListener { super.onStop(); unbindService(connection); - - pubkeydb = null; } @Override @@ -323,7 +319,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { public boolean onMenuItemClick(MenuItem item) { // toggle onstart status pubkey.setStartup(!pubkey.isStartup()); - pubkeydb.savePubkey(pubkey); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(PubkeyListActivity.this); + pubkeyDb.savePubkey(pubkey); updateList(); return true; } @@ -397,7 +394,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { .setPositiveButton(android.R.string.ok, null) .create().show(); else { - pubkeydb.savePubkey(pubkey); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(PubkeyListActivity.this); + pubkeyDb.savePubkey(pubkey); updateList(); } } catch (Exception e) { @@ -422,7 +420,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { public boolean onMenuItemClick(MenuItem item) { // toggle confirm use pubkey.setConfirmUse(!pubkey.isConfirmUse()); - pubkeydb.savePubkey(pubkey); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(PubkeyListActivity.this); + pubkeyDb.savePubkey(pubkey); updateList(); return true; } @@ -438,11 +437,13 @@ public class PubkeyListActivity extends ListActivity implements EventListener { public void onClick(DialogInterface dialog, int which) { // dont forget to remove from in-memory - if (loaded) + if (loaded) { bound.removeKey(pubkey.getNickname()); + } // delete from backend database and update gui - pubkeydb.deletePubkey(pubkey); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(PubkeyListActivity.this); + pubkeyDb.deletePubkey(pubkey); updateList(); } }) @@ -455,9 +456,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } protected void updateList() { - if (pubkeydb == null) return; - - pubkeys = pubkeydb.allPubkeys(); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(PubkeyListActivity.this); + pubkeys = pubkeyDb.allPubkeys(); PubkeyAdapter adapter = new PubkeyAdapter(this, pubkeys); this.setListAdapter(adapter); @@ -488,7 +488,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } /** - * @param name + * @param file */ private void readKeyFromFile(File file) { PubkeyBean pubkey = new PubkeyBean(); @@ -537,8 +537,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } // write new value into database - pubkeydb = PubkeyDatabase.get(this); - pubkeydb.savePubkey(pubkey); + PubkeyDatabase pubkeyDb = PubkeyDatabase.get(this); + pubkeyDb.savePubkey(pubkey); updateList(); } catch (Exception e) { -- cgit v1.2.3 From 82a6255157d23559235bfbd13bbfa34550847a51 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:18:57 -0700 Subject: Only try to set title when TerminalBridge successfully connected --- app/src/main/java/org/connectbot/ConsoleActivity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 7ed9076..5258bef 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -167,8 +167,6 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne bound.setResizeAllowed(true); final String requestedNickname = (requested != null) ? requested.getFragment() : null; - int requestedIndex = 0; - TerminalBridge requestedBridge = bound.getConnectedBridge(requestedNickname); // If we didn't find the requested connection, try opening it @@ -183,9 +181,11 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne // create views for all bridges on this service adapter.notifyDataSetChanged(); - requestedIndex = bound.getBridges().indexOf(requestedBridge); + int requestedIndex = bound.getBridges().indexOf(requestedBridge); - setDisplayedTerminal(requestedIndex == -1 ? 0 : requestedIndex); + if (requestedIndex != -1) { + setDisplayedTerminal(requestedIndex); + } } public void onServiceDisconnected(ComponentName className) { -- cgit v1.2.3 From 0efa05c1d24ef32808dae66f0aeec405eb723507 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:22:18 -0700 Subject: Optimize imports in StartupTest --- app/src/androidTest/java/org/connectbot/StartupTest.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java index 6bde448..9b725ef 100644 --- a/app/src/androidTest/java/org/connectbot/StartupTest.java +++ b/app/src/androidTest/java/org/connectbot/StartupTest.java @@ -1,29 +1,20 @@ package org.connectbot; -import org.connectbot.bean.HostBean; import org.connectbot.util.HostDatabase; -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; -import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; -import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.test.InstrumentationRegistry; import android.support.test.espresso.intent.Intents; -import android.support.test.espresso.matcher.BoundedMatcher; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import static android.support.test.espresso.Espresso.onData; import static android.support.test.espresso.Espresso.onView; @@ -34,7 +25,6 @@ import static android.support.test.espresso.action.ViewActions.pressBack; import static android.support.test.espresso.action.ViewActions.pressImeActionButton; import static android.support.test.espresso.action.ViewActions.pressMenuKey; import static android.support.test.espresso.action.ViewActions.typeText; -import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.intent.Intents.intended; import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent; @@ -58,7 +48,8 @@ public class StartupTest { @Before public void makeDatabasePristine() { - HostDatabase.resetInMemoryInstance(InstrumentationRegistry.getTargetContext()); + Context testContext = InstrumentationRegistry.getTargetContext(); + HostDatabase.resetInMemoryInstance(testContext); mActivityRule.launchActivity(new Intent()); } -- cgit v1.2.3 From 0f5b1ec4c7f5a2cfa11f2748abacfcb09923a9e9 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 7 Sep 2015 22:31:48 -0700 Subject: Remove unused imports in BackupAgent --- app/src/main/java/org/connectbot/service/BackupAgent.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/org/connectbot/service/BackupAgent.java b/app/src/main/java/org/connectbot/service/BackupAgent.java index f1a69a3..6e57f27 100644 --- a/app/src/main/java/org/connectbot/service/BackupAgent.java +++ b/app/src/main/java/org/connectbot/service/BackupAgent.java @@ -17,19 +17,14 @@ package org.connectbot.service; -import java.io.IOException; - import org.connectbot.util.HostDatabase; import org.connectbot.util.PreferenceConstants; import org.connectbot.util.PubkeyDatabase; import android.annotation.TargetApi; import android.app.backup.BackupAgentHelper; -import android.app.backup.BackupDataInput; -import android.app.backup.BackupDataOutput; import android.app.backup.FileBackupHelper; import android.app.backup.SharedPreferencesBackupHelper; -import android.os.ParcelFileDescriptor; import android.util.Log; /** -- cgit v1.2.3 From bba1bc399b61459da118b1f6f286ad4164feb89a Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 10:55:11 -0700 Subject: Add back table reset for testing This seems to be more reliable than other methods. --- .../java/org/connectbot/util/HostDatabase.java | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 83fc6be..7c52f79 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -227,12 +227,28 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } @VisibleForTesting - public static void resetInMemoryInstance(Context context) { - synchronized (sInstanceLock) { - sInstance = new HostDatabase(context, null); + public void resetDatabase() { + try { + mDb.beginTransaction(); + + mDb.execSQL("DROP TABLE IF EXISTS " + TABLE_HOSTS); + mDb.execSQL("DROP TABLE IF EXISTS " + TABLE_PORTFORWARDS); + mDb.execSQL("DROP TABLE IF EXISTS " + TABLE_COLORS); + mDb.execSQL("DROP TABLE IF EXISTS " + TABLE_COLOR_DEFAULTS); + + createTables(mDb); + + mDb.setTransactionSuccessful(); + } finally { + mDb.endTransaction(); } } + @VisibleForTesting + public static void resetInMemoryInstance(Context context) { + get(context).resetDatabase(); + } + @Override public void onRobustUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) throws SQLiteException { // Versions of the database before the Android Market release will be -- cgit v1.2.3 From 5d2ebeaa409fb2f74fe9eb799793cc004f9d9d29 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 10:56:08 -0700 Subject: Revert "More no caching of HostDatabase" This reverts commit 3f34fa42ea20546dfccad72a2e31681eb17797c8. --- app/src/main/java/org/connectbot/PortForwardListActivity.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index c2be62c..c3b3b8f 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -210,12 +210,10 @@ public class PortForwardListActivity extends ListActivity { hostBridge.enablePortForward(pfb); } - if (host != null) { - HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); - if (!hostdb.savePortForward(pfb)) { - throw new SQLException("Could not save port forward"); - } + if (host != null && !hostdb.savePortForward(pfb)) { + throw new SQLException("Could not save port forward"); } + updateHandler.sendEmptyMessage(-1); } catch (Exception e) { Log.e(TAG, "Could not update port forward", e); @@ -310,7 +308,6 @@ public class PortForwardListActivity extends ListActivity { }, LISTENER_CYCLE_TIME); - HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); if (!hostdb.savePortForward(pfb)) { throw new SQLException("Could not save port forward"); } -- cgit v1.2.3 From 2baa56c2629532adad82d0f67abe9dd568a24760 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 10:57:30 -0700 Subject: Revert "Never cache instances of the HostDatabase" This reverts commit 57afa9bdc5b269a48bd27fc8455cab4cb956d02a. This won't work with injection and makes testing a bit harder, so revert it. --- .../main/java/org/connectbot/ColorsActivity.java | 37 +++++++++++++++------- .../java/org/connectbot/HostEditorActivity.java | 17 ++++++---- .../main/java/org/connectbot/HostListActivity.java | 13 ++++++-- .../org/connectbot/PortForwardListActivity.java | 13 +++++--- .../org/connectbot/service/TerminalBridge.java | 11 +++---- .../org/connectbot/service/TerminalManager.java | 15 ++++++--- .../main/java/org/connectbot/transport/SSH.java | 20 +++++------- .../java/org/connectbot/util/HostDatabase.java | 2 ++ 8 files changed, 80 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index 8725a51..55904c5 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -56,6 +56,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private int mColorScheme; private List mColorList; + private HostDatabase mHostDb; private int mCurrentColor = 0; @@ -73,10 +74,10 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mColorScheme = HostDatabase.DEFAULT_COLOR_SCHEME; - HostDatabase hostDb = HostDatabase.get(this); + mHostDb = HostDatabase.get(this); - mColorList = Arrays.asList(hostDb.getColorsForScheme(mColorScheme)); - mDefaultColors = hostDb.getDefaultColorsForScheme(mColorScheme); + mColorList = Arrays.asList(mHostDb.getColorsForScheme(mColorScheme)); + mDefaultColors = mHostDb.getDefaultColorsForScheme(mColorScheme); mColorGrid = (GridView) findViewById(R.id.color_grid); mColorGrid.setAdapter(new ColorsAdapter(true)); @@ -94,6 +95,24 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mBgSpinner.setOnItemSelectedListener(this); } + @Override + protected void onDestroy() { + super.onDestroy(); + + if (mHostDb != null) { + mHostDb = null; + } + } + + @Override + protected void onResume() { + super.onResume(); + + if (mHostDb == null) { + mHostDb = HostDatabase.get(this); + } + } + private class ColorsAdapter extends BaseAdapter { private final boolean mSquareViews; private final int mResourceLabel; @@ -285,8 +304,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC public void onNothingSelected(AdapterView arg0) { } public void colorChanged(int value) { - HostDatabase hostDb = HostDatabase.get(this); - hostDb.setGlobalColor(mCurrentColor, value); + mHostDb.setGlobalColor(mCurrentColor, value); mColorList.set(mCurrentColor, value); mColorGrid.invalidateViews(); } @@ -307,8 +325,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC } if (needUpdate) { - HostDatabase hostDb = HostDatabase.get(this); - hostDb.setDefaultColorsForScheme(mColorScheme, mDefaultColors[0], mDefaultColors[1]); + mHostDb.setDefaultColorsForScheme(mColorScheme, mDefaultColors[0], mDefaultColors[1]); } } @@ -322,12 +339,10 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC reset.setIcon(android.R.drawable.ic_menu_revert); reset.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem arg0) { - HostDatabase hostDb = HostDatabase.get(ColorsActivity.this); - // Reset each individual color to defaults. for (int i = 0; i < Colors.defaults.length; i++) { if (!mColorList.get(i).equals(Colors.defaults[i])) { - hostDb.setGlobalColor(i, Colors.defaults[i]); + mHostDb.setGlobalColor(i, Colors.defaults[i]); mColorList.set(i, Colors.defaults[i]); } } @@ -336,7 +351,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC // Reset the default FG/BG colors as well. mFgSpinner.setSelection(HostDatabase.DEFAULT_FG_COLOR); mBgSpinner.setSelection(HostDatabase.DEFAULT_BG_COLOR); - hostDb.setDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME, + mHostDb.setDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME, HostDatabase.DEFAULT_FG_COLOR, HostDatabase.DEFAULT_BG_COLOR); return true; diff --git a/app/src/main/java/org/connectbot/HostEditorActivity.java b/app/src/main/java/org/connectbot/HostEditorActivity.java index 7316775..f9dee45 100644 --- a/app/src/main/java/org/connectbot/HostEditorActivity.java +++ b/app/src/main/java/org/connectbot/HostEditorActivity.java @@ -68,7 +68,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // fill a cursor and cache the values locally // this makes sure we don't have any floating cursor to dispose later - HostDatabase hostdb = HostDatabase.get(HostEditorActivity.this); SQLiteDatabase db = hostdb.getWritableDatabase(); Cursor cursor = db.query(table, null, "_id = ?", new String[] { String.valueOf(id) }, null, null, null); @@ -99,7 +98,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr } public boolean commit() { - HostDatabase hostdb = HostDatabase.get(HostEditorActivity.this); SQLiteDatabase db = hostdb.getWritableDatabase(); db.beginTransaction(); try { @@ -215,6 +213,9 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr protected static final String TAG = "CB.HostEditorActivity"; + protected HostDatabase hostdb = null; + private PubkeyDatabase pubkeydb = null; + private CursorPreferenceHack pref; private ServiceConnection connection; @@ -230,7 +231,8 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // TODO: we could pass through a specific ContentProvider uri here //this.getPreferenceManager().setSharedPreferencesName(uri); - HostDatabase hostdb = HostDatabase.get(this); + this.hostdb = HostDatabase.get(this); + this.pubkeydb = PubkeyDatabase.get(this); host = hostdb.findHostById(hostId); @@ -256,7 +258,6 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr // TODO: should consider moving into onStart, but we dont have a good way of resetting the listpref after filling once ListPreference pubkeyPref = (ListPreference) findPreference(HostDatabase.FIELD_HOST_PUBKEYID); - PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); List pubkeyNicks = new LinkedList(Arrays.asList(pubkeyPref.getEntries())); pubkeyNicks.addAll(pubkeydb.allValues(PubkeyDatabase.FIELD_PUBKEY_NICKNAME)); pubkeyPref.setEntries(pubkeyNicks.toArray(new CharSequence[pubkeyNicks.size()])); @@ -291,6 +292,9 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr super.onStart(); bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); + + hostdb = HostDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); } @Override @@ -298,11 +302,12 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr super.onStop(); unbindService(connection); + + hostdb = null; + pubkeydb = null; } private void updateSummaries() { - PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); - // for all text preferences, set hint as current database value for (String key : this.pref.values.keySet()) { if (key.equals(HostDatabase.FIELD_HOST_POSTLOGIN)) continue; diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index c95769c..67a0098 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -71,6 +71,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange protected TerminalManager bound = null; + protected HostDatabase hostdb; private List hosts; protected LayoutInflater inflater = null; @@ -123,6 +124,8 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange // start the terminal manager service this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); + + hostdb = HostDatabase.get(this); } @Override @@ -130,6 +133,8 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange super.onStop(); this.unbindService(connection); + hostdb = null; + closeOnDisconnectAll = true; } @@ -200,6 +205,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange || Intent.ACTION_PICK.equals(getIntent().getAction()); // connect with hosts database and populate list + this.hostdb = HostDatabase.get(this); ListView list = this.getListView(); this.sortedByColor = prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false); @@ -392,7 +398,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange if (bridge != null) bridge.dispatchDisconnect(true); - HostDatabase.get(HostListActivity.this).deleteHost(host); + hostdb.deleteHost(host); updateList(); } }) @@ -453,7 +459,6 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange return false; } - HostDatabase hostdb = HostDatabase.get(this); HostBean host = TransportFactory.findHost(hostdb, uri); if (host == null) { host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); @@ -479,7 +484,9 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange edit.commit(); } - HostDatabase hostdb = HostDatabase.get(this); + if (hostdb == null) + hostdb = HostDatabase.get(this); + hosts = hostdb.getHosts(sortedByColor); // Don't lose hosts that are connected via shortcuts but not in the database. diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java index c3b3b8f..894eed4 100644 --- a/app/src/main/java/org/connectbot/PortForwardListActivity.java +++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java @@ -68,6 +68,8 @@ public class PortForwardListActivity extends ListActivity { private static final int LISTENER_CYCLE_TIME = 500; + protected HostDatabase hostdb; + private List portForwards; private ServiceConnection connection = null; @@ -81,6 +83,8 @@ public class PortForwardListActivity extends ListActivity { super.onStart(); this.bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE); + + hostdb = HostDatabase.get(this); } @Override @@ -88,6 +92,8 @@ public class PortForwardListActivity extends ListActivity { super.onStop(); this.unbindService(connection); + + hostdb = null; } @Override @@ -99,7 +105,7 @@ public class PortForwardListActivity extends ListActivity { setContentView(R.layout.act_portforwardlist); // connect with hosts database and populate list - HostDatabase hostdb = HostDatabase.get(this); + this.hostdb = HostDatabase.get(this); host = hostdb.findHostById(hostId); { @@ -338,7 +344,6 @@ public class PortForwardListActivity extends ListActivity { if (hostBridge != null) hostBridge.removePortForward(pfb); - HostDatabase hostdb = HostDatabase.get(PortForwardListActivity.this); hostdb.deletePortForward(pfb); } catch (Exception e) { Log.e(TAG, "Could not delete port forward", e); @@ -365,8 +370,8 @@ public class PortForwardListActivity extends ListActivity { if (hostBridge != null) { this.portForwards = hostBridge.getPortForwards(); } else { - HostDatabase hostdb = HostDatabase.get(this); - this.portForwards = hostdb.getPortForwardsForHost(host); + if (this.hostdb == null) return; + this.portForwards = this.hostdb.getPortForwardsForHost(host); } PortForwardAdapter adapter = new PortForwardAdapter(this, portForwards); diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java index 6f76b02..6d47f96 100644 --- a/app/src/main/java/org/connectbot/service/TerminalBridge.java +++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java @@ -273,8 +273,7 @@ public class TerminalBridge implements VDUDisplay { transport.setEmulation(emulation); if (transport.canForwardPorts()) { - HostDatabase hostDb = HostDatabase.get(manager); - for (PortForwardBean portForward : hostDb.getPortForwardsForHost(host)) + for (PortForwardBean portForward : manager.hostdb.getPortForwardsForHost(host)) transport.addPortForward(portForward); } @@ -534,8 +533,7 @@ public class TerminalBridge implements VDUDisplay { } host.setFontSize((int) sizeDp); - HostDatabase hostDb = HostDatabase.get(manager); - hostDb.updateFontSize(host); + manager.hostdb.updateFontSize(host); forcedSize = false; } @@ -952,12 +950,11 @@ public class TerminalBridge implements VDUDisplay { } public final void resetColors() { - HostDatabase hostDb = HostDatabase.get(manager); - int[] defaults = hostDb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + int[] defaults = manager.hostdb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); defaultFg = defaults[0]; defaultBg = defaults[1]; - color = hostDb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + color = manager.hostdb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); } private static Pattern urlPattern = null; diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 3a58c8a..1f0ee29 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -87,6 +87,9 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen public Resources res; + public HostDatabase hostdb; + public PubkeyDatabase pubkeydb; + protected SharedPreferences prefs; final private IBinder binder = new TerminalBinder(); @@ -126,9 +129,11 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen pubkeyTimer = new Timer("pubkeyTimer", true); + hostdb = HostDatabase.get(this); + pubkeydb = PubkeyDatabase.get(this); + // load all marked pubkeys into memory updateSavingKeys(); - PubkeyDatabase pubkeydb = PubkeyDatabase.get(this); List pubkeys = pubkeydb.getAllStartPubkeys(); for (PubkeyBean pubkey : pubkeys) { @@ -168,6 +173,9 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen disconnectAll(true, false); + hostdb = null; + pubkeydb = null; + synchronized (this) { if (idleTimer != null) idleTimer.cancel(); @@ -262,12 +270,10 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen * format specified by an individual transport. */ public TerminalBridge openConnection(Uri uri) throws Exception { - HostDatabase hostdb = HostDatabase.get(this); HostBean host = TransportFactory.findHost(hostdb, uri); - if (host == null) { + if (host == null) host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); - } return openConnection(host); } @@ -277,7 +283,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen * to {@link HostDatabase}. */ private void touchHost(HostBean host) { - HostDatabase hostdb = HostDatabase.get(this); hostdb.touchHost(host); } diff --git a/app/src/main/java/org/connectbot/transport/SSH.java b/app/src/main/java/org/connectbot/transport/SSH.java index f3b85a6..4bad2f1 100644 --- a/app/src/main/java/org/connectbot/transport/SSH.java +++ b/app/src/main/java/org/connectbot/transport/SSH.java @@ -141,8 +141,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC String serverHostKeyAlgorithm, byte[] serverHostKey) throws IOException { // read in all known hosts from hostdb - HostDatabase hostDb = HostDatabase.get(manager); - KnownHosts hosts = hostDb.getKnownHosts(); + KnownHosts hosts = manager.hostdb.getKnownHosts(); Boolean result; String matchName = String.format(Locale.US, "%s:%d", hostname, port); @@ -173,7 +172,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC if (result == null) return false; if (result.booleanValue()) { // save this key in known database - hostDb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); + manager.hostdb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); } return result.booleanValue(); @@ -196,7 +195,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_continue_connecting)); if (result != null && result.booleanValue()) { // save this key in known database - hostDb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); + manager.hostdb.saveKnownHost(hostname, port, serverHostKeyAlgorithm, serverHostKey); return true; } else { return false; @@ -250,16 +249,13 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC } else { bridge.outputLine(manager.res.getString(R.string.terminal_auth_pubkey_specific)); // use a specific key for this host, as requested - PubkeyDatabase pubkeyDb = PubkeyDatabase.get(manager); - PubkeyBean pubkey = pubkeyDb.findPubkeyById(pubkeyId); + PubkeyBean pubkey = manager.pubkeydb.findPubkeyById(pubkeyId); - if (pubkey == null) { + if (pubkey == null) bridge.outputLine(manager.res.getString(R.string.terminal_auth_pubkey_invalid)); - } else { - if (tryPublicKey(pubkey)) { + else + if (tryPublicKey(pubkey)) finishConnection(); - } - } } pubkeysExhausted = true; @@ -297,7 +293,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC /** * Attempt connection with database row pointed to by cursor. - * @param pubkey + * @param cursor * @return true for successful authentication * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 7c52f79..2da9925 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -718,6 +718,8 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } public void setColorForScheme(int scheme, int number, int value) { + final SQLiteDatabase db; + final String[] whereArgs = new String[] { String.valueOf(scheme), String.valueOf(number) }; if (value == Colors.defaults[number]) { -- cgit v1.2.3 From b90e0af0e1a7aa4c1653390d43326604346fe90d Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 12:40:07 -0700 Subject: Change colors list to primitive array --- app/src/main/java/org/connectbot/ColorsActivity.java | 18 +++++++++--------- app/src/main/java/org/connectbot/util/Colors.java | 2 +- .../main/java/org/connectbot/util/HostDatabase.java | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index 55904c5..11a991a 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -55,7 +55,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private int mColorScheme; - private List mColorList; + private int[] mColorList; private HostDatabase mHostDb; private int mCurrentColor = 0; @@ -76,7 +76,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC mHostDb = HostDatabase.get(this); - mColorList = Arrays.asList(mHostDb.getColorsForScheme(mColorScheme)); + mColorList = mHostDb.getColorsForScheme(mColorScheme); mDefaultColors = mHostDb.getDefaultColorsForScheme(mColorScheme); mColorGrid = (GridView) findViewById(R.id.color_grid); @@ -135,18 +135,18 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC c = (ColorView) convertView; } - c.setColor(mColorList.get(position)); + c.setColor(mColorList[position]); c.setNumber(position + 1); return c; } public int getCount() { - return mColorList.size(); + return mColorList.length; } public Object getItem(int position) { - return mColorList.get(position); + return mColorList[position]; } public long getItemId(int position) { @@ -294,7 +294,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private void editColor(int colorNumber) { mCurrentColor = colorNumber; - new UberColorPickerDialog(this, this, mColorList.get(colorNumber)).show(); + new UberColorPickerDialog(this, this, mColorList[colorNumber]).show(); } public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -305,7 +305,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC public void colorChanged(int value) { mHostDb.setGlobalColor(mCurrentColor, value); - mColorList.set(mCurrentColor, value); + mColorList[mCurrentColor] = value; mColorGrid.invalidateViews(); } @@ -341,9 +341,9 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC public boolean onMenuItemClick(MenuItem arg0) { // Reset each individual color to defaults. for (int i = 0; i < Colors.defaults.length; i++) { - if (!mColorList.get(i).equals(Colors.defaults[i])) { + if (mColorList[i] != Colors.defaults[i]) { mHostDb.setGlobalColor(i, Colors.defaults[i]); - mColorList.set(i, Colors.defaults[i]); + mColorList[i] = Colors.defaults[i]; } } mColorGrid.invalidateViews(); diff --git a/app/src/main/java/org/connectbot/util/Colors.java b/app/src/main/java/org/connectbot/util/Colors.java index ff88d68..e0637fb 100644 --- a/app/src/main/java/org/connectbot/util/Colors.java +++ b/app/src/main/java/org/connectbot/util/Colors.java @@ -22,7 +22,7 @@ package org.connectbot.util; * */ public class Colors { - public final static Integer[] defaults = new Integer[] { + public final static int[] defaults = new int[] { 0xff000000, // black 0xffcc0000, // red 0xff00cc00, // green diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index 2da9925..e8ced95 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -699,8 +699,8 @@ public class HostDatabase extends RobustSQLiteOpenHelper { } } - public Integer[] getColorsForScheme(int scheme) { - Integer[] colors = Colors.defaults.clone(); + public int[] getColorsForScheme(int scheme) { + int[] colors = Colors.defaults.clone(); Cursor c = mDb.query(TABLE_COLORS, new String[] { FIELD_COLOR_NUMBER, FIELD_COLOR_VALUE}, -- cgit v1.2.3 From 0310e8e9f19338f470031a737bfdaa6f848edcae Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 13:09:13 -0700 Subject: Add interfaces for HostStorage and ColorStorage An attempt to help with testing. --- .../java/org/connectbot/data/ColorStorage.java | 31 ++++++++ .../main/java/org/connectbot/data/HostStorage.java | 89 ++++++++++++++++++++++ .../java/org/connectbot/util/HostDatabase.java | 4 +- 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/connectbot/data/ColorStorage.java create mode 100644 app/src/main/java/org/connectbot/data/HostStorage.java diff --git a/app/src/main/java/org/connectbot/data/ColorStorage.java b/app/src/main/java/org/connectbot/data/ColorStorage.java new file mode 100644 index 0000000..eb3d2d2 --- /dev/null +++ b/app/src/main/java/org/connectbot/data/ColorStorage.java @@ -0,0 +1,31 @@ +/* + * ConnectBot: simple, powerful, open-source SSH client for Android + * Copyright 2015 Kenny Root, Jeffrey Sharkey + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.connectbot.data; + +/** + * Created by kroot on 9/11/15. + */ +public interface ColorStorage { + public int[] getColorsForScheme(int colorScheme); + + public void setGlobalColor(int mCurrentColor, int value); + + public int[] getDefaultColorsForScheme(int colorScheme); + + public void setDefaultColorsForScheme(int mColorScheme, int mDefaultColor, int mDefaultColor1); +} diff --git a/app/src/main/java/org/connectbot/data/HostStorage.java b/app/src/main/java/org/connectbot/data/HostStorage.java new file mode 100644 index 0000000..9d4fc7d --- /dev/null +++ b/app/src/main/java/org/connectbot/data/HostStorage.java @@ -0,0 +1,89 @@ +/* + * ConnectBot: simple, powerful, open-source SSH client for Android + * Copyright 2015 Kenny Root, Jeffrey Sharkey + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.connectbot.data; + +import java.util.List; +import java.util.Map; + +import org.connectbot.bean.HostBean; +import org.connectbot.bean.PortForwardBean; + +import com.trilead.ssh2.KnownHosts; + +import android.support.annotation.VisibleForTesting; + +/** + * Interface that defines the operation used to interact with the storage layer. + */ +public interface HostStorage { + /** + * Resets the database during testing. + */ + @VisibleForTesting + void resetDatabase(); + + /** + * Finds the host that is represented by the given selection. + * @param selection all fields to be considered + * @return the matching host + */ + HostBean findHost(Map selection); + + /** + * Deletes the given {@code host} from the storage layer. + */ + void deleteHost(HostBean host); + + /** + * Saves the given {@code host} to the storage layer. + */ + HostBean saveHost(HostBean host); + + /** + * Returns a list of all the hosts as a list of {@link HostBean}. + * @param sortedByColor if hosts should be grouped by color. + */ + List getHosts(boolean sortedByColor); + + /** + * Updates the last connected time for {@code host}. + */ + void touchHost(HostBean host); + + /** + * Finds a {@link HostBean} based on the given {@code hostId}. + */ + HostBean findHostById(long hostId); + + /** + * Returns the list of known hosts. + * + * @see #saveKnownHost(String, int, String, byte[]) + */ + KnownHosts getKnownHosts(); + + /** + * Adds a known host to the database for later retrieval using {@link #getKnownHosts()}. + */ + void saveKnownHost(String hostname, int port, String serverHostKeyAlgorithm, byte[] serverHostKey); + + /** + * Return all port forwards for the given {@code host}. + */ + PortForwardBean[] getPortForwardsForHost(HostBean host); +} diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index e8ced95..e077409 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -26,6 +26,8 @@ import java.util.Map.Entry; import org.connectbot.bean.HostBean; import org.connectbot.bean.PortForwardBean; +import org.connectbot.data.ColorStorage; +import org.connectbot.data.HostStorage; import android.content.ContentValues; import android.content.Context; @@ -43,7 +45,7 @@ import com.trilead.ssh2.KnownHosts; * * @author jsharkey */ -public class HostDatabase extends RobustSQLiteOpenHelper { +public class HostDatabase extends RobustSQLiteOpenHelper implements HostStorage, ColorStorage { public final static String TAG = "CB.HostDatabase"; -- cgit v1.2.3 From 8a363f340b1dd0d46dc9d8129d255bf4f31108f5 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 13:10:03 -0700 Subject: Switch ColorActivity to ColorStorage interface --- app/src/main/java/org/connectbot/ColorsActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index 11a991a..fce49a1 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -21,6 +21,7 @@ import java.text.NumberFormat; import java.util.Arrays; import java.util.List; +import org.connectbot.data.ColorStorage; import org.connectbot.util.Colors; import org.connectbot.util.HostDatabase; import org.connectbot.util.UberColorPickerDialog; @@ -56,7 +57,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private int mColorScheme; private int[] mColorList; - private HostDatabase mHostDb; + private ColorStorage mHostDb; private int mCurrentColor = 0; -- cgit v1.2.3 From f38a673ff4e7ccfd85abec14f76ebf5e4f8cfeba Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 13:10:42 -0700 Subject: Call saveHost instead of specialized updateFontSize --- .../org/connectbot/service/TerminalBridge.java | 2 +- .../java/org/connectbot/util/HostDatabase.java | 33 +++++----------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java index 6d47f96..6e4990e 100644 --- a/app/src/main/java/org/connectbot/service/TerminalBridge.java +++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java @@ -533,7 +533,7 @@ public class TerminalBridge implements VDUDisplay { } host.setFontSize((int) sizeDp); - manager.hostdb.updateFontSize(host); + manager.hostdb.saveHost(host); forcedSize = false; } diff --git a/app/src/main/java/org/connectbot/util/HostDatabase.java b/app/src/main/java/org/connectbot/util/HostDatabase.java index e077409..7c59807 100644 --- a/app/src/main/java/org/connectbot/util/HostDatabase.java +++ b/app/src/main/java/org/connectbot/util/HostDatabase.java @@ -343,14 +343,18 @@ public class HostDatabase extends RobustSQLiteOpenHelper implements HostStorage, } /** - * Create a new host using the given parameters. + * Create a new or update an existing {@code host}. */ public HostBean saveHost(HostBean host) { - long id; + long id = host.getId(); mDb.beginTransaction(); try { - id = mDb.insert(TABLE_HOSTS, null, host.getValues()); + if (id == -1) { + id = mDb.insert(TABLE_HOSTS, null, host.getValues()); + } else { + mDb.update(TABLE_HOSTS, host.getValues(), "_id = ?", new String[] {String.valueOf(id)}); + } mDb.setTransactionSuccessful(); } finally { mDb.endTransaction(); @@ -361,29 +365,6 @@ public class HostDatabase extends RobustSQLiteOpenHelper implements HostStorage, return host; } - /** - * Update a field in a host record. - */ - public boolean updateFontSize(HostBean host) { - long id = host.getId(); - if (id < 0) - return false; - - ContentValues updates = new ContentValues(); - updates.put(FIELD_HOST_FONTSIZE, host.getFontSize()); - - mDb.beginTransaction(); - try { - mDb.update(TABLE_HOSTS, updates, "_id = ?", - new String[] {String.valueOf(id)}); - mDb.setTransactionSuccessful(); - } finally { - mDb.endTransaction(); - } - - return true; - } - /** * Delete a specific host by its _id value. */ -- cgit v1.2.3 From 8114c1ec3ec2eb7f41add2a74bed51237b6b918a Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 13:14:37 -0700 Subject: Switch TerminalBridge over to ColorStorage and HostStorage --- app/src/main/java/org/connectbot/HostListActivity.java | 3 ++- app/src/main/java/org/connectbot/data/HostStorage.java | 2 +- app/src/main/java/org/connectbot/service/TerminalBridge.java | 6 +++--- app/src/main/java/org/connectbot/service/TerminalManager.java | 6 +++++- app/src/main/java/org/connectbot/transport/SSH.java | 5 ++--- app/src/main/java/org/connectbot/transport/TransportFactory.java | 4 ++-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index 67a0098..d9e7d16 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -20,6 +20,7 @@ package org.connectbot; import java.util.List; import org.connectbot.bean.HostBean; +import org.connectbot.data.HostStorage; import org.connectbot.service.OnHostStatusChangedListener; import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalManager; @@ -71,7 +72,7 @@ public class HostListActivity extends ListActivity implements OnHostStatusChange protected TerminalManager bound = null; - protected HostDatabase hostdb; + private HostStorage hostdb; private List hosts; protected LayoutInflater inflater = null; diff --git a/app/src/main/java/org/connectbot/data/HostStorage.java b/app/src/main/java/org/connectbot/data/HostStorage.java index 9d4fc7d..dc3e5d7 100644 --- a/app/src/main/java/org/connectbot/data/HostStorage.java +++ b/app/src/main/java/org/connectbot/data/HostStorage.java @@ -85,5 +85,5 @@ public interface HostStorage { /** * Return all port forwards for the given {@code host}. */ - PortForwardBean[] getPortForwardsForHost(HostBean host); + List getPortForwardsForHost(HostBean host); } diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java index 6e4990e..b9e29e8 100644 --- a/app/src/main/java/org/connectbot/service/TerminalBridge.java +++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java @@ -65,7 +65,7 @@ public class TerminalBridge implements VDUDisplay { private final static int FONT_SIZE_STEP = 2; private final float displayDensity; - public Integer[] color; + public int[] color; public int defaultFg = HostDatabase.DEFAULT_FG_COLOR; public int defaultBg = HostDatabase.DEFAULT_BG_COLOR; @@ -950,11 +950,11 @@ public class TerminalBridge implements VDUDisplay { } public final void resetColors() { - int[] defaults = manager.hostdb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + int[] defaults = manager.colordb.getDefaultColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); defaultFg = defaults[0]; defaultBg = defaults[1]; - color = manager.hostdb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); + color = manager.colordb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME); } private static Pattern urlPattern = null; diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 1f0ee29..88c0811 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -35,6 +35,8 @@ import java.util.TimerTask; import org.connectbot.R; import org.connectbot.bean.HostBean; import org.connectbot.bean.PubkeyBean; +import org.connectbot.data.ColorStorage; +import org.connectbot.data.HostStorage; import org.connectbot.transport.TransportFactory; import org.connectbot.util.HostDatabase; import org.connectbot.util.PreferenceConstants; @@ -87,7 +89,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen public Resources res; - public HostDatabase hostdb; + public HostStorage hostdb; + public ColorStorage colordb; public PubkeyDatabase pubkeydb; protected SharedPreferences prefs; @@ -130,6 +133,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen pubkeyTimer = new Timer("pubkeyTimer", true); hostdb = HostDatabase.get(this); + colordb = HostDatabase.get(this); pubkeydb = PubkeyDatabase.get(this); // load all marked pubkeys into memory diff --git a/app/src/main/java/org/connectbot/transport/SSH.java b/app/src/main/java/org/connectbot/transport/SSH.java index 4bad2f1..0867256 100644 --- a/app/src/main/java/org/connectbot/transport/SSH.java +++ b/app/src/main/java/org/connectbot/transport/SSH.java @@ -292,9 +292,8 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC } /** - * Attempt connection with database row pointed to by cursor. - * @param cursor - * @return true for successful authentication + * Attempt connection with given {@code pubkey}. + * @return {@code true} for successful authentication * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws IOException diff --git a/app/src/main/java/org/connectbot/transport/TransportFactory.java b/app/src/main/java/org/connectbot/transport/TransportFactory.java index 3f387c6..4576a22 100644 --- a/app/src/main/java/org/connectbot/transport/TransportFactory.java +++ b/app/src/main/java/org/connectbot/transport/TransportFactory.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.Map; import org.connectbot.bean.HostBean; +import org.connectbot.data.HostStorage; import org.connectbot.util.HostDatabase; import android.content.Context; @@ -112,10 +113,9 @@ public class TransportFactory { /** * @param hostdb Handle to HostDatabase * @param uri URI to target server - * @param host HostBean in which to put the results * @return true when host was found */ - public static HostBean findHost(HostDatabase hostdb, Uri uri) { + public static HostBean findHost(HostStorage hostdb, Uri uri) { AbsTransport transport = getTransport(uri.getScheme()); Map selection = new HashMap(); -- cgit v1.2.3 From 02773d548ff5eaac9ac0e40c62345ea31419be61 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 15:19:18 -0700 Subject: Try to add workaround for Espresso test race The keyboard was not dismissing before the next espresso action ran, so it would send the input event to the wrong window and cause a security exception. --- .../java/org/connectbot/StartupTest.java | 42 +++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java index 9b725ef..05b7ba0 100644 --- a/app/src/androidTest/java/org/connectbot/StartupTest.java +++ b/app/src/androidTest/java/org/connectbot/StartupTest.java @@ -1,6 +1,7 @@ package org.connectbot; import org.connectbot.util.HostDatabase; +import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -12,14 +13,17 @@ import android.content.res.Resources; import android.support.annotation.ColorRes; import android.support.annotation.StringRes; import android.support.test.InstrumentationRegistry; +import android.support.test.espresso.UiController; +import android.support.test.espresso.ViewAction; +import android.support.test.espresso.action.CloseKeyboardAction; import android.support.test.espresso.intent.Intents; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; +import android.view.View; import static android.support.test.espresso.Espresso.onData; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; import static android.support.test.espresso.action.ViewActions.longClick; import static android.support.test.espresso.action.ViewActions.pressBack; import static android.support.test.espresso.action.ViewActions.pressImeActionButton; @@ -153,4 +157,40 @@ public class StartupTest { onView(withId(R.id.console_flip)).check(matches( hasDescendant(allOf(isDisplayed(), withId(R.id.terminal_view))))); } + + /* + * This is to work around a race condition where the software keyboard does not dismiss in time + * and you get a Security Exception. + * + * From: https://code.google.com/p/android-test-kit/issues/detail?id=79#c7 + */ + public static ViewAction closeSoftKeyboard() { + return new ViewAction() { + /** + * The delay time to allow the soft keyboard to dismiss. + */ + private static final long KEYBOARD_DISMISSAL_DELAY_MILLIS = 1000L; + + /** + * The real {@link CloseKeyboardAction} instance. + */ + private final ViewAction mCloseSoftKeyboard = new CloseKeyboardAction(); + + @Override + public Matcher getConstraints() { + return mCloseSoftKeyboard.getConstraints(); + } + + @Override + public String getDescription() { + return mCloseSoftKeyboard.getDescription(); + } + + @Override + public void perform(final UiController uiController, final View view) { + mCloseSoftKeyboard.perform(uiController, view); + uiController.loopMainThreadForAtLeast(KEYBOARD_DISMISSAL_DELAY_MILLIS); + } + }; + } } -- cgit v1.2.3 From 43fb4e2ff64c777389e9d90393f8711ee7f9f063 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 15:20:38 -0700 Subject: Rename the "red" host test entry to be more unique --- app/src/androidTest/java/org/connectbot/StartupTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java index 05b7ba0..14eabff 100644 --- a/app/src/androidTest/java/org/connectbot/StartupTest.java +++ b/app/src/androidTest/java/org/connectbot/StartupTest.java @@ -101,9 +101,9 @@ public class StartupTest { } @Test - public void localConnectionCanChangeToRed() throws Exception { - startNewLocalConnectionAndGoBack("Local1"); - changeColor("Local1", R.color.red, R.string.color_red); + public void localConnectionCanChangeToRed() { + startNewLocalConnectionAndGoBack("RedLocal"); + changeColor("RedLocal", R.color.red, R.string.color_red); } /** -- cgit v1.2.3 From 85043c9219de3b9d69557b4de61b4a85a19f234a Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 17:12:38 -0700 Subject: Remove unused imports --- app/src/main/java/org/connectbot/ColorsActivity.java | 2 -- app/src/main/java/org/connectbot/transport/TransportFactory.java | 1 - 2 files changed, 3 deletions(-) diff --git a/app/src/main/java/org/connectbot/ColorsActivity.java b/app/src/main/java/org/connectbot/ColorsActivity.java index 907992e..1ec1fb0 100644 --- a/app/src/main/java/org/connectbot/ColorsActivity.java +++ b/app/src/main/java/org/connectbot/ColorsActivity.java @@ -18,8 +18,6 @@ package org.connectbot; import java.text.NumberFormat; -import java.util.Arrays; -import java.util.List; import org.connectbot.data.ColorStorage; import org.connectbot.util.Colors; diff --git a/app/src/main/java/org/connectbot/transport/TransportFactory.java b/app/src/main/java/org/connectbot/transport/TransportFactory.java index 4576a22..680cb33 100644 --- a/app/src/main/java/org/connectbot/transport/TransportFactory.java +++ b/app/src/main/java/org/connectbot/transport/TransportFactory.java @@ -22,7 +22,6 @@ import java.util.Map; import org.connectbot.bean.HostBean; import org.connectbot.data.HostStorage; -import org.connectbot.util.HostDatabase; import android.content.Context; import android.net.Uri; -- cgit v1.2.3 From 705b3461cfa26f074464a32a2642741691340c1f Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Fri, 11 Sep 2015 17:37:01 -0700 Subject: Fix merge error in PubkeyListActivity --- app/src/main/java/org/connectbot/PubkeyListActivity.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/org/connectbot/PubkeyListActivity.java b/app/src/main/java/org/connectbot/PubkeyListActivity.java index a095583..d8a8e70 100644 --- a/app/src/main/java/org/connectbot/PubkeyListActivity.java +++ b/app/src/main/java/org/connectbot/PubkeyListActivity.java @@ -134,11 +134,6 @@ public class PubkeyListActivity extends ListActivity implements EventListener { super.onCreate(icicle); setContentView(R.layout.act_pubkeylist); - // connect with hosts database and populate list - pubkeydb = new PubkeyDatabase(this); - - updateList(); - registerForContextMenu(getListView()); getListView().setOnItemClickListener(new OnItemClickListener() { -- cgit v1.2.3