From f2e820f7bb47f6a7cd94d85df236ebc212815cb2 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Mon, 13 Dec 2021 22:41:01 +0100 Subject: [PATCH] Cleanup DBHelper --- .../card_locker/CardShortcutConfigure.java | 11 +- .../CardsOnPowerScreenService.java | 7 +- .../java/protect/card_locker/DBHelper.java | 274 ++++++----------- .../card_locker/GroupCursorAdapter.java | 7 +- .../protect/card_locker/ImportExportTask.java | 17 +- .../card_locker/LoyaltyCardEditActivity.java | 25 +- .../card_locker/LoyaltyCardViewActivity.java | 17 +- .../protect/card_locker/MainActivity.java | 15 +- .../card_locker/ManageGroupActivity.java | 13 +- .../card_locker/ManageGroupCursorAdapter.java | 9 +- .../card_locker/ManageGroupsActivity.java | 21 +- .../protect/card_locker/ShortcutHelper.java | 5 +- .../importexport/CatimaExporter.java | 17 +- .../importexport/CatimaImporter.java | 68 ++--- .../card_locker/importexport/Exporter.java | 3 +- .../importexport/FidmeImporter.java | 17 +- .../card_locker/importexport/Importer.java | 4 +- .../importexport/MultiFormatExporter.java | 5 +- .../importexport/MultiFormatImporter.java | 10 +- .../importexport/StocardImporter.java | 11 +- .../importexport/VoucherVaultImporter.java | 11 +- .../protect/card_locker/DatabaseTest.java | 191 ++++++------ .../protect/card_locker/ImportExportTest.java | 276 +++++++++--------- .../protect/card_locker/ImportURITest.java | 13 +- .../LoyaltyCardCursorAdapterTest.java | 58 ++-- .../LoyaltyCardViewActivityTest.java | 167 +++++------ .../protect/card_locker/MainActivityTest.java | 45 +-- .../java/protect/card_locker/TestHelpers.java | 5 +- 28 files changed, 614 insertions(+), 708 deletions(-) diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java index 39b0cb617..50fb18f80 100644 --- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java +++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java @@ -1,6 +1,7 @@ package protect.card_locker; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.widget.Toast; @@ -17,7 +18,7 @@ import androidx.recyclerview.widget.RecyclerView; */ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener { static final String TAG = "Catima"; - final DBHelper mDb = new DBHelper(this); + final SQLiteDatabase mDatabase = new DBHelper(this).getReadableDatabase(); @Override public void onCreate(Bundle bundle) { @@ -31,10 +32,8 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC Toolbar toolbar = findViewById(R.id.toolbar); toolbar.setTitle(R.string.shortcutSelectCard); - final DBHelper db = new DBHelper(this); - // If there are no cards, bail - if (db.getLoyaltyCardCount() == 0) { + if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) { Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show(); finish(); } @@ -45,13 +44,13 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns)); } - Cursor cardCursor = db.getLoyaltyCardCursor(); + Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase); final LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(this, cardCursor, this); cardList.setAdapter(adapter); } private void onClickAction(int position) { - Cursor selected = mDb.getLoyaltyCardCursor(); + Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase); selected.moveToPosition(position); LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected); diff --git a/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java b/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java index a6c0a54b6..35bac0ae7 100644 --- a/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java +++ b/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java @@ -5,6 +5,7 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.drawable.Icon; import android.os.Build; @@ -27,12 +28,12 @@ public class CardsOnPowerScreenService extends ControlsProviderService { public static final String PREFIX = "catima-"; static final String TAG = "Catima"; - private final DBHelper dbHelper = new DBHelper(this); + private final SQLiteDatabase mDatabase = new DBHelper(this).getReadableDatabase(); @NonNull @Override public Flow.Publisher createPublisherForAllAvailable() { - Cursor loyaltyCardCursor = dbHelper.getLoyaltyCardCursor(); + Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase); return subscriber -> { while (loyaltyCardCursor.moveToNext()) { LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor); @@ -64,7 +65,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService { try { Integer cardId = this.controlIdToCardId(controlId); - LoyaltyCard card = dbHelper.getLoyaltyCard(cardId); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, cardId); Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .putExtra("id", card.id); diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index a8fee8220..2773b9f88 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -111,7 +111,6 @@ public class DBHelper extends SQLiteOpenHelper { "tokenize=unicode61);"); } - @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 2 && newVersion >= 2) { @@ -305,7 +304,7 @@ public class DBHelper extends SQLiteOpenHelper { } } - private ContentValues generateFTSContentValues(final int id, final String store, final String note) { + private static ContentValues generateFTSContentValues(final int id, final String store, final String note) { // FTS on Android is severely limited and can only search for word starting with a certain string // So for each word, we grab every single substring // This makes it possible to find Décathlon by searching both de and cat, for example @@ -337,22 +336,21 @@ public class DBHelper extends SQLiteOpenHelper { return ftsContentValues; } - private void insertFTS(final SQLiteDatabase db, final int id, final String store, final String note) { + private static void insertFTS(final SQLiteDatabase db, final int id, final String store, final String note) { db.insert(LoyaltyCardDbFTS.TABLE, null, generateFTSContentValues(id, store, note)); } - private void updateFTS(final SQLiteDatabase db, final int id, final String store, final String note) { + private static void updateFTS(final SQLiteDatabase db, final int id, final String store, final String note) { db.update(LoyaltyCardDbFTS.TABLE, generateFTSContentValues(id, store, note), whereAttrs(LoyaltyCardDbFTS.ID), withArgs(id)); } - public long insertLoyaltyCard(final String store, final String note, final Date expiry, - final BigDecimal balance, final Currency balanceType, - final String cardId, final String barcodeId, - final CatimaBarcode barcodeType, final Integer headerColor, - final int starStatus, final Long lastUsed) { - SQLiteDatabase db = getWritableDatabase(); - db.beginTransaction(); + public static long insertLoyaltyCard( + final SQLiteDatabase database, final String store, final String note, final Date expiry, + final BigDecimal balance, final Currency balanceType, final String cardId, + final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor, + final int starStatus, final Long lastUsed) { + database.beginTransaction(); // Card ContentValues contentValues = new ContentValues(); @@ -367,56 +365,23 @@ public class DBHelper extends SQLiteOpenHelper { contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime()); - long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); + long id = database.insert(LoyaltyCardDbIds.TABLE, null, contentValues); // FTS - insertFTS(db, (int) id, store, note); + insertFTS(database, (int) id, store, note); - db.setTransactionSuccessful(); - db.endTransaction(); + database.setTransactionSuccessful(); + database.endTransaction(); return id; } - public long insertLoyaltyCard(final SQLiteDatabase db, final String store, - final String note, final Date expiry, final BigDecimal balance, - final Currency balanceType, final String cardId, - final String barcodeId, final CatimaBarcode barcodeType, - final Integer headerColor, final int starStatus, - final Long lastUsed) { - db.beginTransaction(); - - // Card - ContentValues contentValues = new ContentValues(); - contentValues.put(LoyaltyCardDbIds.STORE, store); - contentValues.put(LoyaltyCardDbIds.NOTE, note); - contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); - contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); - contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); - contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); - contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); - contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null); - contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); - contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime()); - long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); - - // FTS - insertFTS(db, (int) id, store, note); - - db.setTransactionSuccessful(); - db.endTransaction(); - - return id; - } - - public long insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store, - final String note, final Date expiry, final BigDecimal balance, - final Currency balanceType, final String cardId, - final String barcodeId, final CatimaBarcode barcodeType, - final Integer headerColor, final int starStatus, - final Long lastUsed) { - db.beginTransaction(); + public static long insertLoyaltyCard( + final SQLiteDatabase database, final int id, final String store, final String note, + final Date expiry, final BigDecimal balance, final Currency balanceType, + final String cardId, final String barcodeId, final CatimaBarcode barcodeType, + final Integer headerColor, final int starStatus, final Long lastUsed) { + database.beginTransaction(); // Card ContentValues contentValues = new ContentValues(); @@ -432,24 +397,23 @@ public class DBHelper extends SQLiteOpenHelper { contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime()); - db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); + database.insert(LoyaltyCardDbIds.TABLE, null, contentValues); // FTS - insertFTS(db, id, store, note); + insertFTS(database, id, store, note); - db.setTransactionSuccessful(); - db.endTransaction(); + database.setTransactionSuccessful(); + database.endTransaction(); return id; } - public boolean updateLoyaltyCard(final int id, final String store, final String note, - final Date expiry, final BigDecimal balance, - final Currency balanceType, final String cardId, - final String barcodeId, final CatimaBarcode barcodeType, - final Integer headerColor) { - SQLiteDatabase db = getWritableDatabase(); - db.beginTransaction(); + public static boolean updateLoyaltyCard( + SQLiteDatabase database, final int id, final String store, final String note, + final Date expiry, final BigDecimal balance, final Currency balanceType, + final String cardId, final String barcodeId, final CatimaBarcode barcodeType, + final Integer headerColor) { + database.beginTransaction(); // Card ContentValues contentValues = new ContentValues(); @@ -462,53 +426,49 @@ public class DBHelper extends SQLiteOpenHelper { contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, + int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id)); // FTS - updateFTS(db, id, store, note); + updateFTS(database, id, store, note); - db.setTransactionSuccessful(); - db.endTransaction(); + database.setTransactionSuccessful(); + database.endTransaction(); return (rowsUpdated == 1); } - public boolean updateLoyaltyCardStarStatus(final int id, final int starStatus) { - SQLiteDatabase db = getWritableDatabase(); + public static boolean updateLoyaltyCardStarStatus(SQLiteDatabase database, final int id, final int starStatus) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); - int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, + int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id)); return (rowsUpdated == 1); } - public boolean updateLoyaltyCardLastUsed(final int id) { - SQLiteDatabase db = getWritableDatabase(); + public static boolean updateLoyaltyCardLastUsed(SQLiteDatabase database, final int id) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.LAST_USED, System.currentTimeMillis() / 1000); - int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, + int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id)); return (rowsUpdated == 1); } - public boolean updateLoyaltyCardZoomLevel(int loyaltyCardId, int zoomLevel) { - SQLiteDatabase db = getWritableDatabase(); + public static boolean updateLoyaltyCardZoomLevel(SQLiteDatabase database, int loyaltyCardId, int zoomLevel) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.ZOOM_LEVEL, zoomLevel); Log.d("updateLoyaltyCardZLevel", "Card Id = " + loyaltyCardId + " Zoom level= " + zoomLevel); - int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, + int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues, whereAttrs(LoyaltyCardDbIds.ID), withArgs(loyaltyCardId)); Log.d("updateLoyaltyCardZLevel", "Rows changed = " + rowsUpdated); return (rowsUpdated == 1); } - public LoyaltyCard getLoyaltyCard(final int id) { - SQLiteDatabase db = getReadableDatabase(); - Cursor data = db.query(LoyaltyCardDbIds.TABLE, null, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id), null, null, null); + public static LoyaltyCard getLoyaltyCard(SQLiteDatabase database, final int id) { + Cursor data = database.query(LoyaltyCardDbIds.TABLE, null, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id), null, null, null); LoyaltyCard card = null; @@ -522,9 +482,8 @@ public class DBHelper extends SQLiteOpenHelper { return card; } - public List getLoyaltyCardGroups(final int id) { - SQLiteDatabase db = getReadableDatabase(); - Cursor data = db.rawQuery("select * from " + LoyaltyCardDbGroups.TABLE + " g " + + public static List getLoyaltyCardGroups(SQLiteDatabase database, final int id) { + Cursor data = database.rawQuery("select * from " + LoyaltyCardDbGroups.TABLE + " g " + " LEFT JOIN " + LoyaltyCardDbIdsGroups.TABLE + " ig ON ig." + LoyaltyCardDbIdsGroups.groupID + " = g." + LoyaltyCardDbGroups.ID + " where " + LoyaltyCardDbIdsGroups.cardID + "=?" + " ORDER BY " + LoyaltyCardDbIdsGroups.groupID, withArgs(id)); @@ -547,11 +506,9 @@ public class DBHelper extends SQLiteOpenHelper { return groups; } - public void setLoyaltyCardGroups(final int id, List groups) { - SQLiteDatabase db = getWritableDatabase(); - + public static void setLoyaltyCardGroups(SQLiteDatabase database, final int id, List groups) { // First delete lookup table entries associated with this card - db.delete(LoyaltyCardDbIdsGroups.TABLE, + database.delete(LoyaltyCardDbIdsGroups.TABLE, whereAttrs(LoyaltyCardDbIdsGroups.cardID), withArgs(id)); @@ -560,39 +517,23 @@ public class DBHelper extends SQLiteOpenHelper { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIdsGroups.cardID, id); contentValues.put(LoyaltyCardDbIdsGroups.groupID, group._id); - db.insert(LoyaltyCardDbIdsGroups.TABLE, null, contentValues); + database.insert(LoyaltyCardDbIdsGroups.TABLE, null, contentValues); } } - public void setLoyaltyCardGroups(final SQLiteDatabase db, final int id, List groups) { - // First delete lookup table entries associated with this card - db.delete(LoyaltyCardDbIdsGroups.TABLE, - whereAttrs(LoyaltyCardDbIdsGroups.cardID), - withArgs(id)); - - // Then create entries for selected values - for (Group group : groups) { - ContentValues contentValues = new ContentValues(); - contentValues.put(LoyaltyCardDbIdsGroups.cardID, id); - contentValues.put(LoyaltyCardDbIdsGroups.groupID, group._id); - db.insert(LoyaltyCardDbIdsGroups.TABLE, null, contentValues); - } - } - - public boolean deleteLoyaltyCard(Context context, final int id) { - SQLiteDatabase db = getWritableDatabase(); + public static boolean deleteLoyaltyCard(SQLiteDatabase database, Context context, final int id) { // Delete card - int rowsDeleted = db.delete(LoyaltyCardDbIds.TABLE, + int rowsDeleted = database.delete(LoyaltyCardDbIds.TABLE, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id)); // And delete lookup table entries associated with this card - db.delete(LoyaltyCardDbIdsGroups.TABLE, + database.delete(LoyaltyCardDbIdsGroups.TABLE, whereAttrs(LoyaltyCardDbIdsGroups.cardID), withArgs(id)); // Delete FTS table entries - db.delete(LoyaltyCardDbFTS.TABLE, + database.delete(LoyaltyCardDbFTS.TABLE, whereAttrs(LoyaltyCardDbFTS.ID), withArgs(id)); @@ -608,9 +549,9 @@ public class DBHelper extends SQLiteOpenHelper { return (rowsDeleted == 1); } - public Cursor getLoyaltyCardCursor() { + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database) { // An empty string will match everything - return getLoyaltyCardCursor(""); + return getLoyaltyCardCursor(database, ""); } /** @@ -619,8 +560,8 @@ public class DBHelper extends SQLiteOpenHelper { * @param filter * @return Cursor */ - public Cursor getLoyaltyCardCursor(final String filter) { - return getLoyaltyCardCursor(filter, null); + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter) { + return getLoyaltyCardCursor(database, filter, null); } /** @@ -630,8 +571,8 @@ public class DBHelper extends SQLiteOpenHelper { * @param group * @return Cursor */ - public Cursor getLoyaltyCardCursor(final String filter, Group group) { - return getLoyaltyCardCursor(filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending); + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group) { + return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending); } /** @@ -642,14 +583,12 @@ public class DBHelper extends SQLiteOpenHelper { * @param order * @return Cursor */ - public Cursor getLoyaltyCardCursor(String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) { + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) { StringBuilder groupFilter = new StringBuilder(); String limitString = ""; - SQLiteDatabase db = getReadableDatabase(); - if (group != null) { - List allowedIds = getGroupCardIds(group._id); + List allowedIds = getGroupCardIds(database, group._id); // Empty group if (!allowedIds.isEmpty()) { @@ -669,7 +608,7 @@ public class DBHelper extends SQLiteOpenHelper { String orderField = getFieldForOrder(order); - return db.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE + + return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE + " JOIN " + LoyaltyCardDbFTS.TABLE + " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID + (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") + @@ -686,9 +625,8 @@ public class DBHelper extends SQLiteOpenHelper { * * @return Integer */ - public int getLoyaltyCardCount() { - SQLiteDatabase db = getReadableDatabase(); - return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIds.TABLE); + public static int getLoyaltyCardCount(SQLiteDatabase database) { + return (int) DatabaseUtils.queryNumEntries(database, LoyaltyCardDbIds.TABLE); } /** @@ -696,15 +634,13 @@ public class DBHelper extends SQLiteOpenHelper { * * @return Cursor */ - public Cursor getGroupCursor() { - SQLiteDatabase db = getReadableDatabase(); - - return db.rawQuery("select * from " + LoyaltyCardDbGroups.TABLE + + public static Cursor getGroupCursor(SQLiteDatabase database) { + return database.rawQuery("select * from " + LoyaltyCardDbGroups.TABLE + " ORDER BY " + LoyaltyCardDbGroups.ORDER + " ASC," + LoyaltyCardDbGroups.ID + " COLLATE NOCASE ASC", null, null); } - public List getGroups() { - Cursor data = getGroupCursor(); + public static List getGroups(SQLiteDatabase database) { + Cursor data = getGroupCursor(database); List groups = new ArrayList<>(); @@ -722,15 +658,14 @@ public class DBHelper extends SQLiteOpenHelper { return groups; } - public void reorderGroups(final List groups) { + public static void reorderGroups(SQLiteDatabase database, final List groups) { Integer order = 0; - SQLiteDatabase db = getWritableDatabase(); for (Group group : groups) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbGroups.ORDER, order); - db.update(LoyaltyCardDbGroups.TABLE, contentValues, + database.update(LoyaltyCardDbGroups.TABLE, contentValues, whereAttrs(LoyaltyCardDbGroups.ID), withArgs(group._id)); @@ -738,9 +673,8 @@ public class DBHelper extends SQLiteOpenHelper { } } - public Group getGroup(final String groupName) { - SQLiteDatabase db = getReadableDatabase(); - Cursor data = db.query(LoyaltyCardDbGroups.TABLE, null, + public static Group getGroup(SQLiteDatabase database, final String groupName) { + Cursor data = database.query(LoyaltyCardDbGroups.TABLE, null, whereAttrs(LoyaltyCardDbGroups.ID), withArgs(groupName), null, null, null); Group group = null; @@ -753,14 +687,12 @@ public class DBHelper extends SQLiteOpenHelper { return group; } - public int getGroupCount() { - SQLiteDatabase db = getReadableDatabase(); - return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbGroups.TABLE); + public static int getGroupCount(SQLiteDatabase database) { + return (int) DatabaseUtils.queryNumEntries(database, LoyaltyCardDbGroups.TABLE); } - public List getGroupCardIds(final String groupName) { - SQLiteDatabase db = getReadableDatabase(); - Cursor data = db.query(LoyaltyCardDbIdsGroups.TABLE, withArgs(LoyaltyCardDbIdsGroups.cardID), + public static List getGroupCardIds(SQLiteDatabase database, final String groupName) { + Cursor data = database.query(LoyaltyCardDbIdsGroups.TABLE, withArgs(LoyaltyCardDbIdsGroups.cardID), whereAttrs(LoyaltyCardDbIdsGroups.groupID), withArgs(groupName), null, null, null); List cardIds = new ArrayList<>(); @@ -779,99 +711,85 @@ public class DBHelper extends SQLiteOpenHelper { return cardIds; } - public long insertGroup(final String name) { + public static long insertGroup(SQLiteDatabase database, final String name) { if (name.isEmpty()) return -1; - SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbGroups.ID, name); - contentValues.put(LoyaltyCardDbGroups.ORDER, getGroupCount()); - return db.insert(LoyaltyCardDbGroups.TABLE, null, contentValues); + contentValues.put(LoyaltyCardDbGroups.ORDER, getGroupCount(database)); + return database.insert(LoyaltyCardDbGroups.TABLE, null, contentValues); } - public boolean insertGroup(final SQLiteDatabase db, final String name) { - ContentValues contentValues = new ContentValues(); - contentValues.put(LoyaltyCardDbGroups.ID, name); - contentValues.put(LoyaltyCardDbGroups.ORDER, getGroupCount()); - final long newId = db.insert(LoyaltyCardDbGroups.TABLE, null, contentValues); - return newId != -1; - } - - public boolean updateGroup(final String groupName, final String newName) { + public static boolean updateGroup(SQLiteDatabase database, final String groupName, final String newName) { if (newName.isEmpty()) return false; boolean success = false; - SQLiteDatabase db = getWritableDatabase(); ContentValues groupContentValues = new ContentValues(); groupContentValues.put(LoyaltyCardDbGroups.ID, newName); ContentValues lookupContentValues = new ContentValues(); lookupContentValues.put(LoyaltyCardDbIdsGroups.groupID, newName); - db.beginTransaction(); + database.beginTransaction(); try { // Update group name - int groupsChanged = db.update(LoyaltyCardDbGroups.TABLE, groupContentValues, + int groupsChanged = database.update(LoyaltyCardDbGroups.TABLE, groupContentValues, whereAttrs(LoyaltyCardDbGroups.ID), withArgs(groupName)); // Also update lookup tables - db.update(LoyaltyCardDbIdsGroups.TABLE, lookupContentValues, + database.update(LoyaltyCardDbIdsGroups.TABLE, lookupContentValues, whereAttrs(LoyaltyCardDbIdsGroups.groupID), withArgs(groupName)); if (groupsChanged == 1) { - db.setTransactionSuccessful(); + database.setTransactionSuccessful(); success = true; } - } catch (SQLiteException e) { + } catch (SQLiteException ignored) { } finally { - db.endTransaction(); + database.endTransaction(); } return success; } - public boolean deleteGroup(final String groupName) { + public static boolean deleteGroup(SQLiteDatabase database, final String groupName) { boolean success = false; - SQLiteDatabase db = getWritableDatabase(); - - db.beginTransaction(); + database.beginTransaction(); try { // Delete group - int groupsDeleted = db.delete(LoyaltyCardDbGroups.TABLE, + int groupsDeleted = database.delete(LoyaltyCardDbGroups.TABLE, whereAttrs(LoyaltyCardDbGroups.ID), withArgs(groupName)); // And delete lookup table entries associated with this group - db.delete(LoyaltyCardDbIdsGroups.TABLE, + database.delete(LoyaltyCardDbIdsGroups.TABLE, whereAttrs(LoyaltyCardDbIdsGroups.groupID), withArgs(groupName)); if (groupsDeleted == 1) { - db.setTransactionSuccessful(); + database.setTransactionSuccessful(); success = true; } } finally { - db.endTransaction(); + database.endTransaction(); } // Reorder after delete to ensure no bad order IDs - reorderGroups(getGroups()); + reorderGroups(database, getGroups(database)); return success; } - public int getGroupCardCount(final String groupName) { - SQLiteDatabase db = getReadableDatabase(); - - return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIdsGroups.TABLE, + public static int getGroupCardCount(SQLiteDatabase database, final String groupName) { + return (int) DatabaseUtils.queryNumEntries(database, LoyaltyCardDbIdsGroups.TABLE, whereAttrs(LoyaltyCardDbIdsGroups.groupID), withArgs(groupName)); } - private String whereAttrs(String... attrs) { + static private String whereAttrs(String... attrs) { if (attrs.length == 0) { return null; } @@ -882,13 +800,13 @@ public class DBHelper extends SQLiteOpenHelper { return whereClause.toString(); } - private String[] withArgs(Object... object) { + static private String[] withArgs(Object... object) { return Arrays.stream(object) .map(String::valueOf) .toArray(String[]::new); } - private String getFieldForOrder(LoyaltyCardOrder order) { + private static String getFieldForOrder(LoyaltyCardOrder order) { if (order == LoyaltyCardOrder.Alpha) { return LoyaltyCardDbIds.STORE; } @@ -904,7 +822,7 @@ public class DBHelper extends SQLiteOpenHelper { throw new IllegalArgumentException("Unknown order " + order); } - private String getDbDirection(LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) { + private static String getDbDirection(LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) { if (order == LoyaltyCardOrder.LastUsed) { // We want the default sorting to put the most recently used first return direction == LoyaltyCardOrderDirection.Descending ? "ASC" : "DESC"; diff --git a/app/src/main/java/protect/card_locker/GroupCursorAdapter.java b/app/src/main/java/protect/card_locker/GroupCursorAdapter.java index 5bc22c71b..42670be6c 100644 --- a/app/src/main/java/protect/card_locker/GroupCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/GroupCursorAdapter.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.content.Context; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,7 +17,7 @@ public class GroupCursorAdapter extends BaseCursorAdapter { this.listener = listener; } - private ImportExportResult performImport(Context context, InputStream stream, DBHelper db, char[] password) { - ImportExportResult importResult = MultiFormatImporter.importData(context, db, stream, format, password); + private ImportExportResult performImport(Context context, InputStream stream, SQLiteDatabase database, char[] password) { + ImportExportResult importResult = MultiFormatImporter.importData(context, database, stream, format, password); Log.i(TAG, "Import result: " + importResult.name()); return importResult; } - private ImportExportResult performExport(Context context, OutputStream stream, DBHelper db, char[] password) { + private ImportExportResult performExport(Context context, OutputStream stream, SQLiteDatabase database, char[] password) { ImportExportResult result = ImportExportResult.GenericFailure; try { OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8); - result = MultiFormatExporter.exportData(context, db, stream, format, password); + result = MultiFormatExporter.exportData(context, database, stream, format, password); writer.close(); } catch (IOException e) { Log.e(TAG, "Unable to export file", e); @@ -98,15 +99,17 @@ public class ImportExportTask implements CompatCallable { } protected ImportExportResult doInBackground(Void... nothing) { - final DBHelper db = new DBHelper(activity); + final SQLiteDatabase database = new DBHelper(activity).getWritableDatabase(); ImportExportResult result; if (doImport) { - result = performImport(activity.getApplicationContext(), inputStream, db, password); + result = performImport(activity.getApplicationContext(), inputStream, database, password); } else { - result = performExport(activity.getApplicationContext(), outputStream, db, password); + result = performExport(activity.getApplicationContext(), outputStream, database, password); } + database.close(); + return result; } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index e3cec9049..0e671f954 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.TypedArray; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; @@ -141,7 +142,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { Uri importLoyaltyCardUri = null; - DBHelper db; + SQLiteDatabase mDatabase; ImportURIHelper importUriHelper; boolean hasChanged = false; @@ -281,9 +282,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { actionBar.setDisplayHomeAsUpEnabled(true); } + mDatabase = new DBHelper(this).getWritableDatabase(); + extractIntentFields(getIntent()); - db = new DBHelper(this); importUriHelper = new ImportURIHelper(this); for (Currency currency : Currency.getAvailableCurrencies()) { @@ -729,7 +731,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { if (tempLoyaltyCard == null) { if (updateLoyaltyCard) { - tempLoyaltyCard = db.getLoyaltyCard(loyaltyCardId); + tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId); if (tempLoyaltyCard == null) { Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId); Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show(); @@ -792,9 +794,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { barcodeTypeField.setText(tempLoyaltyCard.barcodeType != null ? tempLoyaltyCard.barcodeType.prettyName() : getString(R.string.noBarcode)); if (groupsChips.getChildCount() == 0) { - List existingGroups = db.getGroups(); + List existingGroups = DBHelper.getGroups(mDatabase); - List loyaltyCardGroups = db.getLoyaltyCardGroups(loyaltyCardId); + List loyaltyCardGroups = DBHelper.getLoyaltyCardGroups(mDatabase, loyaltyCardId); if (existingGroups.isEmpty()) { groupsChips.setVisibility(View.GONE); @@ -802,7 +804,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { groupsChips.setVisibility(View.VISIBLE); } - for (Group group : db.getGroups()) { + for (Group group : DBHelper.getGroups(mDatabase)) { Chip chip = (Chip) getLayoutInflater().inflate(R.layout.layout_chip_choice, groupsChips, false); chip.setText(group._id); chip.setTag(group); @@ -1258,7 +1260,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { } if (updateLoyaltyCard) { //update of "starStatus" not necessary, since it cannot be changed in this activity (only in ViewActivity) - db.updateLoyaltyCard(loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor); + DBHelper.updateLoyaltyCard(mDatabase, loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor); try { Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front); Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back); @@ -1268,7 +1270,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { } Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId); } else { - loyaltyCardId = (int) db.insertLoyaltyCard(tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed); + loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed); try { Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front); Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back); @@ -1278,9 +1280,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { } } - db.setLoyaltyCardGroups(loyaltyCardId, selectedGroups); + DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, selectedGroups); - ShortcutHelper.updateShortcuts(this, db.getLoyaltyCard(loyaltyCardId)); + ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId)); finish(); } @@ -1312,8 +1314,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { builder.setPositiveButton(R.string.confirm, (dialog, which) -> { Log.e(TAG, "Deleting card: " + loyaltyCardId); - DBHelper db = new DBHelper(LoyaltyCardEditActivity.this); - db.deleteLoyaltyCard(LoyaltyCardEditActivity.this, loyaltyCardId); + DBHelper.deleteLoyaltyCard(mDatabase, LoyaltyCardEditActivity.this, loyaltyCardId); ShortcutHelper.removeShortcut(LoyaltyCardEditActivity.this, loyaltyCardId); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 44ceb96e4..13d6e1263 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -3,6 +3,7 @@ package protect.card_locker; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Outline; @@ -84,7 +85,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements int loyaltyCardId; LoyaltyCard loyaltyCard; boolean rotationEnabled; - DBHelper db; + SQLiteDatabase database; ImportURIHelper importURIHelper; Settings settings; @@ -257,7 +258,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements setContentView(R.layout.loyalty_card_view_layout); - db = new DBHelper(this); + database = new DBHelper(this).getWritableDatabase(); importURIHelper = new ImportURIHelper(this); coordinatorLayout = findViewById(R.id.coordinator_layout); @@ -297,7 +298,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements Log.d(TAG, "Scaling to " + scale); loyaltyCard.zoomLevel = progress; - db.updateLoyaltyCardZoomLevel(loyaltyCardId, loyaltyCard.zoomLevel); + DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel); setCenterGuideline(loyaltyCard.zoomLevel); @@ -466,7 +467,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements window.setAttributes(attributes); } - loyaltyCard = db.getLoyaltyCard(loyaltyCardId); + loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId); if (loyaltyCard == null) { Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId); Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show(); @@ -493,7 +494,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements noteView.setVisibility(View.GONE); } - List loyaltyCardGroups = db.getLoyaltyCardGroups(loyaltyCardId); + List loyaltyCardGroups = DBHelper.getLoyaltyCardGroups(database, loyaltyCardId); if (loyaltyCardGroups.size() > 0) { List groupNames = new ArrayList<>(); @@ -640,7 +641,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements // restore bottomSheet UI states from changing orientation changeUiToBottomSheetState(bottomSheetState); - db.updateLoyaltyCardLastUsed(loyaltyCard.id); + DBHelper.updateLoyaltyCardLastUsed(database, loyaltyCard.id); } @Override @@ -665,7 +666,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements item.setVisible(false); } - loyaltyCard = db.getLoyaltyCard(loyaltyCardId); + loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId); starred = loyaltyCard.starStatus != 0; menu.findItem(R.id.action_share).setIcon(getIcon(R.drawable.ic_share_white, backgroundNeedsDarkIcons)); @@ -716,7 +717,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements case R.id.action_star_unstar: starred = !starred; - db.updateLoyaltyCardStarStatus(loyaltyCardId, starred ? 1 : 0); + DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, starred ? 1 : 0); invalidateOptionsMenu(); return true; } diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index e96c20638..b457cf869 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.database.CursorIndexOutOfBoundsException; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; @@ -40,7 +41,7 @@ import protect.card_locker.preferences.SettingsActivity; public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener { private static final String TAG = "Catima"; - private final DBHelper mDB = new DBHelper(this); + private SQLiteDatabase mDatabase; private LoyaltyCardCursorAdapter mAdapter; private ActionMode mCurrentActionMode; private SearchView mSearchView; @@ -142,7 +143,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) { Log.e(TAG, "Deleting card: " + loyaltyCard.id); - db.deleteLoyaltyCard(MainActivity.this, loyaltyCard.id); + DBHelper.deleteLoyaltyCard(mDatabase, MainActivity.this, loyaltyCard.id); ShortcutHelper.removeShortcut(MainActivity.this, loyaltyCard.id); } @@ -180,6 +181,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); + mDatabase = new DBHelper(this).getWritableDatabase(); + TabLayout groupsTabLayout = findViewById(R.id.groups); groupsTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override @@ -354,9 +357,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard group = (Group) mGroup; } - mAdapter.swapCursor(mDB.getLoyaltyCardCursor(mFilter, group, mOrder, mOrderDirection)); + mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase, mFilter, group, mOrder, mOrderDirection)); - if (mDB.getLoyaltyCardCount() > 0) { + if (DBHelper.getLoyaltyCardCount(mDatabase) > 0) { // We want the cardList to be visible regardless of the filtered match count // to ensure that the noMatchingCardsText doesn't end up being shown below // the keyboard @@ -390,9 +393,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard } public void updateTabGroups(TabLayout groupsTabLayout) { - final DBHelper db = new DBHelper(this); - - List newGroups = db.getGroups(); + List newGroups = DBHelper.getGroups(mDatabase); if (newGroups.size() == 0) { groupsTabLayout.removeAllTabs(); diff --git a/app/src/main/java/protect/card_locker/ManageGroupActivity.java b/app/src/main/java/protect/card_locker/ManageGroupActivity.java index e6387afc4..436a98cdd 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupActivity.java +++ b/app/src/main/java/protect/card_locker/ManageGroupActivity.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -25,7 +26,7 @@ import androidx.recyclerview.widget.RecyclerView; public class ManageGroupActivity extends CatimaAppCompatActivity implements ManageGroupCursorAdapter.CardAdapterListener { - private final DBHelper mDB = new DBHelper(this); + private SQLiteDatabase mDatabase; private ManageGroupCursorAdapter mAdapter; private final String SAVE_INSTANCE_ADAPTER_STATE = "adapterState"; @@ -45,6 +46,8 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); + mDatabase = new DBHelper(this).getWritableDatabase(); + mHelpText = findViewById(R.id.helpText); mCardList = findViewById(R.id.list); FloatingActionButton saveButton = findViewById(R.id.fabSave); @@ -70,7 +73,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana return; } if (!mGroup._id.equals(currentGroupName)) { - if (mDB.getGroup(currentGroupName) != null) { + if (DBHelper.getGroup(mDatabase, currentGroupName) != null) { mGroupNameNotInUse = false; mGroupNameText.setError(getResources().getText(R.string.group_name_already_in_use)); } else { @@ -86,7 +89,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana throw (new IllegalArgumentException("this activity expects a group loaded into it's intent")); } Log.d("groupId", "groupId: " + groupId); - mGroup = mDB.getGroup(groupId); + mGroup = DBHelper.getGroup(mDatabase, groupId); if (mGroup == null) { throw (new IllegalArgumentException("cannot load group " + groupId + " from database")); } @@ -123,7 +126,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana mAdapter.commitToDatabase(); if (!currentGroupName.equals(mGroup._id)) { - mDB.updateGroup(mGroup._id, currentGroupName); + DBHelper.updateGroup(mDatabase, mGroup._id, currentGroupName); } Toast.makeText(getApplicationContext(), R.string.group_updated, Toast.LENGTH_SHORT).show(); finish(); @@ -163,7 +166,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana } private void updateLoyaltyCardList() { - mAdapter.swapCursor(mDB.getLoyaltyCardCursor()); + mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase)); if (mAdapter.getItemCount() == 0) { mCardList.setVisibility(View.GONE); diff --git a/app/src/main/java/protect/card_locker/ManageGroupCursorAdapter.java b/app/src/main/java/protect/card_locker/ManageGroupCursorAdapter.java index bf37effb5..9e198719b 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/ManageGroupCursorAdapter.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.content.Context; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import java.util.HashMap; import java.util.List; @@ -13,13 +14,13 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter { private HashMap mIsLoyaltyCardInGroupCache; private HashMap> mGetGroupCache; final private Group mGroup; - final private DBHelper mDb; + final private SQLiteDatabase mDatabase; public ManageGroupCursorAdapter(Context inputContext, Cursor inputCursor, CardAdapterListener inputListener, Group group) { super(inputContext, inputCursor, inputListener); mGroup = new Group(group._id, group.order); mInGroupOverlay = new HashMap<>(); - mDb = new DBHelper(inputContext); + mDatabase = new DBHelper(inputContext).getWritableDatabase(); } @Override @@ -47,7 +48,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter { if (cache != null) { return cache; } - List groups = mDb.getLoyaltyCardGroups(cardId); + List groups = DBHelper.getLoyaltyCardGroups(mDatabase, cardId); mGetGroupCache.put(cardId, groups); return groups; } @@ -94,7 +95,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter { } else { groups.remove(mGroup); } - mDb.setLoyaltyCardGroups(cardId, groups); + DBHelper.setLoyaltyCardGroups(mDatabase, cardId, groups); } } diff --git a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java index 2573a9440..a5f281b1e 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java +++ b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java @@ -3,6 +3,7 @@ package protect.card_locker; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.text.InputType; import android.view.MenuItem; @@ -26,7 +27,7 @@ import androidx.recyclerview.widget.RecyclerView; public class ManageGroupsActivity extends CatimaAppCompatActivity implements GroupCursorAdapter.GroupAdapterListener { private static final String TAG = "Catima"; - private final DBHelper mDb = new DBHelper(this); + private SQLiteDatabase mDatabase; private TextView mHelpText; private RecyclerView mGroupList; GroupCursorAdapter mAdapter; @@ -42,6 +43,8 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } + + mDatabase = new DBHelper(this).getWritableDatabase(); } @Override @@ -72,9 +75,9 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro } private void updateGroupList() { - mAdapter.swapCursor(mDb.getGroupCursor()); + mAdapter.swapCursor(DBHelper.getGroupCursor(mDatabase)); - if (mDb.getGroupCount() == 0) { + if (DBHelper.getGroupCount(mDatabase) == 0) { mGroupList.setVisibility(View.GONE); mHelpText.setVisibility(View.VISIBLE); @@ -118,11 +121,11 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro Toast.makeText(getApplicationContext(), R.string.group_name_is_empty, Toast.LENGTH_SHORT).show(); return; } - if (mDb.getGroup(inputString) != null) { + if (DBHelper.getGroup(mDatabase, inputString) != null) { Toast.makeText(getApplicationContext(), R.string.group_name_already_in_use, Toast.LENGTH_SHORT).show(); return; } - mDb.insertGroup(inputString); + DBHelper.insertGroup(mDatabase, inputString); updateGroupList(); }); builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel()); @@ -138,10 +141,10 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro } private void moveGroup(View view, boolean up) { - List groups = mDb.getGroups(); + List groups = DBHelper.getGroups(mDatabase); final String groupName = getGroupName(view); - int currentIndex = mDb.getGroup(groupName).order; + int currentIndex = DBHelper.getGroup(mDatabase, groupName).order; int newIndex; // Reinsert group in correct position @@ -160,7 +163,7 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro groups.add(newIndex, group); // Update database - mDb.reorderGroups(groups); + DBHelper.reorderGroups(mDatabase, groups); // Update UI updateGroupList(); @@ -195,7 +198,7 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro builder.setMessage(groupName); builder.setPositiveButton(getString(R.string.ok), (dialog, which) -> { - mDb.deleteGroup(groupName); + DBHelper.deleteGroup(mDatabase, groupName); updateGroupList(); // Delete may change ordering, so invalidate invalidateHomescreenActiveTab(); diff --git a/app/src/main/java/protect/card_locker/ShortcutHelper.java b/app/src/main/java/protect/card_locker/ShortcutHelper.java index 426983cf1..e974421a9 100644 --- a/app/src/main/java/protect/card_locker/ShortcutHelper.java +++ b/app/src/main/java/protect/card_locker/ShortcutHelper.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.content.Context; import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -45,7 +46,7 @@ class ShortcutHelper { static void updateShortcuts(Context context, LoyaltyCard card) { LinkedList list = new LinkedList<>(ShortcutManagerCompat.getDynamicShortcuts(context)); - DBHelper dbHelper = new DBHelper(context); + SQLiteDatabase database = new DBHelper(context).getReadableDatabase(); String shortcutId = Integer.toString(card.id); @@ -88,7 +89,7 @@ class ShortcutHelper { for (int index = 0; index < list.size(); index++) { ShortcutInfoCompat prevShortcut = list.get(index); - LoyaltyCard loyaltyCard = dbHelper.getLoyaltyCard(Integer.parseInt(prevShortcut.getId())); + LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(database, Integer.parseInt(prevShortcut.getId())); ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard) .setRank(index) diff --git a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java index b55337ad1..afc59fdad 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java @@ -2,6 +2,7 @@ package protect.card_locker.importexport; import android.content.Context; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import net.lingala.zip4j.io.outputstream.ZipOutputStream; @@ -31,7 +32,7 @@ import protect.card_locker.Utils; * format. */ public class CatimaExporter implements Exporter { - public void exportData(Context context, DBHelper db, OutputStream output, char[] password) throws IOException, InterruptedException { + public void exportData(Context context, SQLiteDatabase database, OutputStream output, char[] password) throws IOException, InterruptedException { // Necessary vars int readLen; byte[] readBuffer = new byte[InternalZipConstants.BUFF_SIZE]; @@ -48,7 +49,7 @@ public class CatimaExporter implements Exporter { // Generate CSV ByteArrayOutputStream catimaOutputStream = new ByteArrayOutputStream(); OutputStreamWriter catimaOutputStreamWriter = new OutputStreamWriter(catimaOutputStream, StandardCharsets.UTF_8); - writeCSV(db, catimaOutputStreamWriter); + writeCSV(database, catimaOutputStreamWriter); // Add CSV to zip file ZipParameters csvZipParameters = createZipParameters("catima.csv", password); @@ -60,7 +61,7 @@ public class CatimaExporter implements Exporter { zipOutputStream.closeEntry(); // Loop over all cards again - Cursor cardCursor = db.getLoyaltyCardCursor(); + Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database); while (cardCursor.moveToNext()) { // For each card LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor); @@ -94,7 +95,7 @@ public class CatimaExporter implements Exporter { return zipParameters; } - private void writeCSV(DBHelper db, OutputStreamWriter output) throws IOException, InterruptedException { + private void writeCSV(SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException { CSVPrinter printer = new CSVPrinter(output, CSVFormat.RFC4180); // Print the version @@ -105,7 +106,7 @@ public class CatimaExporter implements Exporter { // Print the header for groups printer.printRecord(DBHelper.LoyaltyCardDbGroups.ID); - Cursor groupCursor = db.getGroupCursor(); + Cursor groupCursor = DBHelper.getGroupCursor(database); while (groupCursor.moveToNext()) { Group group = Group.toGroup(groupCursor); @@ -136,7 +137,7 @@ public class CatimaExporter implements Exporter { DBHelper.LoyaltyCardDbIds.STAR_STATUS, DBHelper.LoyaltyCardDbIds.LAST_USED); - Cursor cardCursor = db.getLoyaltyCardCursor(); + Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database); while (cardCursor.moveToNext()) { LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor); @@ -168,12 +169,12 @@ public class CatimaExporter implements Exporter { printer.printRecord(DBHelper.LoyaltyCardDbIdsGroups.cardID, DBHelper.LoyaltyCardDbIdsGroups.groupID); - Cursor cardCursor2 = db.getLoyaltyCardCursor(); + Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database); while (cardCursor2.moveToNext()) { LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor2); - for (Group group : db.getLoyaltyCardGroups(card.id)) { + for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) { printer.printRecord(card.id, group._id); } diff --git a/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java b/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java index 6b4fc05a5..9fd7192ee 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java @@ -40,7 +40,7 @@ import protect.card_locker.ZipUtils; * A header is expected for the each table showing the names of the columns. */ public class CatimaImporter implements Importer { - public void importData(Context context, DBHelper db, InputStream input, char[] password) throws IOException, FormatException, InterruptedException { + public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, InterruptedException { InputStream bufferedInputStream = new BufferedInputStream(input); bufferedInputStream.mark(100); @@ -55,7 +55,7 @@ public class CatimaImporter implements Importer { String fileName = Uri.parse(localFileHeader.getFileName()).getLastPathSegment(); if (fileName.equals("catima.csv")) { - importCSV(context, db, new ByteArrayInputStream(ZipUtils.read(zipInputStream).getBytes(StandardCharsets.UTF_8))); + importCSV(context, database, new ByteArrayInputStream(ZipUtils.read(zipInputStream).getBytes(StandardCharsets.UTF_8))); } else if (fileName.endsWith(".png")) { Utils.saveCardImage(context, ZipUtils.readImage(zipInputStream), fileName); } else { @@ -66,11 +66,11 @@ public class CatimaImporter implements Importer { if (!isZipFile) { // This is not a zip file, try importing as bare CSV bufferedInputStream.reset(); - importCSV(context, db, bufferedInputStream); + importCSV(context, database, bufferedInputStream); } } - public void importCSV(Context context, DBHelper db, InputStream input) throws IOException, FormatException, InterruptedException { + public void importCSV(Context context, SQLiteDatabase database, InputStream input) throws IOException, FormatException, InterruptedException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)); bufferedReader.mark(100); @@ -87,10 +87,10 @@ public class CatimaImporter implements Importer { switch (version) { case 1: - parseV1(context, db, bufferedReader); + parseV1(context, database, bufferedReader); break; case 2: - parseV2(context, db, bufferedReader); + parseV2(context, database, bufferedReader); break; default: throw new FormatException(String.format("No code to parse version %s", version)); @@ -99,15 +99,12 @@ public class CatimaImporter implements Importer { bufferedReader.close(); } - public void parseV1(Context context, DBHelper db, BufferedReader input) throws IOException, FormatException, InterruptedException { + public void parseV1(Context context, SQLiteDatabase database, BufferedReader input) throws IOException, FormatException, InterruptedException { final CSVParser parser = new CSVParser(input, CSVFormat.RFC4180.builder().setHeader().build()); - SQLiteDatabase database = db.getWritableDatabase(); - database.beginTransaction(); - try { for (CSVRecord record : parser) { - importLoyaltyCard(context, database, db, record); + importLoyaltyCard(context, database, record); if (Thread.currentThread().isInterrupted()) { throw new InterruptedException(); @@ -115,19 +112,12 @@ public class CatimaImporter implements Importer { } parser.close(); - database.setTransactionSuccessful(); } catch (IllegalArgumentException | IllegalStateException e) { throw new FormatException("Issue parsing CSV data", e); - } finally { - database.endTransaction(); - database.close(); } } - public void parseV2(Context context, DBHelper db, BufferedReader input) throws IOException, FormatException, InterruptedException { - SQLiteDatabase database = db.getWritableDatabase(); - database.beginTransaction(); - + public void parseV2(Context context, SQLiteDatabase database, BufferedReader input) throws IOException, FormatException, InterruptedException { Integer part = 0; String stringPart = ""; @@ -145,7 +135,7 @@ public class CatimaImporter implements Importer { break; case 1: try { - parseV2Groups(db, database, stringPart); + parseV2Groups(database, stringPart); sectionParsed = true; } catch (FormatException e) { // We may have a multiline field, try again @@ -153,7 +143,7 @@ public class CatimaImporter implements Importer { break; case 2: try { - parseV2Cards(context, db, database, stringPart); + parseV2Cards(context, database, stringPart); sectionParsed = true; } catch (FormatException e) { // We may have a multiline field, try again @@ -161,7 +151,7 @@ public class CatimaImporter implements Importer { break; case 3: try { - parseV2CardGroups(db, database, stringPart); + parseV2CardGroups(database, stringPart); sectionParsed = true; } catch (FormatException e) { // We may have a multiline field, try again @@ -185,16 +175,12 @@ public class CatimaImporter implements Importer { stringPart += tmp + "\n"; } } - database.setTransactionSuccessful(); } catch (FormatException e) { throw new FormatException("Issue parsing CSV data", e); - } finally { - database.endTransaction(); - database.close(); } } - public void parseV2Groups(DBHelper db, SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { + public void parseV2Groups(SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { // Parse groups final CSVParser groupParser = new CSVParser(new StringReader(data), CSVFormat.RFC4180.builder().setHeader().build()); @@ -215,11 +201,11 @@ public class CatimaImporter implements Importer { } for (CSVRecord record : records) { - importGroup(database, db, record); + importGroup(database, record); } } - public void parseV2Cards(Context context, DBHelper db, SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { + public void parseV2Cards(Context context, SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { // Parse cards final CSVParser cardParser = new CSVParser(new StringReader(data), CSVFormat.RFC4180.builder().setHeader().build()); @@ -240,11 +226,11 @@ public class CatimaImporter implements Importer { } for (CSVRecord record : records) { - importLoyaltyCard(context, database, db, record); + importLoyaltyCard(context, database, record); } } - public void parseV2CardGroups(DBHelper db, SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { + public void parseV2CardGroups(SQLiteDatabase database, String data) throws IOException, FormatException, InterruptedException { // Parse card group mappings final CSVParser cardGroupParser = new CSVParser(new StringReader(data), CSVFormat.RFC4180.builder().setHeader().build()); @@ -265,7 +251,7 @@ public class CatimaImporter implements Importer { } for (CSVRecord record : records) { - importCardGroupMapping(database, db, record); + importCardGroupMapping(database, record); } } @@ -273,7 +259,7 @@ public class CatimaImporter implements Importer { * Import a single loyalty card into the database using the given * session. */ - private void importLoyaltyCard(Context context, SQLiteDatabase database, DBHelper helper, CSVRecord record) + private void importLoyaltyCard(Context context, SQLiteDatabase database, CSVRecord record) throws IOException, FormatException { int id = CSVHelpers.extractInt(DBHelper.LoyaltyCardDbIds.ID, record, false); @@ -343,31 +329,29 @@ public class CatimaImporter implements Importer { // We catch this exception so we can still import old backups } - helper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed); + DBHelper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed); } /** * Import a single group into the database using the given * session. */ - private void importGroup(SQLiteDatabase database, DBHelper helper, CSVRecord record) - throws IOException, FormatException { + private void importGroup(SQLiteDatabase database, CSVRecord record) throws FormatException { String id = CSVHelpers.extractString(DBHelper.LoyaltyCardDbGroups.ID, record, null); - helper.insertGroup(database, id); + DBHelper.insertGroup(database, id); } /** * Import a single card to group mapping into the database using the given * session. */ - private void importCardGroupMapping(SQLiteDatabase database, DBHelper helper, CSVRecord record) - throws IOException, FormatException { + private void importCardGroupMapping(SQLiteDatabase database, CSVRecord record) throws FormatException { Integer cardId = CSVHelpers.extractInt(DBHelper.LoyaltyCardDbIdsGroups.cardID, record, false); String groupId = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIdsGroups.groupID, record, null); - List cardGroups = helper.getLoyaltyCardGroups(cardId); - cardGroups.add(helper.getGroup(groupId)); - helper.setLoyaltyCardGroups(database, cardId, cardGroups); + List cardGroups = DBHelper.getLoyaltyCardGroups(database, cardId); + cardGroups.add(DBHelper.getGroup(database, groupId)); + DBHelper.setLoyaltyCardGroups(database, cardId, cardGroups); } } \ No newline at end of file diff --git a/app/src/main/java/protect/card_locker/importexport/Exporter.java b/app/src/main/java/protect/card_locker/importexport/Exporter.java index 584572360..5c2d54962 100644 --- a/app/src/main/java/protect/card_locker/importexport/Exporter.java +++ b/app/src/main/java/protect/card_locker/importexport/Exporter.java @@ -1,6 +1,7 @@ package protect.card_locker.importexport; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import java.io.IOException; import java.io.OutputStream; @@ -17,5 +18,5 @@ public interface Exporter { * * @throws IOException */ - void exportData(Context context, DBHelper db, OutputStream output, char[] password) throws IOException, InterruptedException; + void exportData(Context context, SQLiteDatabase database, OutputStream output, char[] password) throws IOException, InterruptedException; } diff --git a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java index 23c927b8b..e70ba0c88 100644 --- a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java @@ -30,7 +30,7 @@ import protect.card_locker.FormatException; * A header is expected for the each table showing the names of the columns. */ public class FidmeImporter implements Importer { - public void importData(Context context, DBHelper db, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { + public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { // We actually retrieve a .zip file ZipInputStream zipInputStream = new ZipInputStream(input, password); @@ -52,14 +52,11 @@ public class FidmeImporter implements Importer { throw new FormatException("Couldn't find loyalty_programs.csv in zip file or it is empty"); } - SQLiteDatabase database = db.getWritableDatabase(); - database.beginTransaction(); - final CSVParser fidmeParser = new CSVParser(new StringReader(loyaltyCards.toString()), CSVFormat.RFC4180.builder().setDelimiter(';').setHeader().build()); try { for (CSVRecord record : fidmeParser) { - importLoyaltyCard(database, db, record); + importLoyaltyCard(database, record); if (Thread.currentThread().isInterrupted()) { throw new InterruptedException(); @@ -71,10 +68,6 @@ public class FidmeImporter implements Importer { fidmeParser.close(); } - database.setTransactionSuccessful(); - database.endTransaction(); - database.close(); - zipInputStream.close(); } @@ -82,8 +75,8 @@ public class FidmeImporter implements Importer { * Import a single loyalty card into the database using the given * session. */ - private void importLoyaltyCard(SQLiteDatabase database, DBHelper helper, CSVRecord record) - throws IOException, FormatException { + private void importLoyaltyCard(SQLiteDatabase database, CSVRecord record) + throws FormatException { // A loyalty card export from Fidme contains the following fields: // Retailer (store name) // Program (program name) @@ -129,6 +122,6 @@ public class FidmeImporter implements Importer { // TODO: Front and back image - helper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null); + DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null); } } \ No newline at end of file diff --git a/app/src/main/java/protect/card_locker/importexport/Importer.java b/app/src/main/java/protect/card_locker/importexport/Importer.java index a394e455b..41f73df26 100644 --- a/app/src/main/java/protect/card_locker/importexport/Importer.java +++ b/app/src/main/java/protect/card_locker/importexport/Importer.java @@ -1,6 +1,7 @@ package protect.card_locker.importexport; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import org.json.JSONException; @@ -8,7 +9,6 @@ import java.io.IOException; import java.io.InputStream; import java.text.ParseException; -import protect.card_locker.DBHelper; import protect.card_locker.FormatException; /** @@ -23,5 +23,5 @@ public interface Importer { * @throws IOException * @throws FormatException */ - void importData(Context context, DBHelper db, InputStream input, char[] password) throws IOException, FormatException, InterruptedException, JSONException, ParseException; + void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, InterruptedException, JSONException, ParseException; } diff --git a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java index c4a3e2dd2..e8548a21b 100644 --- a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java @@ -1,6 +1,7 @@ package protect.card_locker.importexport; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import android.util.Log; import java.io.IOException; @@ -21,7 +22,7 @@ public class MultiFormatExporter { * another ImportExportResult otherwise. If not Success, partial data may have been * written to the output stream, and it should be discarded. */ - public static ImportExportResult exportData(Context context, DBHelper db, OutputStream output, DataFormat format, char[] password) { + public static ImportExportResult exportData(Context context, SQLiteDatabase database, OutputStream output, DataFormat format, char[] password) { Exporter exporter = null; switch (format) { @@ -35,7 +36,7 @@ public class MultiFormatExporter { if (exporter != null) { try { - exporter.exportData(context, db, output, password); + exporter.exportData(context, database, output, password); return ImportExportResult.Success; } catch (IOException e) { Log.e(TAG, "Failed to export data", e); diff --git a/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java b/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java index 21a520f41..9b009381b 100644 --- a/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java @@ -1,6 +1,7 @@ package protect.card_locker.importexport; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import android.util.Log; import net.lingala.zip4j.exception.ZipException; @@ -28,7 +29,7 @@ public class MultiFormatImporter { * or another result otherwise. If no Success, no data was written to * the database. */ - public static ImportExportResult importData(Context context, DBHelper db, InputStream input, DataFormat format, char[] password) { + public static ImportExportResult importData(Context context, SQLiteDatabase database, InputStream input, DataFormat format, char[] password) { Importer importer = null; switch (format) { @@ -47,15 +48,18 @@ public class MultiFormatImporter { } if (importer != null) { + database.beginTransaction(); try { - importer.importData(context, db, input, password); + importer.importData(context, database, input, password); + database.setTransactionSuccessful(); return ImportExportResult.Success; } catch (ZipException e) { return ImportExportResult.BadPassword; } catch (IOException | FormatException | InterruptedException | JSONException | ParseException | NullPointerException e) { Log.e(TAG, "Failed to import data", e); + } finally { + database.endTransaction(); } - } else { Log.e(TAG, "Unsupported data format imported: " + format.name()); } diff --git a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java index 2f8280285..d51091986 100644 --- a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java @@ -39,7 +39,7 @@ import protect.card_locker.ZipUtils; * A header is expected for the each table showing the names of the columns. */ public class StocardImporter implements Importer { - public void importData(Context context, DBHelper db, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { + public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { HashMap> loyaltyCardHashMap = new HashMap<>(); HashMap> providers = new HashMap<>(); @@ -153,9 +153,6 @@ public class StocardImporter implements Importer { throw new FormatException("Couldn't find any loyalty cards in this Stocard export."); } - SQLiteDatabase database = db.getWritableDatabase(); - database.beginTransaction(); - for (HashMap loyaltyCardData : loyaltyCardHashMap.values()) { String providerId = (String) loyaltyCardData.get("_providerId"); HashMap providerData = providers.get(providerId); @@ -173,7 +170,7 @@ public class StocardImporter implements Importer { } } - long loyaltyCardInternalId = db.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null); + long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null); if (loyaltyCardData.containsKey("frontImage")) { Utils.saveCardImage(context, (Bitmap) loyaltyCardData.get("frontImage"), (int) loyaltyCardInternalId, ImageLocationType.front); @@ -183,10 +180,6 @@ public class StocardImporter implements Importer { } } - database.setTransactionSuccessful(); - database.endTransaction(); - database.close(); - zipInputStream.close(); } diff --git a/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java b/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java index 0aa038e1b..e4e298692 100644 --- a/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java @@ -36,7 +36,7 @@ import protect.card_locker.Utils; * A header is expected for the each table showing the names of the columns. */ public class VoucherVaultImporter implements Importer { - public void importData(Context context, DBHelper db, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { + public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); @@ -46,9 +46,6 @@ public class VoucherVaultImporter implements Importer { } JSONArray jsonArray = new JSONArray(sb.toString()); - SQLiteDatabase database = db.getWritableDatabase(); - database.beginTransaction(); - // See https://github.com/tim-smart/vouchervault/issues/4#issuecomment-788226503 for more info for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonCard = jsonArray.getJSONObject(i); @@ -129,13 +126,9 @@ public class VoucherVaultImporter implements Importer { throw new FormatException("Unknown colour type found: " + colorFromJSON); } - db.insertLoyaltyCard(store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime()); + DBHelper.insertLoyaltyCard(database, store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime()); } - database.setTransactionSuccessful(); - database.endTransaction(); - database.close(); - bufferedReader.close(); } } \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index cb5271f55..eacbcd8cf 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -29,7 +29,7 @@ import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class DatabaseTest { - private DBHelper mDb; + private SQLiteDatabase mDatabase; private Activity mActivity; private static final Integer DEFAULT_HEADER_COLOR = Color.BLACK; @@ -37,18 +37,18 @@ public class DatabaseTest { @Before public void setUp() { mActivity = Robolectric.setupActivity(MainActivity.class); - mDb = TestHelpers.getEmptyDb(mActivity); + mDatabase = TestHelpers.getEmptyDb(mActivity).getWritableDatabase(); } @Test public void addRemoveOneGiftCard() { - assertEquals(0, mDb.getLoyaltyCardCount()); - long id = mDb.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard loyaltyCard = mDb.getLoyaltyCard(1); + LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1); assertNotNull(loyaltyCard); assertEquals("store", loyaltyCard.store); assertEquals("note", loyaltyCard.note); @@ -61,24 +61,24 @@ public class DatabaseTest { assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor); assertEquals(0, loyaltyCard.starStatus); - result = mDb.deleteLoyaltyCard(mActivity, 1); + result = DBHelper.deleteLoyaltyCard(mDatabase, mActivity, 1); assertTrue(result); - assertEquals(0, mDb.getLoyaltyCardCount()); - assertNull(mDb.getLoyaltyCard(1)); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); + assertNull(DBHelper.getLoyaltyCard(mDatabase, 1)); } @Test public void updateGiftCard() { - long id = mDb.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - result = mDb.updateLoyaltyCard(1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR); + result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard loyaltyCard = mDb.getLoyaltyCard(1); + LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1); assertNotNull(loyaltyCard); assertEquals("store1", loyaltyCard.store); assertEquals("note1", loyaltyCard.note); @@ -94,16 +94,16 @@ public class DatabaseTest { @Test public void updateGiftCardOnlyStar() { - long id = mDb.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - result = mDb.updateLoyaltyCardStarStatus(1, 1); + result = DBHelper.updateLoyaltyCardStarStatus(mDatabase, 1, 1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard loyaltyCard = mDb.getLoyaltyCard(1); + LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1); assertNotNull(loyaltyCard); assertEquals("store", loyaltyCard.store); assertEquals("note", loyaltyCard.note); @@ -119,22 +119,22 @@ public class DatabaseTest { @Test public void updateMissingGiftCard() { - assertEquals(0, mDb.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); - boolean result = mDb.updateLoyaltyCard(1, "store1", "note1", null, new BigDecimal("0"), null, "cardId1", + boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("0"), null, "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR); assertEquals(false, result); - assertEquals(0, mDb.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); } @Test public void emptyGiftCardValues() { - long id = mDb.insertLoyaltyCard("", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard loyaltyCard = mDb.getLoyaltyCard(1); + LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1); assertNotNull(loyaltyCard); assertEquals("", loyaltyCard.store); assertEquals("", loyaltyCard.note); @@ -155,15 +155,15 @@ public class DatabaseTest { // Add the gift cards in reverse order, to ensure // that they are sorted for (int index = CARDS_TO_ADD - 1; index >= 0; index--) { - long id = mDb.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, + long id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null); boolean result = (id != -1); assertTrue(result); } - assertEquals(CARDS_TO_ADD, mDb.getLoyaltyCardCount()); + assertEquals(CARDS_TO_ADD, DBHelper.getLoyaltyCardCount(mDatabase)); - Cursor cursor = mDb.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); assertNotNull(cursor); assertEquals(CARDS_TO_ADD, cursor.getCount()); @@ -199,19 +199,19 @@ public class DatabaseTest { // that they are sorted for (int index = CARDS_TO_ADD - 1; index >= 0; index--) { if (index == CARDS_TO_ADD - 1) { - id = mDb.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, + id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1, null); } else { - id = mDb.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, + id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null); } boolean result = (id != -1); assertTrue(result); } - assertEquals(CARDS_TO_ADD, mDb.getLoyaltyCardCount()); + assertEquals(CARDS_TO_ADD, DBHelper.getLoyaltyCardCount(mDatabase)); - Cursor cursor = mDb.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); assertNotNull(cursor); assertEquals(CARDS_TO_ADD, cursor.getCount()); @@ -280,130 +280,130 @@ public class DatabaseTest { @Test public void addRemoveOneGroup() { - assertEquals(0, mDb.getGroupCount()); - long id = mDb.insertGroup("group one"); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); + long id = DBHelper.insertGroup(mDatabase, "group one"); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); - Group group = mDb.getGroup("group one"); + Group group = DBHelper.getGroup(mDatabase, "group one"); assertNotNull(group); assertEquals("group one", group._id); - result = mDb.deleteGroup("group one"); + result = DBHelper.deleteGroup(mDatabase, "group one"); assertTrue(result); - assertEquals(0, mDb.getGroupCount()); - assertNull(mDb.getGroup("group one")); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); + assertNull(DBHelper.getGroup(mDatabase, "group one")); } @Test public void updateGroup() { // Create card - assertEquals(0, mDb.getLoyaltyCardCount()); - long id = mDb.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); // Create group - long groupId = mDb.insertGroup("group one"); + long groupId = DBHelper.insertGroup(mDatabase, "group one"); result = (groupId != -1); assertTrue(result); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); // Add card to group - Group group = mDb.getGroup("group one"); + Group group = DBHelper.getGroup(mDatabase, "group one"); List groupList1 = new ArrayList<>(); groupList1.add(group); - mDb.setLoyaltyCardGroups(1, groupList1); + DBHelper.setLoyaltyCardGroups(mDatabase, 1, groupList1); // Ensure the card has one group and the group has one card - List cardGroups = mDb.getLoyaltyCardGroups((int) id); + List cardGroups = DBHelper.getLoyaltyCardGroups(mDatabase, (int) id); assertEquals(1, cardGroups.size()); assertEquals("group one", cardGroups.get(0)._id); - assertEquals(1, mDb.getGroupCardCount("group one")); + assertEquals(1, DBHelper.getGroupCardCount(mDatabase, "group one")); // Rename group - result = mDb.updateGroup("group one", "group one renamed"); + result = DBHelper.updateGroup(mDatabase, "group one", "group one renamed"); assertTrue(result); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); // Group one no longer exists - group = mDb.getGroup("group one"); + group = DBHelper.getGroup(mDatabase,"group one"); assertNull(group); // But group one renamed does - Group group2 = mDb.getGroup("group one renamed"); + Group group2 = DBHelper.getGroup(mDatabase, "group one renamed"); assertNotNull(group2); assertEquals("group one renamed", group2._id); // And card is in "group one renamed" // Ensure the card has one group and the group has one card - cardGroups = mDb.getLoyaltyCardGroups((int) id); + cardGroups = DBHelper.getLoyaltyCardGroups(mDatabase, (int) id); assertEquals(1, cardGroups.size()); assertEquals("group one renamed", cardGroups.get(0)._id); - assertEquals(1, mDb.getGroupCardCount("group one renamed")); + assertEquals(1, DBHelper.getGroupCardCount(mDatabase, "group one renamed")); } @Test public void updateMissingGroup() { - assertEquals(0, mDb.getGroupCount()); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); - boolean result = mDb.updateGroup("group one", "new name"); + boolean result = DBHelper.updateGroup(mDatabase, "group one", "new name"); assertEquals(false, result); - assertEquals(0, mDb.getGroupCount()); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); } @Test public void emptyGroupValues() { - long id = mDb.insertGroup(""); + long id = DBHelper.insertGroup(mDatabase, ""); boolean result = (id != -1); assertFalse(result); - assertEquals(0, mDb.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); } @Test public void duplicateGroupName() { - assertEquals(0, mDb.getGroupCount()); - long id = mDb.insertGroup("group one"); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); + long id = DBHelper.insertGroup(mDatabase, "group one"); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); - Group group = mDb.getGroup("group one"); + Group group = DBHelper.getGroup(mDatabase, "group one"); assertNotNull(group); assertEquals("group one", group._id); // Should fail on duplicate - long id2 = mDb.insertGroup("group one"); + long id2 = DBHelper.insertGroup(mDatabase, "group one"); boolean result2 = (id2 != -1); assertFalse(result2); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); } @Test public void updateGroupDuplicate() { - long id = mDb.insertGroup("group one"); + long id = DBHelper.insertGroup(mDatabase, "group one"); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getGroupCount()); + assertEquals(1, DBHelper.getGroupCount(mDatabase)); - long id2 = mDb.insertGroup("group two"); + long id2 = DBHelper.insertGroup(mDatabase, "group two"); boolean result2 = (id2 != -1); assertTrue(result2); - assertEquals(2, mDb.getGroupCount()); + assertEquals(2, DBHelper.getGroupCount(mDatabase)); // Should fail when trying to rename group two to one - boolean result3 = mDb.updateGroup("group two", "group one"); + boolean result3 = DBHelper.updateGroup(mDatabase, "group two", "group one"); assertFalse(result3); - assertEquals(2, mDb.getGroupCount()); + assertEquals(2, DBHelper.getGroupCount(mDatabase)); // Rename failed so both should still be the same - Group group = mDb.getGroup("group one"); + Group group = DBHelper.getGroup(mDatabase, "group one"); assertNotNull(group); assertEquals("group one", group._id); - Group group2 = mDb.getGroup("group two"); + Group group2 = DBHelper.getGroup(mDatabase, "group two"); assertNotNull(group2); assertEquals("group two", group2._id); } @@ -411,52 +411,53 @@ public class DatabaseTest { @Test public void cardAddAndRemoveGroups() { // Create card - assertEquals(0, mDb.getLoyaltyCardCount()); - long id = mDb.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null); boolean result = (id != -1); assertTrue(result); - assertEquals(1, mDb.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); // Create two groups to only one card - assertEquals(0, mDb.getGroupCount()); - long gid = mDb.insertGroup("one"); + assertEquals(0, DBHelper.getGroupCount(mDatabase)); + long gid = DBHelper.insertGroup(mDatabase, "one"); boolean gresult = (gid != -1); assertTrue(gresult); - long gid2 = mDb.insertGroup("two"); + long gid2 = DBHelper.insertGroup(mDatabase, "two"); boolean gresult2 = (gid2 != -1); assertTrue(gresult2); - assertEquals(2, mDb.getGroupCount()); + assertEquals(2, DBHelper.getGroupCount(mDatabase)); - Group group1 = mDb.getGroup("one"); + Group group1 = DBHelper.getGroup(mDatabase, "one"); // Card has no groups by default - List cardGroups = mDb.getLoyaltyCardGroups(1); + List cardGroups = DBHelper.getLoyaltyCardGroups(mDatabase, 1); assertEquals(0, cardGroups.size()); // Add one groups to card List groupList1 = new ArrayList<>(); groupList1.add(group1); - mDb.setLoyaltyCardGroups(1, groupList1); + DBHelper.setLoyaltyCardGroups(mDatabase, 1, groupList1); - List cardGroups1 = mDb.getLoyaltyCardGroups(1); + List cardGroups1 = DBHelper.getLoyaltyCardGroups(mDatabase, 1); assertEquals(1, cardGroups1.size()); assertEquals(cardGroups1.get(0)._id, group1._id); - assertEquals(1, mDb.getGroupCardCount("one")); - assertEquals(0, mDb.getGroupCardCount("two")); + assertEquals(1, DBHelper.getGroupCardCount(mDatabase, "one")); + assertEquals(0, DBHelper.getGroupCardCount(mDatabase, "two")); // Remove groups - mDb.setLoyaltyCardGroups(1, new ArrayList()); - List cardGroups2 = mDb.getLoyaltyCardGroups(1); + DBHelper.setLoyaltyCardGroups(mDatabase, 1, new ArrayList()); + List cardGroups2 = DBHelper.getLoyaltyCardGroups(mDatabase, 1); assertEquals(0, cardGroups2.size()); - assertEquals(0, mDb.getGroupCardCount("one")); - assertEquals(0, mDb.getGroupCardCount("two")); + assertEquals(0, DBHelper.getGroupCardCount(mDatabase, "one")); + assertEquals(0, DBHelper.getGroupCardCount(mDatabase, "two")); } @Test public void databaseUpgradeFromVersion1() { - SQLiteDatabase database = mDb.getWritableDatabase(); + DBHelper dbHelper = TestHelpers.getEmptyDb(mActivity); + SQLiteDatabase database = dbHelper.getWritableDatabase(); // Setup the database as it appeared in revision 1 setupDatabaseVersion1(database); @@ -466,10 +467,10 @@ public class DatabaseTest { int newCardId2 = insertCardVersion1(database, "store", "cardId", ""); // Upgrade database - mDb.onUpgrade(database, DBHelper.ORIGINAL_DATABASE_VERSION, DBHelper.DATABASE_VERSION); + dbHelper.onUpgrade(database, DBHelper.ORIGINAL_DATABASE_VERSION, DBHelper.DATABASE_VERSION); // Determine that the entries are queryable and the fields are correct - LoyaltyCard card = mDb.getLoyaltyCard(newCardId); + LoyaltyCard card = DBHelper.getLoyaltyCard(database, newCardId); assertEquals("store", card.store); assertEquals("", card.note); assertEquals(null, card.expiry); @@ -484,7 +485,7 @@ public class DatabaseTest { assertEquals(100, card.zoomLevel); // Determine that the entries are queryable and the fields are correct - LoyaltyCard card2 = mDb.getLoyaltyCard(newCardId2); + LoyaltyCard card2 = DBHelper.getLoyaltyCard(database, newCardId2); assertEquals("store", card2.store); assertEquals("", card2.note); assertEquals(null, card2.expiry); @@ -497,7 +498,5 @@ public class DatabaseTest { assertEquals(0, card2.starStatus); assertEquals(0, card2.lastUsed); assertEquals(100, card2.zoomLevel); - - database.close(); } } diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 7644dd9a1..00164213d 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.app.Activity; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; @@ -61,7 +62,7 @@ import static org.robolectric.Shadows.shadowOf; @Config(sdk = 23) public class ImportExportTest { private Activity activity; - private DBHelper db; + private SQLiteDatabase mDatabase; private long nowMs; private long lastYearMs; private final int MONTHS_PER_YEAR = 12; @@ -74,7 +75,7 @@ public class ImportExportTest { ShadowLog.stream = System.out; activity = Robolectric.setupActivity(MainActivity.class); - db = TestHelpers.getEmptyDb(activity); + mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase(); nowMs = System.currentTimeMillis(); Calendar lastYear = Calendar.getInstance(); @@ -93,12 +94,12 @@ public class ImportExportTest { for (int index = cardsToAdd; index > 0; index--) { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null); boolean result = (id != -1); assertTrue(result); } - assertEquals(cardsToAdd, db.getLoyaltyCardCount()); + assertEquals(cardsToAdd, DBHelper.getLoyaltyCardCount(mDatabase)); } private void addLoyaltyCardsFiveStarred() { @@ -107,7 +108,7 @@ public class ImportExportTest { for (int index = cardsToAdd; index > 4; index--) { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null); boolean result = (id != -1); assertTrue(result); } @@ -115,20 +116,20 @@ public class ImportExportTest { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); //if index is even - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null); boolean result = (id != -1); assertTrue(result); } - assertEquals(cardsToAdd, db.getLoyaltyCardCount()); + assertEquals(cardsToAdd, DBHelper.getLoyaltyCardCount(mDatabase)); } @Test public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { - long id = db.insertLoyaltyCard("No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); + long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); boolean result = (id != -1); assertTrue(result); - LoyaltyCard card = db.getLoyaltyCard((int) id); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, (int) id); assertEquals("No Expiry", card.store); assertEquals("", card.note); assertEquals(null, card.expiry); @@ -140,11 +141,11 @@ public class ImportExportTest { assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = db.insertLoyaltyCard("Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); + id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); result = (id != -1); assertTrue(result); - card = db.getLoyaltyCard((int) id); + card = DBHelper.getLoyaltyCard(mDatabase, (int) id); assertEquals("Past", card.store); assertEquals("", card.note); assertTrue(card.expiry.before(new Date())); @@ -156,11 +157,11 @@ public class ImportExportTest { assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = db.insertLoyaltyCard("Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); + id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); result = (id != -1); assertTrue(result); - card = db.getLoyaltyCard((int) id); + card = DBHelper.getLoyaltyCard(mDatabase, (int) id); assertEquals("Today", card.store); assertEquals("", card.note); assertTrue(card.expiry.before(new Date(new Date().getTime() + 86400))); @@ -175,11 +176,11 @@ public class ImportExportTest { // This will break after 19 January 2038 // If someone is still maintaining this code base by then: I love you - id = db.insertLoyaltyCard("Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); + id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null); result = (id != -1); assertTrue(result); - card = db.getLoyaltyCard((int) id); + card = DBHelper.getLoyaltyCard(mDatabase, (int) id); assertEquals("Future", card.store); assertEquals("", card.note); assertTrue(card.expiry.after(new Date(new Date().getTime() + 86400))); @@ -191,19 +192,19 @@ public class ImportExportTest { assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - assertEquals(4, db.getLoyaltyCardCount()); + assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase)); } private void addGroups(int groupsToAdd) { // Add in reverse order to test sorting for (int index = groupsToAdd; index > 0; index--) { String groupName = String.format("group, \"%4d", index); - long id = db.insertGroup(groupName); + long id = DBHelper.insertGroup(mDatabase, groupName); boolean result = (id != -1); assertTrue(result); } - assertEquals(groupsToAdd, db.getGroupCount()); + assertEquals(groupsToAdd, DBHelper.getGroupCount(mDatabase)); } /** @@ -212,7 +213,7 @@ public class ImportExportTest { * where the smallest card's index is 1 */ private void checkLoyaltyCards() { - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); int index = 1; while (cursor.moveToNext()) { @@ -243,7 +244,7 @@ public class ImportExportTest { * with starred ones first */ private void checkLoyaltyCardsFiveStarred() { - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); int index = 5; while (index < 10) { @@ -297,8 +298,8 @@ public class ImportExportTest { * where the smallest group's index is 1 */ private void checkGroups() { - Cursor cursor = db.getGroupCursor(); - int index = db.getGroupCount(); + Cursor cursor = DBHelper.getGroupCursor(mDatabase); + int index = DBHelper.getGroupCount(mDatabase); while (cursor.moveToNext()) { Group group = Group.toGroup(cursor); @@ -322,7 +323,7 @@ public class ImportExportTest { OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, null); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -331,10 +332,10 @@ public class ImportExportTest { ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); // Import the CSV data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); checkLoyaltyCards(); @@ -352,7 +353,7 @@ public class ImportExportTest { OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, password); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, password); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -361,10 +362,10 @@ public class ImportExportTest { ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); // Import the CSV data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, password); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, DataFormat.Catima, password); assertEquals(ImportExportResult.Success, result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); checkLoyaltyCards(); @@ -384,7 +385,7 @@ public class ImportExportTest { OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, null); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -393,10 +394,10 @@ public class ImportExportTest { ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); // Import the CSV data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); checkLoyaltyCardsFiveStarred(); @@ -425,37 +426,37 @@ public class ImportExportTest { List emptyGroup = new ArrayList<>(); List groupsForOne = new ArrayList<>(); - groupsForOne.add(db.getGroup("group, \" 1")); + groupsForOne.add(DBHelper.getGroup(mDatabase, "group, \" 1")); List groupsForTwo = new ArrayList<>(); - groupsForTwo.add(db.getGroup("group, \" 1")); - groupsForTwo.add(db.getGroup("group, \" 2")); + groupsForTwo.add(DBHelper.getGroup(mDatabase, "group, \" 1")); + groupsForTwo.add(DBHelper.getGroup(mDatabase, "group, \" 2")); List groupsForThree = new ArrayList<>(); - groupsForThree.add(db.getGroup("group, \" 1")); - groupsForThree.add(db.getGroup("group, \" 2")); - groupsForThree.add(db.getGroup("group, \" 3")); + groupsForThree.add(DBHelper.getGroup(mDatabase, "group, \" 1")); + groupsForThree.add(DBHelper.getGroup(mDatabase, "group, \" 2")); + groupsForThree.add(DBHelper.getGroup(mDatabase, "group, \" 3")); List groupsForFour = new ArrayList<>(); - groupsForFour.add(db.getGroup("group, \" 1")); - groupsForFour.add(db.getGroup("group, \" 2")); - groupsForFour.add(db.getGroup("group, \" 3")); + groupsForFour.add(DBHelper.getGroup(mDatabase, "group, \" 1")); + groupsForFour.add(DBHelper.getGroup(mDatabase, "group, \" 2")); + groupsForFour.add(DBHelper.getGroup(mDatabase, "group, \" 3")); List groupsForFive = new ArrayList<>(); - groupsForFive.add(db.getGroup("group, \" 1")); - groupsForFive.add(db.getGroup("group, \" 3")); + groupsForFive.add(DBHelper.getGroup(mDatabase,"group, \" 1")); + groupsForFive.add(DBHelper.getGroup(mDatabase, "group, \" 3")); - db.setLoyaltyCardGroups(1, groupsForOne); - db.setLoyaltyCardGroups(2, groupsForTwo); - db.setLoyaltyCardGroups(3, groupsForThree); - db.setLoyaltyCardGroups(4, groupsForFour); - db.setLoyaltyCardGroups(5, groupsForFive); + DBHelper.setLoyaltyCardGroups(mDatabase, 1, groupsForOne); + DBHelper.setLoyaltyCardGroups(mDatabase, 2, groupsForTwo); + DBHelper.setLoyaltyCardGroups(mDatabase, 3, groupsForThree); + DBHelper.setLoyaltyCardGroups(mDatabase, 4, groupsForFour); + DBHelper.setLoyaltyCardGroups(mDatabase, 5, groupsForFive); ByteArrayOutputStream outData = new ByteArrayOutputStream(); OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, null); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -464,25 +465,25 @@ public class ImportExportTest { ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); // Import the CSV data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); - assertEquals(NUM_GROUPS, db.getGroupCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); + assertEquals(NUM_GROUPS, DBHelper.getGroupCount(mDatabase)); checkLoyaltyCards(); checkGroups(); - assertEquals(groupsToGroupNames(groupsForOne), groupsToGroupNames(db.getLoyaltyCardGroups(1))); - assertEquals(groupsToGroupNames(groupsForTwo), groupsToGroupNames(db.getLoyaltyCardGroups(2))); - assertEquals(groupsToGroupNames(groupsForThree), groupsToGroupNames(db.getLoyaltyCardGroups(3))); - assertEquals(groupsToGroupNames(groupsForFour), groupsToGroupNames(db.getLoyaltyCardGroups(4))); - assertEquals(groupsToGroupNames(groupsForFive), groupsToGroupNames(db.getLoyaltyCardGroups(5))); - assertEquals(emptyGroup, db.getLoyaltyCardGroups(6)); - assertEquals(emptyGroup, db.getLoyaltyCardGroups(7)); - assertEquals(emptyGroup, db.getLoyaltyCardGroups(8)); - assertEquals(emptyGroup, db.getLoyaltyCardGroups(9)); - assertEquals(emptyGroup, db.getLoyaltyCardGroups(10)); + assertEquals(groupsToGroupNames(groupsForOne), groupsToGroupNames(DBHelper.getLoyaltyCardGroups(mDatabase, 1))); + assertEquals(groupsToGroupNames(groupsForTwo), groupsToGroupNames(DBHelper.getLoyaltyCardGroups(mDatabase, 2))); + assertEquals(groupsToGroupNames(groupsForThree), groupsToGroupNames(DBHelper.getLoyaltyCardGroups(mDatabase, 3))); + assertEquals(groupsToGroupNames(groupsForFour), groupsToGroupNames(DBHelper.getLoyaltyCardGroups(mDatabase, 4))); + assertEquals(groupsToGroupNames(groupsForFive), groupsToGroupNames(DBHelper.getLoyaltyCardGroups(mDatabase, 5))); + assertEquals(emptyGroup, DBHelper.getLoyaltyCardGroups(mDatabase, 6)); + assertEquals(emptyGroup, DBHelper.getLoyaltyCardGroups(mDatabase, 7)); + assertEquals(emptyGroup, DBHelper.getLoyaltyCardGroups(mDatabase, 8)); + assertEquals(emptyGroup, DBHelper.getLoyaltyCardGroups(mDatabase, 9)); + assertEquals(emptyGroup, DBHelper.getLoyaltyCardGroups(mDatabase, 10)); // Clear the database for the next format under test TestHelpers.getEmptyDb(activity); @@ -498,17 +499,17 @@ public class ImportExportTest { OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export into CSV data - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, null); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); outStream.close(); ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); // Import the CSV data on top of the existing database - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); checkLoyaltyCards(); @@ -527,7 +528,7 @@ public class ImportExportTest { OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima, null); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outData, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); TestHelpers.getEmptyDb(activity); @@ -541,10 +542,10 @@ public class ImportExportTest { ByteArrayInputStream inData = new ByteArrayInputStream((outData.toString() + corruptEntry).getBytes()); // Attempt to import the data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, format, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, format, null); assertEquals(ImportExportResult.GenericFailure, result); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); TestHelpers.getEmptyDb(activity); } @@ -608,7 +609,7 @@ public class ImportExportTest { assertNotNull(listener.result); assertEquals(ImportExportResult.Success, listener.result); - assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase)); checkLoyaltyCards(); @@ -631,11 +632,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -668,11 +669,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -705,9 +706,9 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.GenericFailure, result); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); TestHelpers.getEmptyDb(activity); } @@ -729,11 +730,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -766,11 +767,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -803,11 +804,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -840,9 +841,9 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); csvText = ""; csvText += DBHelper.LoyaltyCardDbIds.ID + "," + @@ -859,11 +860,11 @@ public class ImportExportTest { inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("store", card.store); assertEquals("note", card.note); @@ -896,11 +897,11 @@ public class ImportExportTest { HashMap loyaltyCardIconImages = new HashMap<>(); // Create card 1 - int loyaltyCardId = (int) db.insertLoyaltyCard("Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null); - loyaltyCardHashMap.put(loyaltyCardId, db.getLoyaltyCard(loyaltyCardId)); - db.insertGroup("One"); - List groups = Arrays.asList(db.getGroup("One")); - db.setLoyaltyCardGroups(loyaltyCardId, groups); + int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null); + loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId)); + DBHelper.insertGroup(mDatabase, "One"); + List groups = Arrays.asList(DBHelper.getGroup(mDatabase, "One")); + DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, groups); loyaltyCardGroups.put(loyaltyCardId, groups); Utils.saveCardImage(activity.getApplicationContext(), launcherBitmap, loyaltyCardId, ImageLocationType.front); Utils.saveCardImage(activity.getApplicationContext(), roundLauncherBitmap, loyaltyCardId, ImageLocationType.back); @@ -910,26 +911,26 @@ public class ImportExportTest { loyaltyCardIconImages.put(loyaltyCardId, launcherBitmap); // Create card 2 - loyaltyCardId = (int) db.insertLoyaltyCard("Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1, null); - loyaltyCardHashMap.put(loyaltyCardId, db.getLoyaltyCard(loyaltyCardId)); + loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1, null); + loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId)); // Export everything ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - MultiFormatExporter.exportData(activity.getApplicationContext(), db, outputStream, DataFormat.Catima, null); + MultiFormatExporter.exportData(activity.getApplicationContext(), mDatabase, outputStream, DataFormat.Catima, null); // Wipe database TestHelpers.getEmptyDb(activity); // Import everything - MultiFormatImporter.importData(activity.getApplicationContext(), db, new ByteArrayInputStream(outputStream.toByteArray()), DataFormat.Catima, null); + MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, new ByteArrayInputStream(outputStream.toByteArray()), DataFormat.Catima, null); // Ensure everything is there - assertEquals(loyaltyCardHashMap.size(), db.getLoyaltyCardCount()); + assertEquals(loyaltyCardHashMap.size(), DBHelper.getLoyaltyCardCount(mDatabase)); for (Integer loyaltyCardID : loyaltyCardHashMap.keySet()) { LoyaltyCard loyaltyCard = loyaltyCardHashMap.get(loyaltyCardID); - LoyaltyCard dbLoyaltyCard = db.getLoyaltyCard(loyaltyCardID); + LoyaltyCard dbLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardID); assertEquals(loyaltyCard.id, dbLoyaltyCard.id); assertEquals(loyaltyCard.store, dbLoyaltyCard.store); @@ -954,7 +955,8 @@ public class ImportExportTest { ) ), groupsToGroupNames( - db.getLoyaltyCardGroups( + DBHelper.getLoyaltyCardGroups( + mDatabase, loyaltyCardID ) ) @@ -1017,29 +1019,29 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); // Import the CSV data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Catima, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null); assertEquals(ImportExportResult.Success, result); - assertEquals(7, db.getLoyaltyCardCount()); - assertEquals(3, db.getGroupCount()); + assertEquals(7, DBHelper.getLoyaltyCardCount(mDatabase)); + assertEquals(3, DBHelper.getGroupCount(mDatabase)); // Check all groups - Group healthGroup = db.getGroup("Health"); + Group healthGroup = DBHelper.getGroup(mDatabase, "Health"); assertNotNull(healthGroup); - assertEquals(1, db.getGroupCardCount("Health")); - assertEquals(Arrays.asList(4), db.getGroupCardIds("Health")); + assertEquals(1, DBHelper.getGroupCardCount(mDatabase, "Health")); + assertEquals(Arrays.asList(4), DBHelper.getGroupCardIds(mDatabase, "Health")); - Group foodGroup = db.getGroup("Food"); + Group foodGroup = DBHelper.getGroup(mDatabase, "Food"); assertNotNull(foodGroup); - assertEquals(2, db.getGroupCardCount("Food")); - assertEquals(Arrays.asList(3, 5), db.getGroupCardIds("Food")); + assertEquals(2, DBHelper.getGroupCardCount(mDatabase, "Food")); + assertEquals(Arrays.asList(3, 5), DBHelper.getGroupCardIds(mDatabase, "Food")); - Group fashionGroup = db.getGroup("Fashion"); + Group fashionGroup = DBHelper.getGroup(mDatabase, "Fashion"); assertNotNull(fashionGroup); - assertEquals(2, db.getGroupCardCount("Fashion")); - assertEquals(Arrays.asList(8, 6), db.getGroupCardIds("Fashion")); + assertEquals(2, DBHelper.getGroupCardCount(mDatabase, "Fashion")); + assertEquals(Arrays.asList(8, 6), DBHelper.getGroupCardIds(mDatabase, "Fashion")); // Check all cards - LoyaltyCard card1 = db.getLoyaltyCard(1); + LoyaltyCard card1 = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("Card 1", card1.store); assertEquals("Note 1", card1.note); @@ -1055,7 +1057,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card1.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card1.id, ImageLocationType.icon)); - LoyaltyCard card8 = db.getLoyaltyCard(8); + LoyaltyCard card8 = DBHelper.getLoyaltyCard(mDatabase, 8); assertEquals("Clothes Store", card8.store); assertEquals("Note about store", card8.note); @@ -1071,7 +1073,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card8.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card8.id, ImageLocationType.icon)); - LoyaltyCard card2 = db.getLoyaltyCard(2); + LoyaltyCard card2 = DBHelper.getLoyaltyCard(mDatabase, 2); assertEquals("Department Store", card2.store); assertEquals("", card2.note); @@ -1087,7 +1089,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card2.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card2.id, ImageLocationType.icon)); - LoyaltyCard card3 = db.getLoyaltyCard(3); + LoyaltyCard card3 = DBHelper.getLoyaltyCard(mDatabase, 3); assertEquals("Grocery Store", card3.store); assertEquals("Multiline note about grocery store\n\nwith blank line", card3.note); @@ -1103,7 +1105,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card3.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card3.id, ImageLocationType.icon)); - LoyaltyCard card4 = db.getLoyaltyCard(4); + LoyaltyCard card4 = DBHelper.getLoyaltyCard(mDatabase, 4); assertEquals("Pharmacy", card4.store); assertEquals("", card4.note); @@ -1119,7 +1121,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card4.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card4.id, ImageLocationType.icon)); - LoyaltyCard card5 = db.getLoyaltyCard(5); + LoyaltyCard card5 = DBHelper.getLoyaltyCard(mDatabase, 5); assertEquals("Restaurant", card5.store); assertEquals("Note about restaurant here", card5.note); @@ -1135,7 +1137,7 @@ public class ImportExportTest { assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card5.id, ImageLocationType.back)); assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card5.id, ImageLocationType.icon)); - LoyaltyCard card6 = db.getLoyaltyCard(6); + LoyaltyCard card6 = DBHelper.getLoyaltyCard(mDatabase, 6); assertEquals("Shoe Store", card6.store); assertEquals("", card6.note); @@ -1159,11 +1161,11 @@ public class ImportExportTest { InputStream inputStream = getClass().getResourceAsStream("fidme.zip"); // Import the Fidme data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Fidme, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Fidme, null); assertEquals(ImportExportResult.Success, result); - assertEquals(3, db.getLoyaltyCardCount()); + assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("Hema", card.store); assertEquals("2021-03-24 18:35:08 UTC", card.note); @@ -1175,7 +1177,7 @@ public class ImportExportTest { assertEquals(null, card.barcodeType); assertEquals(0, card.starStatus); - card = db.getLoyaltyCard(2); + card = DBHelper.getLoyaltyCard(mDatabase, 2); assertEquals("test", card.store); assertEquals("Test\n2021-03-24 18:34:19 UTC", card.note); @@ -1187,7 +1189,7 @@ public class ImportExportTest { assertEquals(null, card.barcodeType); assertEquals(0, card.starStatus); - card = db.getLoyaltyCard(3); + card = DBHelper.getLoyaltyCard(mDatabase, 3); assertEquals("Albert Heijn", card.store); assertEquals("Bonus Kaart\n2021-03-24 16:47:47 UTC\nFirst Last", card.note); @@ -1207,17 +1209,17 @@ public class ImportExportTest { InputStream inputStream = getClass().getResourceAsStream("stocard.zip"); // Import the Stocard data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Stocard, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Stocard, null); assertEquals(ImportExportResult.BadPassword, result); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); inputStream = getClass().getResourceAsStream("stocard.zip"); - result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.Stocard, "da811b40a4dac56f0cbb2d99b21bbb9a".toCharArray()); + result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Stocard, "da811b40a4dac56f0cbb2d99b21bbb9a".toCharArray()); assertEquals(ImportExportResult.Success, result); - assertEquals(3, db.getLoyaltyCardCount()); + assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("GAMMA", card.store); assertEquals("", card.note); @@ -1233,7 +1235,7 @@ public class ImportExportTest { assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back)); assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon)); - card = db.getLoyaltyCard(2); + card = DBHelper.getLoyaltyCard(mDatabase, 2); assertEquals("Air Miles", card.store); assertEquals("szjsbs", card.note); @@ -1249,7 +1251,7 @@ public class ImportExportTest { assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-back.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.back))); assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.icon)); - card = db.getLoyaltyCard(3); + card = DBHelper.getLoyaltyCard(mDatabase, 3); // I don't think we can know this one, but falling back to an unique store name is at least something assertEquals("63536738-d64b-48ae-aeb8-82761523fa67", card.store); @@ -1299,11 +1301,11 @@ public class ImportExportTest { ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonText.getBytes(StandardCharsets.UTF_8)); // Import the Voucher Vault data - ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inputStream, DataFormat.VoucherVault, null); + ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.VoucherVault, null); assertEquals(ImportExportResult.Success, result); - assertEquals(2, db.getLoyaltyCardCount()); + assertEquals(2, DBHelper.getLoyaltyCardCount(mDatabase)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); assertEquals("Clothes Store", card.store); assertEquals("", card.note); @@ -1316,7 +1318,7 @@ public class ImportExportTest { assertEquals(Color.GRAY, (long) card.headerColor); assertEquals(0, card.starStatus); - card = db.getLoyaltyCard(2); + card = DBHelper.getLoyaltyCard(mDatabase, 2); assertEquals("Department Store", card.store); assertEquals("", card.note); diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index d282d3036..6ae7dfa97 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -1,6 +1,7 @@ package protect.card_locker; import android.app.Activity; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.net.Uri; @@ -27,13 +28,13 @@ import static org.junit.Assert.assertTrue; @Config(sdk = 23) public class ImportURITest { private ImportURIHelper importURIHelper; - private DBHelper db; + private SQLiteDatabase mDatabase; @Before public void setUp() { Activity activity = Robolectric.setupActivity(MainActivity.class); importURIHelper = new ImportURIHelper(activity); - db = TestHelpers.getEmptyDb(activity); + mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase(); } @Test @@ -41,10 +42,10 @@ public class ImportURITest { // Generate card Date date = new Date(); - db.insertLoyaltyCard("store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null); + DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null); // Get card - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); // Card to URI Uri cardUri = importURIHelper.toUri(card); @@ -69,10 +70,10 @@ public class ImportURITest { @Test public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException { // Generate card - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null); // Get card - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); // Card to URI Uri cardUri = importURIHelper.toUri(card); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 1053aeeaf..d44de2a4a 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.view.View; import android.widget.ImageView; @@ -35,7 +36,7 @@ import static org.junit.Assert.assertTrue; @Config(sdk = 23) public class LoyaltyCardCursorAdapterTest { private Activity activity; - private DBHelper db; + private SQLiteDatabase mDatabase; private SharedPreferences settings; @Before @@ -43,7 +44,7 @@ public class LoyaltyCardCursorAdapterTest { ShadowLog.stream = System.out; activity = Robolectric.setupActivity(MainActivity.class); - db = TestHelpers.getEmptyDb(activity); + mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase(); settings = PreferenceManager.getDefaultSharedPreferences(activity); } @@ -104,10 +105,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapterEmptyNote() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); @@ -119,10 +120,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapterWithNote() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); @@ -134,14 +135,13 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapterFontSizes() { - final Context context = activity.getApplicationContext(); Date expiryDate = new Date(); String dateString = DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate); - db.insertLoyaltyCard("store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); setFontScale(50); @@ -158,13 +158,13 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapterStarring() { - assertNotEquals(-1, db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null)); - assertNotEquals(-1, db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null)); - assertNotEquals(-1, db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null)); - assertEquals(3, db.getLoyaltyCardCount()); + assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase)); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); assertEquals(3, cursor.getCount()); cursor.moveToFirst(); @@ -200,10 +200,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapter0Points() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); @@ -215,10 +215,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapter0EUR() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); @@ -230,10 +230,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapter100Points() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); @@ -245,10 +245,10 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapter10USD() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - LoyaltyCard card = db.getLoyaltyCard(1); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); cursor.moveToFirst(); View view = createView(cursor); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 0a48f0c2a..16829faf7 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -9,6 +9,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; @@ -127,11 +128,11 @@ public class LoyaltyCardViewActivityTest { final String barcodeId, final String barcodeType, boolean creatingNewCard) throws ParseException { - DBHelper db = new DBHelper(activity); + SQLiteDatabase database = new DBHelper(activity).getWritableDatabase(); if (creatingNewCard) { - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(database)); } else { - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(database)); } final EditText storeField = activity.findViewById(R.id.storeNameEdit); @@ -156,9 +157,9 @@ public class LoyaltyCardViewActivityTest { activity.findViewById(R.id.fabSave).performClick(); assertEquals(true, activity.isFinishing()); - assertEquals(1, db.getLoyaltyCardCount()); + assertEquals(1, DBHelper.getLoyaltyCardCount(database)); - LoyaltyCard card = db.getLoyaltyCard(1); + LoyaltyCard card = DBHelper.getLoyaltyCard(database, 1); assertEquals(store, card.store); assertEquals(note, card.note); assertEquals(balance, card.balance); @@ -193,7 +194,7 @@ public class LoyaltyCardViewActivityTest { } assertNotNull(card.headerColor); - db.close(); + database.close(); } /** @@ -333,10 +334,10 @@ public class LoyaltyCardViewActivityTest { LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); if (!newCard) { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); } activityController.start(); @@ -430,24 +431,24 @@ public class LoyaltyCardViewActivityTest { Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - assertEquals(0, db.getLoyaltyCardCount()); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + assertEquals(0, DBHelper.getLoyaltyCardCount(database)); final EditText storeField = activity.findViewById(R.id.storeNameEdit); final EditText noteField = activity.findViewById(R.id.noteEdit); activity.findViewById(R.id.fabSave).performClick(); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(database)); storeField.setText("store"); activity.findViewById(R.id.fabSave).performClick(); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(database)); noteField.setText("note"); activity.findViewById(R.id.fabSave).performClick(); - assertEquals(0, db.getLoyaltyCardCount()); + assertEquals(0, DBHelper.getLoyaltyCardCount(database)); - db.close(); + database.close(); } @Test @@ -570,9 +571,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -580,7 +581,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -588,9 +589,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -598,7 +599,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString(), null, null); - db.close(); + database.close(); } @Test @@ -606,9 +607,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -622,7 +623,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -630,9 +631,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -660,7 +661,7 @@ public class LoyaltyCardViewActivityTest { assertEquals(false, activity.hasChanged); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test @@ -668,9 +669,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -692,7 +693,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -700,9 +701,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -716,7 +717,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -724,9 +725,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -763,7 +764,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString(), null, null); - db.close(); + database.close(); } }); balanceField.clearFocus(); @@ -774,9 +775,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -806,7 +807,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -814,9 +815,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -837,7 +838,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -845,9 +846,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -870,7 +871,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -878,9 +879,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -906,7 +907,7 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "654321", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test @@ -914,9 +915,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -942,16 +943,16 @@ public class LoyaltyCardViewActivityTest { checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "654321", "123456", EAN_BARCODE_TYPE.prettyName(), null, null); - db.close(); + database.close(); } @Test public void checkMenu() throws IOException { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -969,7 +970,7 @@ public class LoyaltyCardViewActivityTest { assertEquals("Share", menu.findItem(R.id.action_share).getTitle().toString()); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); - db.close(); + database.close(); } @Test @@ -996,8 +997,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -1007,7 +1008,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(activity).clickMenuItem(android.R.id.home); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test @@ -1015,8 +1016,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null); activityController.start(); activityController.visible(); @@ -1026,7 +1027,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(activity).clickMenuItem(android.R.id.home); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test @@ -1034,8 +1035,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null); activityController.start(); activityController.visible(); @@ -1044,7 +1045,7 @@ public class LoyaltyCardViewActivityTest { // Save and check the loyalty card saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.name(), false); - db.close(); + database.close(); } @Test @@ -1052,8 +1053,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -1062,7 +1063,7 @@ public class LoyaltyCardViewActivityTest { // Save and check the loyalty card saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), false); - db.close(); + database.close(); } @Test @@ -1070,9 +1071,9 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity) activityController.get(); final Context context = activity.getApplicationContext(); - DBHelper db = TestHelpers.getEmptyDb(activity); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -1092,7 +1093,7 @@ public class LoyaltyCardViewActivityTest { // Check if the special NO_BARCODE string doesn't get saved saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), false); - db.close(); + database.close(); } @Test @@ -1100,8 +1101,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); final int LARGE_FONT_SIZE = 40; @@ -1126,7 +1127,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(activity).clickMenuItem(android.R.id.home); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test @@ -1135,8 +1136,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + SQLiteDatabase database = new DBHelper(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); settings.edit() @@ -1159,7 +1160,7 @@ public class LoyaltyCardViewActivityTest { assertEquals(title, activity.getString(R.string.lockScreen)); } - db.close(); + database.close(); } } @@ -1168,8 +1169,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); activityController.resume(); @@ -1194,7 +1195,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(getMainLooper()).idle(); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); - db.close(); + database.close(); } @Test @@ -1202,8 +1203,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -1299,7 +1300,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(getMainLooper()).idle(); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test @@ -1307,8 +1308,8 @@ public class LoyaltyCardViewActivityTest { ActivityController activityController = createActivityWithLoyaltyCard(false); Activity activity = (Activity) activityController.get(); - DBHelper db = TestHelpers.getEmptyDb(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null); activityController.start(); activityController.visible(); @@ -1342,7 +1343,7 @@ public class LoyaltyCardViewActivityTest { shadowOf(getMainLooper()).idle(); assertEquals(true, activity.isFinishing()); - db.close(); + database.close(); } @Test diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index b1c539153..c2c4129cd 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -3,6 +3,7 @@ package protect.card_locker; import android.app.Activity; import android.content.ComponentName; import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.view.Menu; import android.view.View; @@ -92,8 +93,8 @@ public class MainActivityTest { assertEquals(0, list.getAdapter().getItemCount()); - DBHelper db = TestHelpers.getEmptyDb(mainActivity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -108,7 +109,7 @@ public class MainActivityTest { assertEquals(1, list.getAdapter().getItemCount()); - db.close(); + database.close(); } @Test @@ -127,11 +128,11 @@ public class MainActivityTest { assertEquals(0, list.getAdapter().getItemCount()); - DBHelper db = TestHelpers.getEmptyDb(mainActivity); - db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - db.insertLoyaltyCard("storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null); - db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null); + DBHelper.insertLoyaltyCard(database, "storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -156,7 +157,7 @@ public class MainActivityTest { assertEquals("storeA", ((TextView) list.findViewHolderForAdapterPosition(2).itemView.findViewById(R.id.store)).getText()); assertEquals("storeB", ((TextView) list.findViewHolderForAdapterPosition(3).itemView.findViewById(R.id.store)).getText()); - db.close(); + database.close(); } @Test @@ -167,7 +168,7 @@ public class MainActivityTest { activityController.start(); activityController.resume(); - DBHelper db = TestHelpers.getEmptyDb(mainActivity); + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); TabLayout groupTabs = mainActivity.findViewById(R.id.groups); @@ -175,7 +176,7 @@ public class MainActivityTest { assertEquals(0, groupTabs.getTabCount()); // Having at least one group should create two tabs: One all and one for each group - db.insertGroup("One"); + DBHelper.insertGroup(database, "One"); activityController.pause(); activityController.resume(); assertEquals(2, groupTabs.getTabCount()); @@ -183,7 +184,7 @@ public class MainActivityTest { assertEquals("One", groupTabs.getTabAt(1).getText().toString()); // Adding another group should have it added to the end - db.insertGroup("Alphabetical two"); + DBHelper.insertGroup(database, "Alphabetical two"); activityController.pause(); activityController.resume(); assertEquals(3, groupTabs.getTabCount()); @@ -192,7 +193,7 @@ public class MainActivityTest { assertEquals("Alphabetical two", groupTabs.getTabAt(2).getText().toString()); // Removing a group should also change the list - db.deleteGroup("Alphabetical two"); + DBHelper.deleteGroup(database, "Alphabetical two"); activityController.pause(); activityController.resume(); assertEquals(2, groupTabs.getTabCount()); @@ -200,12 +201,12 @@ public class MainActivityTest { assertEquals("One", groupTabs.getTabAt(1).getText().toString()); // Removing the last group should make the tabs disappear - db.deleteGroup("One"); + DBHelper.deleteGroup(database, "One"); activityController.pause(); activityController.resume(); assertEquals(0, groupTabs.getTabCount()); - db.close(); + database.close(); } @Test @@ -221,14 +222,14 @@ public class MainActivityTest { RecyclerView list = mainActivity.findViewById(R.id.list); TabLayout groupTabs = mainActivity.findViewById(R.id.groups); - DBHelper db = TestHelpers.getEmptyDb(mainActivity); - db.insertLoyaltyCard("The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - db.insertLoyaltyCard("The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); + DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null); - db.insertGroup("Group one"); + DBHelper.insertGroup(database, "Group one"); List groups = new ArrayList<>(); - groups.add(db.getGroup("Group one")); - db.setLoyaltyCardGroups(1, groups); + groups.add(DBHelper.getGroup(database, "Group one")); + DBHelper.setLoyaltyCardGroups(database, 1, groups); activityController.pause(); activityController.resume(); @@ -441,6 +442,6 @@ public class MainActivityTest { assertEquals(2, list.getAdapter().getItemCount()); - db.close(); + database.close(); } } \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/TestHelpers.java b/app/src/test/java/protect/card_locker/TestHelpers.java index d6b6747f7..54d9381d3 100644 --- a/app/src/test/java/protect/card_locker/TestHelpers.java +++ b/app/src/test/java/protect/card_locker/TestHelpers.java @@ -9,9 +9,10 @@ import java.io.FileNotFoundException; public class TestHelpers { static public DBHelper getEmptyDb(Activity activity) { DBHelper db = new DBHelper(activity); + SQLiteDatabase database = db.getWritableDatabase(); // Make sure no files remain - Cursor cursor = db.getLoyaltyCardCursor(); + Cursor cursor = DBHelper.getLoyaltyCardCursor(database); cursor.moveToFirst(); while (!cursor.isAfterLast()) { int cardID = cursor.getColumnIndex(DBHelper.LoyaltyCardDbIds.ID); @@ -27,11 +28,9 @@ public class TestHelpers { } // Make sure DB is empty - SQLiteDatabase database = db.getWritableDatabase(); database.execSQL("delete from " + DBHelper.LoyaltyCardDbIds.TABLE); database.execSQL("delete from " + DBHelper.LoyaltyCardDbGroups.TABLE); database.execSQL("delete from " + DBHelper.LoyaltyCardDbIdsGroups.TABLE); - database.close(); return db; }