Cleanup DBHelper

This commit is contained in:
Sylvia van Os
2021-12-13 22:41:01 +01:00
parent 3331cf9ccf
commit f2e820f7bb
28 changed files with 614 additions and 708 deletions

View File

@@ -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);

View File

@@ -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<Control> 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);

View File

@@ -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<Group> getLoyaltyCardGroups(final int id) {
SQLiteDatabase db = getReadableDatabase();
Cursor data = db.rawQuery("select * from " + LoyaltyCardDbGroups.TABLE + " g " +
public static List<Group> 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<Group> groups) {
SQLiteDatabase db = getWritableDatabase();
public static void setLoyaltyCardGroups(SQLiteDatabase database, final int id, List<Group> 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<Group> 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<Integer> allowedIds = getGroupCardIds(group._id);
List<Integer> 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<Group> getGroups() {
Cursor data = getGroupCursor();
public static List<Group> getGroups(SQLiteDatabase database) {
Cursor data = getGroupCursor(database);
List<Group> groups = new ArrayList<>();
@@ -722,15 +658,14 @@ public class DBHelper extends SQLiteOpenHelper {
return groups;
}
public void reorderGroups(final List<Group> groups) {
public static void reorderGroups(SQLiteDatabase database, final List<Group> 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<Integer> getGroupCardIds(final String groupName) {
SQLiteDatabase db = getReadableDatabase();
Cursor data = db.query(LoyaltyCardDbIdsGroups.TABLE, withArgs(LoyaltyCardDbIdsGroups.cardID),
public static List<Integer> getGroupCardIds(SQLiteDatabase database, final String groupName) {
Cursor data = database.query(LoyaltyCardDbIdsGroups.TABLE, withArgs(LoyaltyCardDbIdsGroups.cardID),
whereAttrs(LoyaltyCardDbIdsGroups.groupID), withArgs(groupName), null, null, null);
List<Integer> 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";

View File

@@ -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<GroupCursorAdapter.Gro
Settings mSettings;
private final Context mContext;
private final GroupAdapterListener mListener;
DBHelper mDb;
SQLiteDatabase mDatabase;
public GroupCursorAdapter(Context inputContext, Cursor inputCursor, GroupAdapterListener inputListener) {
super(inputCursor, DBHelper.LoyaltyCardDbGroups.ORDER);
@@ -24,7 +25,7 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
mSettings = new Settings(inputContext);
mContext = inputContext.getApplicationContext();
mListener = inputListener;
mDb = new DBHelper(inputContext);
mDatabase = new DBHelper(inputContext).getReadableDatabase();
swapCursor(inputCursor);
}
@@ -41,7 +42,7 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
inputHolder.mName.setText(group._id);
int groupCardCount = mDb.getGroupCardCount(group._id);
int groupCardCount = DBHelper.getGroupCardCount(mDatabase, group._id);
inputHolder.mCardCount.setText(mContext.getResources().getQuantityString(R.plurals.groupCardCount, groupCardCount, groupCardCount));
inputHolder.mName.setTextSize(mSettings.getFontSizeMax(mSettings.getMediumFont()));

View File

@@ -4,6 +4,7 @@ import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.io.IOException;
@@ -59,20 +60,20 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
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<ImportExportResult> {
}
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;
}

View File

@@ -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<Group> existingGroups = db.getGroups();
List<Group> existingGroups = DBHelper.getGroups(mDatabase);
List<Group> loyaltyCardGroups = db.getLoyaltyCardGroups(loyaltyCardId);
List<Group> 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);

View File

@@ -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<Group> loyaltyCardGroups = db.getLoyaltyCardGroups(loyaltyCardId);
List<Group> loyaltyCardGroups = DBHelper.getLoyaltyCardGroups(database, loyaltyCardId);
if (loyaltyCardGroups.size() > 0) {
List<String> 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;
}

View File

@@ -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<Group> newGroups = db.getGroups();
List<Group> newGroups = DBHelper.getGroups(mDatabase);
if (newGroups.size() == 0) {
groupsTabLayout.removeAllTabs();

View File

@@ -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);

View File

@@ -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<Integer, Boolean> mIsLoyaltyCardInGroupCache;
private HashMap<Integer, List<Group>> 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<Group> groups = mDb.getLoyaltyCardGroups(cardId);
List<Group> 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);
}
}

View File

@@ -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<Group> groups = mDb.getGroups();
List<Group> 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();

View File

@@ -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<ShortcutInfoCompat> 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)

View File

@@ -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);
}

View File

@@ -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<Group> cardGroups = helper.getLoyaltyCardGroups(cardId);
cardGroups.add(helper.getGroup(groupId));
helper.setLoyaltyCardGroups(database, cardId, cardGroups);
List<Group> cardGroups = DBHelper.getLoyaltyCardGroups(database, cardId);
cardGroups.add(DBHelper.getGroup(database, groupId));
DBHelper.setLoyaltyCardGroups(database, cardId, cardGroups);
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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());
}

View File

@@ -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<String, HashMap<String, Object>> loyaltyCardHashMap = new HashMap<>();
HashMap<String, HashMap<String, String>> 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<String, Object> loyaltyCardData : loyaltyCardHashMap.values()) {
String providerId = (String) loyaltyCardData.get("_providerId");
HashMap<String, String> 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();
}

View File

@@ -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();
}
}

View File

@@ -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<Group> 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<Group> cardGroups = mDb.getLoyaltyCardGroups((int) id);
List<Group> 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<Group> cardGroups = mDb.getLoyaltyCardGroups(1);
List<Group> cardGroups = DBHelper.getLoyaltyCardGroups(mDatabase, 1);
assertEquals(0, cardGroups.size());
// Add one groups to card
List<Group> groupList1 = new ArrayList<>();
groupList1.add(group1);
mDb.setLoyaltyCardGroups(1, groupList1);
DBHelper.setLoyaltyCardGroups(mDatabase, 1, groupList1);
List<Group> cardGroups1 = mDb.getLoyaltyCardGroups(1);
List<Group> 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<Group>());
List<Group> cardGroups2 = mDb.getLoyaltyCardGroups(1);
DBHelper.setLoyaltyCardGroups(mDatabase, 1, new ArrayList<Group>());
List<Group> 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();
}
}

View File

@@ -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<Group> emptyGroup = new ArrayList<>();
List<Group> groupsForOne = new ArrayList<>();
groupsForOne.add(db.getGroup("group, \" 1"));
groupsForOne.add(DBHelper.getGroup(mDatabase, "group, \" 1"));
List<Group> 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<Group> 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<Group> 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<Group> 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<Integer, Bitmap> 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<Group> 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<Group> 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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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<Group> 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();
}
}

View File

@@ -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;
}