diff --git a/app/src/main/java/co/tinode/tindroid/db/AccountDb.java b/app/src/main/java/co/tinode/tindroid/db/AccountDb.java index 5e0b6ef0..6891ed5d 100644 --- a/app/src/main/java/co/tinode/tindroid/db/AccountDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/AccountDb.java @@ -5,6 +5,7 @@ import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; +import android.util.Log; /** * List of Tinode accounts. @@ -21,6 +22,7 @@ public class AccountDb implements BaseColumns { private static final String COLUMN_NAME_HOST_URI = "host_uri"; private static final String COLUMN_NAME_CRED_METHODS = "cred_methods"; private static final String COLUMN_NAME_DEVICE_ID = "device_id"; + private static final String TAG = "AccountDb"; /** * Statements to drop accounts table and index @@ -120,6 +122,20 @@ static void delete(SQLiteDatabase db, StoredAccount acc) { db.delete(TABLE_NAME, _ID + "=" + acc.id, null); } + /** + * Deletes all records from 'accounts' table. + * + * @param db Database to use. + */ + static void truncateTable(SQLiteDatabase db) { + try { + // 'DELETE FROM table' in SQLite is equivalent to truncation. + db.delete(TABLE_NAME, null, null); + } catch (SQLException ex) { + Log.w(TAG, "Delete failed", ex); + } + } + static StoredAccount getByUid(SQLiteDatabase db, String uid) { if (uid == null) { return null; diff --git a/app/src/main/java/co/tinode/tindroid/db/BaseDb.java b/app/src/main/java/co/tinode/tindroid/db/BaseDb.java index 0bc5b242..1aceb562 100644 --- a/app/src/main/java/co/tinode/tindroid/db/BaseDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/BaseDb.java @@ -272,6 +272,15 @@ void setUid(String uid, String hostURI) { } } + void clearDb() { + SQLiteDatabase db = sInstance.getWritableDatabase(); + MessageDb.truncateTable(db); + SubscriberDb.truncateTable(db); + TopicDb.truncateTable(db); + UserDb.truncateTable(db); + AccountDb.truncateTable(db); + } + void updateCredentials(String[] credMethods) { if (mAcc != null) { if (AccountDb.updateCredentials(sInstance.getWritableDatabase(), credMethods)) { diff --git a/app/src/main/java/co/tinode/tindroid/db/MessageDb.java b/app/src/main/java/co/tinode/tindroid/db/MessageDb.java index c1115f22..885b705c 100644 --- a/app/src/main/java/co/tinode/tindroid/db/MessageDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/MessageDb.java @@ -777,6 +777,20 @@ static void deleteAll(SQLiteDatabase db, long topicId) { } } + /** + * Deletes all records from 'messages' table. + * + * @param db Database to use. + */ + static void truncateTable(SQLiteDatabase db) { + try { + // 'DELETE FROM table' in SQLite is equivalent to truncation. + db.delete(TABLE_NAME, null, null); + } catch (SQLException ex) { + Log.w(TAG, "Delete failed", ex); + } + } + /** * Delete failed messages in a given topic. * diff --git a/app/src/main/java/co/tinode/tindroid/db/SqlStore.java b/app/src/main/java/co/tinode/tindroid/db/SqlStore.java index 3901d477..2464673e 100644 --- a/app/src/main/java/co/tinode/tindroid/db/SqlStore.java +++ b/app/src/main/java/co/tinode/tindroid/db/SqlStore.java @@ -6,7 +6,6 @@ import android.util.Log; import java.io.Closeable; -import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; @@ -82,7 +81,9 @@ public boolean isReady() { } public void logout() { + // Clear the database. mDbh.setUid(null, null); + mDbh.clearDb(); } @Override diff --git a/app/src/main/java/co/tinode/tindroid/db/SubscriberDb.java b/app/src/main/java/co/tinode/tindroid/db/SubscriberDb.java index fe9f8e2c..1ede073f 100644 --- a/app/src/main/java/co/tinode/tindroid/db/SubscriberDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/SubscriberDb.java @@ -260,6 +260,20 @@ static boolean deleteForTopic(SQLiteDatabase db, long topicId) { return db.delete(TABLE_NAME, COLUMN_NAME_TOPIC_ID + "=" + topicId, null) > 0; } + /** + * Deletes all records from 'subscribers' table. + * + * @param db Database to use. + */ + static void truncateTable(SQLiteDatabase db) { + try { + // 'DELETE FROM table' in SQLite is equivalent to truncation. + db.delete(TABLE_NAME, null, null); + } catch (SQLException ex) { + Log.w(TAG, "Delete failed", ex); + } + } + /** * Get the next available senderId for the given topic. Min Id == 1. * diff --git a/app/src/main/java/co/tinode/tindroid/db/TopicDb.java b/app/src/main/java/co/tinode/tindroid/db/TopicDb.java index 977fc57c..58f95e74 100644 --- a/app/src/main/java/co/tinode/tindroid/db/TopicDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/TopicDb.java @@ -534,6 +534,20 @@ static void deleteAll(SQLiteDatabase db, long accId) { db.delete(TABLE_NAME, COLUMN_NAME_ACCOUNT_ID + "=" + accId, null); } + /** + * Deletes all records from 'topics' table. + * + * @param db Database to use. + */ + static void truncateTable(SQLiteDatabase db) { + try { + // 'DELETE FROM table' in SQLite is equivalent to truncation. + db.delete(TABLE_NAME, null, null); + } catch (SQLException ex) { + Log.w(TAG, "Delete failed", ex); + } + } + /** * Given topic name, get it's database _id * diff --git a/app/src/main/java/co/tinode/tindroid/db/UserDb.java b/app/src/main/java/co/tinode/tindroid/db/UserDb.java index 583f1c68..68ebf59f 100644 --- a/app/src/main/java/co/tinode/tindroid/db/UserDb.java +++ b/app/src/main/java/co/tinode/tindroid/db/UserDb.java @@ -2,8 +2,10 @@ import android.content.ContentValues; import android.database.Cursor; +import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; +import android.util.Log; import java.util.Date; @@ -80,6 +82,7 @@ public class UserDb implements BaseColumns { */ static final String DROP_INDEX = "DROP INDEX IF EXISTS " + INDEX_NAME; + private static final String TAG = "UserDb"; /** * Save user to DB @@ -168,6 +171,20 @@ static void deleteAll(SQLiteDatabase db, long accId) { db.delete(TABLE_NAME, COLUMN_NAME_ACCOUNT_ID + "=" + accId, null); } + /** + * Deletes all records from 'users' table. + * + * @param db Database to use. + */ + static void truncateTable(SQLiteDatabase db) { + try { + // 'DELETE FROM table' in SQLite is equivalent to truncation. + db.delete(TABLE_NAME, null, null); + } catch (SQLException ex) { + Log.w(TAG, "Delete failed", ex); + } + } + /** * Given UID, get it's database _id *