Support for returning images from PkpassParser

This commit is contained in:
Sylvia van Os
2024-11-14 23:31:30 +01:00
parent f7697ce8bf
commit 1cb9ddecac
25 changed files with 402 additions and 312 deletions

View File

@@ -66,7 +66,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(selected);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(CardShortcutConfigure.this, selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);

View File

@@ -42,7 +42,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(loyaltyCardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(this, loyaltyCardCursor);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
@@ -69,7 +69,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
for (String controlId : controlIds) {
Control control;
Integer cardId = this.controlIdToCardId(controlId);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, cardId);
LoyaltyCard card = DBHelper.getLoyaltyCard(this, mDatabase, cardId);
if (card != null) {
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

View File

@@ -332,10 +332,10 @@ public class DBHelper extends SQLiteOpenHelper {
Set<String> files = new HashSet<>();
Cursor cardCursor = getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
String name = Utils.getCardImageFileName(card.id, imageLocationType);
if (Utils.retrieveCardImageAsFile(context, name).exists()) {
if (card.getImageForImageLocationType(imageLocationType) != null) {
files.add(name);
}
}
@@ -535,14 +535,14 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsUpdated == 1);
}
public static LoyaltyCard getLoyaltyCard(SQLiteDatabase database, final int id) {
public static LoyaltyCard getLoyaltyCard(Context context, SQLiteDatabase database, final int id) {
Cursor data = database.query(LoyaltyCardDbIds.TABLE, null, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id), null, null, null);
LoyaltyCard card = null;
if (data.getCount() == 1) {
data.moveToFirst();
card = LoyaltyCard.fromCursor(data);
card = LoyaltyCard.fromCursor(context, data);
}
data.close();

View File

@@ -125,7 +125,26 @@ public class ImportURIHelper {
headerColor = Integer.parseInt(unparsedHeaderColor);
}
return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0);
return new LoyaltyCard(
-1,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
0,
Utils.getUnixTime(),
100,
0,
null,
null,
null
);
} catch (NumberFormatException | UnsupportedEncodingException | ArrayIndexOutOfBoundsException ex) {
throw new InvalidObjectException("Not a valid import URI");
}

View File

@@ -1,9 +1,9 @@
package protect.card_locker;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -14,7 +14,7 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
public class LoyaltyCard implements Parcelable {
public class LoyaltyCard {
public int id;
public String store;
public String note;
@@ -37,6 +37,13 @@ public class LoyaltyCard implements Parcelable {
public int zoomLevel;
public int archiveStatus;
@Nullable
public Bitmap imageThumbnail;
@Nullable
public Bitmap imageFront;
@Nullable
public Bitmap imageBack;
public static final String BUNDLE_LOYALTY_CARD_ID = "loyaltyCardId";
public static final String BUNDLE_LOYALTY_CARD_STORE = "loyaltyCardStore";
public static final String BUNDLE_LOYALTY_CARD_NOTE = "loyaltyCardNote";
@@ -52,6 +59,13 @@ public class LoyaltyCard implements Parcelable {
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL = "loyaltyCardImageThumbnail";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_FRONT = "loyaltyCardImageFront";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_BACK = "loyaltyCardImageBack";
private static final String TEMP_IMAGE_THUMBNAIL_FILE_NAME = "loyaltyCardTempImageThumbnailFileName";
private static final String TEMP_IMAGE_FRONT_FILE_NAME = "loyaltyCardTempImageFrontFileName";
private static final String TEMP_IMAGE_BACK_FILE_NAME = "loyaltyCardTempImageBackFileName";
/**
* Create a loyalty card object with default values
@@ -72,6 +86,9 @@ public class LoyaltyCard implements Parcelable {
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setArchiveStatus(0);
setImageThumbnail(null);
setImageFront(null);
setImageBack(null);
}
/**
@@ -97,7 +114,8 @@ public class LoyaltyCard implements Parcelable {
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int archiveStatus) {
final long lastUsed, final int zoomLevel, final int archiveStatus,
@Nullable Bitmap imageThumbnail, @Nullable Bitmap imageFront, @Nullable Bitmap imageBack) {
setId(id);
setStore(store);
setNote(note);
@@ -113,6 +131,9 @@ public class LoyaltyCard implements Parcelable {
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setArchiveStatus(archiveStatus);
setImageThumbnail(imageThumbnail);
setImageFront(imageFront);
setImageBack(imageBack);
}
public void setId(int id) {
@@ -187,60 +208,32 @@ public class LoyaltyCard implements Parcelable {
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
setId(in.readInt());
setStore(Objects.requireNonNull(in.readString()));
setNote(Objects.requireNonNull(in.readString()));
long tmpValidFrom = in.readLong();
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
long tmpExpiry = in.readLong();
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
setBalance((BigDecimal) in.readValue(BigDecimal.class.getClassLoader()));
setBalanceType((Currency) in.readValue(Currency.class.getClassLoader()));
setCardId(Objects.requireNonNull(in.readString()));
setBarcodeId(in.readString());
String tmpBarcodeType = in.readString();
setBarcodeType((tmpBarcodeType != null && !tmpBarcodeType.isEmpty()) ? CatimaBarcode.fromName(tmpBarcodeType) : null);
int tmpHeaderColor = in.readInt();
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
setStarStatus(in.readInt());
setLastUsed(in.readLong());
setZoomLevel(in.readInt());
setArchiveStatus(in.readInt());
public void setImageThumbnail(@Nullable Bitmap imageThumbnail) {
this.imageThumbnail = imageThumbnail;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
parcel.writeLong(validFrom != null ? validFrom.getTime() : -1);
parcel.writeLong(expiry != null ? expiry.getTime() : -1);
parcel.writeValue(balance);
parcel.writeValue(balanceType);
parcel.writeString(cardId);
parcel.writeString(barcodeId);
parcel.writeString(barcodeType != null ? barcodeType.name() : "");
parcel.writeInt(headerColor != null ? headerColor : -1);
parcel.writeInt(starStatus);
parcel.writeLong(lastUsed);
parcel.writeInt(zoomLevel);
parcel.writeInt(archiveStatus);
public void setImageFront(@Nullable Bitmap imageFront) {
this.imageFront = imageFront;
}
@NonNull
public static LoyaltyCard fromBundle(Bundle bundle, boolean requireFull) {
// Grab default card
LoyaltyCard loyaltyCard = new LoyaltyCard();
// Update from bundle
loyaltyCard.updateFromBundle(bundle, requireFull);
// Return updated version
return loyaltyCard;
public void setImageBack(@Nullable Bitmap imageBack) {
this.imageBack = imageBack;
}
public void updateFromBundle(@NonNull Bundle bundle, boolean requireFull) {
@Nullable
public Bitmap getImageForImageLocationType(ImageLocationType imageLocationType) {
if (imageLocationType == ImageLocationType.icon) {
return imageThumbnail;
} else if (imageLocationType == ImageLocationType.front) {
return imageFront;
} else if (imageLocationType == ImageLocationType.back) {
return imageBack;
}
throw new IllegalArgumentException("Unknown image location type");
}
public void updateFromBundle(@NonNull Context context, @NonNull Bundle bundle, boolean requireFull) {
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ID)) {
setId(bundle.getInt(BUNDLE_LOYALTY_CARD_ID));
} else if (requireFull) {
@@ -321,9 +314,39 @@ public class LoyaltyCard implements Parcelable {
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
String tempImageName = bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL);
if (tempImageName != null) {
setImageThumbnail(Utils.loadTempImage(context, tempImageName));
} else {
setImageThumbnail(null);
}
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
String tempImageName = bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT);
if (tempImageName != null) {
setImageFront(Utils.loadTempImage(context, tempImageName));
} else {
setImageFront(null);
}
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_FRONT);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
String tempImageName = bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_BACK);
if (tempImageName != null) {
setImageBack(Utils.loadTempImage(context, tempImageName));
} else {
setImageBack(null);
}
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_BACK);
}
}
public Bundle toBundle(List<String> exportLimit) {
public Bundle toBundle(Context context, List<String> exportLimit) {
boolean exportIsLimited = !exportLimit.isEmpty();
Bundle bundle = new Bundle();
@@ -373,11 +396,37 @@ public class LoyaltyCard implements Parcelable {
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
}
// There is an (undocumented) size limit to bundles of around 2MB(?), when going over it you will experience a random crash
// So, instead of storing the bitmaps directly, we write the bitmap to a temp file and store the path
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
if (imageThumbnail != null) {
Utils.saveTempImage(context, imageThumbnail, TEMP_IMAGE_THUMBNAIL_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, TEMP_IMAGE_THUMBNAIL_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
if (imageFront != null) {
Utils.saveTempImage(context, imageFront, TEMP_IMAGE_FRONT_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, TEMP_IMAGE_FRONT_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
if (imageBack != null) {
Utils.saveTempImage(context, imageBack, TEMP_IMAGE_BACK_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, TEMP_IMAGE_BACK_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, null);
}
}
return bundle;
}
public static LoyaltyCard fromCursor(Cursor cursor) {
public static LoyaltyCard fromCursor(Context context, Cursor cursor) {
// id
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
// store
@@ -414,11 +463,37 @@ public class LoyaltyCard implements Parcelable {
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
// archiveStatus
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
// imageThumbnail
Bitmap imageThumbnail = Utils.retrieveCardImage(context, id, ImageLocationType.icon);
// imageFront
Bitmap imageFront = Utils.retrieveCardImage(context, id, ImageLocationType.front);
// imageBack
Bitmap imageBack = Utils.retrieveCardImage(context, id, ImageLocationType.back);
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, zoomLevel, archiveStatus);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
zoomLevel,
archiveStatus,
imageThumbnail,
imageFront,
imageBack
);
}
public static boolean isDuplicate(final LoyaltyCard a, final LoyaltyCard b) {
// Note: Bitmap comparing is slow, be careful when calling this method
// Skip lastUsed & zoomLevel
return a.id == b.id && // non-nullable int
a.store.equals(b.store) && // non-nullable String
@@ -433,12 +508,23 @@ public class LoyaltyCard implements Parcelable {
b.barcodeType == null ? null : b.barcodeType.format()) && // nullable CatimaBarcode with no overridden .equals(), so we need to check .format()
Utils.equals(a.headerColor, b.headerColor) && // nullable Integer
a.starStatus == b.starStatus && // non-nullable int
a.archiveStatus == b.archiveStatus; // non-nullable int
a.archiveStatus == b.archiveStatus && // non-nullable int
nullableBitmapsEqual(a.imageThumbnail, b.imageThumbnail) && // nullable Bitmap
nullableBitmapsEqual(a.imageFront, b.imageFront) && // nullable Bitmap
nullableBitmapsEqual(a.imageBack, b.imageBack); // nullable Bitmap
}
@Override
public int describeContents() {
return 0;
public static boolean nullableBitmapsEqual(@Nullable Bitmap a, @Nullable Bitmap b) {
if (a == null && b == null) {
return true;
}
if (a != null && b != null) {
return a.sameAs(b);
}
// One is null and the other isn't, so it's not equal
return false;
}
@NonNull
@@ -447,7 +533,8 @@ public class LoyaltyCard implements Parcelable {
return String.format(
"LoyaltyCard{%n id=%s,%n store=%s,%n note=%s,%n validFrom=%s,%n expiry=%s,%n"
+ " balance=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n"
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n}",
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n"
+ " imageThumbnail=%s,%n imageFront=%s,%n imageBack=%s,%n}",
this.id,
this.store,
this.note,
@@ -462,19 +549,10 @@ public class LoyaltyCard implements Parcelable {
this.starStatus,
this.lastUsed,
this.zoomLevel,
this.archiveStatus
this.archiveStatus,
this.imageThumbnail,
this.imageFront,
this.imageBack
);
}
public static final Creator<LoyaltyCard> CREATOR = new Creator<LoyaltyCard>() {
@Override
public LoyaltyCard createFromParcel(Parcel in) {
return new LoyaltyCard(in);
}
@Override
public LoyaltyCard[] newArray(int size) {
return new LoyaltyCard[size];
}
};
}

View File

@@ -80,7 +80,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCard getCard(int position) {
mCursor.moveToPosition(position);
return LoyaltyCard.fromCursor(mCursor);
return LoyaltyCard.fromCursor(mContext, mCursor);
}
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
@@ -88,7 +88,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
boolean showDivider = false;
inputHolder.mDivider.setVisibility(View.GONE);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Bitmap icon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
if (mLoyaltyCardListDisplayOptions.showingNameBelowThumbnail() && icon != null) {
@@ -193,7 +193,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
int i;
for (i = 0; i < mSelectedItems.size(); i++) {
mCursor.moveToPosition(mSelectedItems.keyAt(i));
result.add(LoyaltyCard.fromCursor(mCursor));
result.add(LoyaltyCard.fromCursor(mContext, mCursor));
}
return result;

View File

@@ -93,15 +93,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
private final String STATE_TAB_INDEX = "savedTab";
private final String STATE_TEMP_CARD = "tempLoyaltyCard";
private final String STATE_TEMP_CARD_FIELD = "tempLoyaltyCardField";
private final String STATE_REQUESTED_IMAGE = "requestedImage";
private final String STATE_FRONT_IMAGE_UNSAVED = "frontImageUnsaved";
private final String STATE_BACK_IMAGE_UNSAVED = "backImageUnsaved";
private final String STATE_ICON_UNSAVED = "iconUnsaved";
private final String STATE_UPDATE_LOYALTY_CARD = "updateLoyaltyCard";
private final String STATE_HAS_CHANGED = "hasChange";
private final String STATE_FRONT_IMAGE_REMOVED = "frontImageRemoved";
private final String STATE_BACK_IMAGE_REMOVED = "backImageRemoved";
private final String STATE_ICON_REMOVED = "iconRemoved";
private final String STATE_OPEN_SET_ICON_MENU = "openSetIconMenu";
private static final String PICK_DATE_REQUEST_KEY = "pick_date_request";
@@ -111,11 +104,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
private final String TEMP_CROP_IMAGE_NAME = LoyaltyCardEditActivity.class.getSimpleName() + "_crop_image.png";
private final Bitmap.CompressFormat TEMP_CROP_IMAGE_FORMAT = Bitmap.CompressFormat.PNG;
private final String TEMP_UNSAVED_FRONT_IMAGE_NAME = LoyaltyCardEditActivity.class.getSimpleName() + "_front_image.png";
private final String TEMP_UNSAVED_BACK_IMAGE_NAME = LoyaltyCardEditActivity.class.getSimpleName() + "_back_image.png";
private final String TEMP_UNSAVED_ICON_NAME = LoyaltyCardEditActivity.class.getSimpleName() + "_icon.png";
private final Bitmap.CompressFormat TEMP_UNSAVED_IMAGE_FORMAT = Bitmap.CompressFormat.PNG;
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_FRONT = 100;
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_BACK = 101;
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_ICON = 102;
@@ -185,17 +173,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
ActivityResultLauncher<Intent> mCropperLauncher;
int mRequestedImage = 0;
int mCropperFinishedType = 0;
UCrop.Options mCropperOptions;
boolean mFrontImageUnsaved = false;
boolean mBackImageUnsaved = false;
boolean mIconUnsaved = false;
boolean mFrontImageRemoved = false;
boolean mBackImageRemoved = false;
boolean mIconRemoved = false;
final private TaskHandler mTasks = new TaskHandler();
// store system locale for Build.VERSION.SDK_INT < Build.VERSION_CODES.N
@@ -288,7 +267,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// If we have to import a loyalty card, do so
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
tempLoyaltyCard = DBHelper.getLoyaltyCard(this, mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
@@ -307,7 +286,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// If the intent contains any loyalty card fields, override those fields in our current temp card
if (b != null) {
tempLoyaltyCard.updateFromBundle(b, false);
tempLoyaltyCard.updateFromBundle(this, b, false);
}
Log.d(TAG, "Edit activity: id=" + loyaltyCardId
@@ -321,56 +300,28 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
super.onSaveInstanceState(savedInstanceState);
tabs = binding.tabs;
savedInstanceState.putInt(STATE_TAB_INDEX, tabs.getSelectedTabPosition());
savedInstanceState.putParcelable(STATE_TEMP_CARD, tempLoyaltyCard);
savedInstanceState.putBundle(STATE_TEMP_CARD, tempLoyaltyCard.toBundle(this, new ArrayList<>()));
savedInstanceState.putSerializable(STATE_TEMP_CARD_FIELD, tempLoyaltyCardField);
savedInstanceState.putInt(STATE_REQUESTED_IMAGE, mRequestedImage);
Object cardImageFrontObj = cardImageFront.getTag();
if (mFrontImageUnsaved && (cardImageFrontObj instanceof Bitmap) && Utils.saveTempImage(this, (Bitmap) cardImageFrontObj, TEMP_UNSAVED_FRONT_IMAGE_NAME, TEMP_UNSAVED_IMAGE_FORMAT) != null) {
savedInstanceState.putInt(STATE_FRONT_IMAGE_UNSAVED, 1);
} else {
savedInstanceState.putInt(STATE_FRONT_IMAGE_UNSAVED, 0);
}
Object cardImageBackObj = cardImageBack.getTag();
if (mBackImageUnsaved && (cardImageBackObj instanceof Bitmap) && Utils.saveTempImage(this, (Bitmap) cardImageBackObj, TEMP_UNSAVED_BACK_IMAGE_NAME, TEMP_UNSAVED_IMAGE_FORMAT) != null) {
savedInstanceState.putInt(STATE_BACK_IMAGE_UNSAVED, 1);
} else {
savedInstanceState.putInt(STATE_BACK_IMAGE_UNSAVED, 0);
}
Object thumbnailObj = thumbnail.getTag();
if (mIconUnsaved && (thumbnailObj instanceof Bitmap) && Utils.saveTempImage(this, (Bitmap) thumbnailObj, TEMP_UNSAVED_ICON_NAME, TEMP_UNSAVED_IMAGE_FORMAT) != null) {
savedInstanceState.putInt(STATE_ICON_UNSAVED, 1);
} else {
savedInstanceState.putInt(STATE_ICON_UNSAVED, 0);
}
savedInstanceState.putInt(STATE_UPDATE_LOYALTY_CARD, updateLoyaltyCard ? 1 : 0);
savedInstanceState.putInt(STATE_HAS_CHANGED, hasChanged ? 1 : 0);
savedInstanceState.putInt(STATE_FRONT_IMAGE_REMOVED, mFrontImageRemoved ? 1 : 0);
savedInstanceState.putInt(STATE_BACK_IMAGE_REMOVED, mBackImageRemoved ? 1 : 0);
savedInstanceState.putInt(STATE_ICON_REMOVED, mIconRemoved ? 1 : 0);
savedInstanceState.putInt(STATE_OPEN_SET_ICON_MENU, openSetIconMenu ? 1 : 0);
}
@Override
public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
onRestoring = true;
tempLoyaltyCard = savedInstanceState.getParcelable(STATE_TEMP_CARD);
tempLoyaltyCard = new LoyaltyCard();
Bundle tempCardBundle = savedInstanceState.getBundle(STATE_TEMP_CARD);
if (tempCardBundle != null) {
tempLoyaltyCard.updateFromBundle(this, tempCardBundle, true);
}
tempLoyaltyCardField = (LoyaltyCardField) savedInstanceState.getSerializable(STATE_TEMP_CARD_FIELD);
super.onRestoreInstanceState(savedInstanceState);
tabs = binding.tabs;
tabs.selectTab(tabs.getTabAt(savedInstanceState.getInt(STATE_TAB_INDEX)));
mRequestedImage = savedInstanceState.getInt(STATE_REQUESTED_IMAGE);
mFrontImageUnsaved = savedInstanceState.getInt(STATE_FRONT_IMAGE_UNSAVED) == 1;
mBackImageUnsaved = savedInstanceState.getInt(STATE_BACK_IMAGE_UNSAVED) == 1;
mIconUnsaved = savedInstanceState.getInt(STATE_ICON_UNSAVED) == 1;
updateLoyaltyCard = savedInstanceState.getInt(STATE_UPDATE_LOYALTY_CARD) == 1;
hasChanged = savedInstanceState.getInt(STATE_HAS_CHANGED) == 1;
mFrontImageRemoved = savedInstanceState.getInt(STATE_FRONT_IMAGE_REMOVED) == 1;
mBackImageRemoved = savedInstanceState.getInt(STATE_BACK_IMAGE_REMOVED) == 1;
mIconRemoved = savedInstanceState.getInt(STATE_ICON_REMOVED) == 1;
openSetIconMenu = savedInstanceState.getInt(STATE_OPEN_SET_ICON_MENU) == 1;
}
@@ -425,7 +376,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setLoyaltyCardStore(storeName);
generateIcon(storeName);
if (storeName.length() == 0) {
if (storeName.isEmpty()) {
storeFieldEdit.setError(getString(R.string.field_must_not_be_empty));
} else {
storeFieldEdit.setError(null);
@@ -705,7 +656,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
return;
}
tempLoyaltyCard.updateFromBundle(resultIntentBundle, false);
tempLoyaltyCard.updateFromBundle(this, resultIntentBundle, false);
generateBarcode();
hasChanged = true;
}
@@ -727,20 +678,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (bitmap != null) {
if (requestedFrontImage()) {
mFrontImageRemoved = false;
mFrontImageUnsaved = true;
setCardImage(cardImageFront, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
setCardImage(ImageLocationType.front, cardImageFront, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else if (requestedBackImage()) {
mBackImageRemoved = false;
mBackImageUnsaved = true;
setCardImage(cardImageBack, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
setCardImage(ImageLocationType.back, cardImageBack, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_SMALL));
}
Log.d("cropper", "mRequestedImage: " + mRequestedImage);
mCropperFinishedType = mRequestedImage;
hasChanged = true;
} else {
Toast.makeText(LoyaltyCardEditActivity.this, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
@@ -813,26 +757,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
return mRequestedImage == Utils.CARD_IMAGE_FROM_CAMERA_FRONT || mRequestedImage == Utils.CARD_IMAGE_FROM_FILE_FRONT;
}
private boolean croppedFrontImage() {
return mCropperFinishedType == Utils.CARD_IMAGE_FROM_CAMERA_FRONT || mCropperFinishedType == Utils.CARD_IMAGE_FROM_FILE_FRONT;
}
private boolean requestedBackImage() {
return mRequestedImage == Utils.CARD_IMAGE_FROM_CAMERA_BACK || mRequestedImage == Utils.CARD_IMAGE_FROM_FILE_BACK;
}
private boolean croppedBackImage() {
return mCropperFinishedType == Utils.CARD_IMAGE_FROM_CAMERA_BACK || mCropperFinishedType == Utils.CARD_IMAGE_FROM_FILE_BACK;
}
private boolean requestedIcon() {
return mRequestedImage == Utils.CARD_IMAGE_FROM_CAMERA_ICON || mRequestedImage == Utils.CARD_IMAGE_FROM_FILE_ICON;
}
private boolean croppedIcon() {
return mCropperFinishedType == Utils.CARD_IMAGE_FROM_CAMERA_ICON || mCropperFinishedType == Utils.CARD_IMAGE_FROM_FILE_ICON;
}
@SuppressLint("DefaultLocale")
@Override
protected void onResume() {
@@ -842,40 +774,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
onResuming = true;
if (!initDone) {
if (updateLoyaltyCard) {
setTitle(R.string.editCardTitle);
} else {
setTitle(R.string.addCardTitle);
}
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
if (!mFrontImageUnsaved && !croppedFrontImage() && !mFrontImageRemoved) {
setCardImage(cardImageFront, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.front), true);
}
if (!mBackImageUnsaved && !croppedBackImage() && !mBackImageRemoved) {
setCardImage(cardImageBack, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.back), true);
}
if (!mIconUnsaved && !croppedIcon() && !mIconRemoved) {
setThumbnailImage(Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.icon));
}
} else {
setTitle(R.string.addCardTitle);
}
if (mFrontImageUnsaved && !croppedFrontImage()) {
setCardImage(cardImageFront, Utils.loadTempImage(this, TEMP_UNSAVED_FRONT_IMAGE_NAME), true);
}
if (mBackImageUnsaved && !croppedBackImage()) {
setCardImage(cardImageBack, Utils.loadTempImage(this, TEMP_UNSAVED_BACK_IMAGE_NAME), true);
}
if (mIconUnsaved && !croppedIcon()) {
setThumbnailImage(Utils.loadTempImage(this, TEMP_UNSAVED_ICON_NAME));
}
if (updateLoyaltyCard) {
setTitle(R.string.editCardTitle);
} else {
setTitle(R.string.addCardTitle);
}
mCropperFinishedType = 0;
boolean hadChanges = hasChanged;
storeFieldEdit.setText(tempLoyaltyCard.store);
@@ -961,6 +865,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
}
setThumbnailImage(tempLoyaltyCard.imageThumbnail);
setCardImage(ImageLocationType.front, cardImageFront, tempLoyaltyCard.imageFront, true);
setCardImage(ImageLocationType.back, cardImageBack, tempLoyaltyCard.imageBack, true);
// Initialization has finished
if (!initDone) {
initDone = true;
@@ -1000,7 +908,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
protected void setThumbnailImage(@Nullable Bitmap bitmap) {
setCardImage(thumbnail, bitmap, false);
setCardImage(ImageLocationType.icon, thumbnail, bitmap, false);
if (bitmap != null) {
int headerColor = Utils.getHeaderColorFromImage(bitmap, Utils.getHeaderColor(this, tempLoyaltyCard));
@@ -1021,8 +929,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
}
protected void setCardImage(ImageView imageView, Bitmap bitmap, boolean applyFallback) {
imageView.setTag(bitmap);
protected void setCardImage(ImageLocationType imageLocationType, ImageView imageView, Bitmap bitmap, boolean applyFallback) {
if (imageLocationType == ImageLocationType.icon) {
tempLoyaltyCard.setImageThumbnail(bitmap);
} else if (imageLocationType == ImageLocationType.front) {
tempLoyaltyCard.setImageFront(bitmap);
} else if (imageLocationType == ImageLocationType.back) {
tempLoyaltyCard.setImageBack(bitmap);
} else {
throw new IllegalArgumentException("Unknown image type");
}
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
@@ -1279,30 +1195,30 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
class ChooseCardImage implements View.OnClickListener {
@Override
public void onClick(View v) throws NoSuchElementException {
Bitmap currentImage;
ImageLocationType imageLocationType;
ImageView targetView;
if (v.getId() == R.id.frontImageHolder) {
currentImage = tempLoyaltyCard.imageFront;
imageLocationType = ImageLocationType.front;
targetView = cardImageFront;
} else if (v.getId() == R.id.backImageHolder) {
currentImage = tempLoyaltyCard.imageBack;
imageLocationType = ImageLocationType.back;
targetView = cardImageBack;
} else if (v.getId() == R.id.thumbnail) {
currentImage = tempLoyaltyCard.imageThumbnail;
imageLocationType = ImageLocationType.icon;
targetView = thumbnail;
} else {
throw new IllegalArgumentException("Invalid IMAGE ID " + v.getId());
}
LinkedHashMap<String, Callable<Void>> cardOptions = new LinkedHashMap<>();
if (targetView.getTag() != null && v.getId() != R.id.thumbnail) {
if (currentImage != null && v.getId() != R.id.thumbnail) {
cardOptions.put(getString(R.string.removeImage), () -> {
if (targetView == cardImageFront) {
mFrontImageRemoved = true;
mFrontImageUnsaved = false;
} else {
mBackImageRemoved = true;
mBackImageUnsaved = false;
}
setCardImage(targetView, null, true);
setCardImage(imageLocationType, targetView, null, true);
return null;
});
}
@@ -1358,21 +1274,17 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
});
if (v.getId() == R.id.thumbnail) {
if (cardImageFront.getTag() instanceof Bitmap) {
if (tempLoyaltyCard.imageFront != null) {
cardOptions.put(getString(R.string.useFrontImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageFront.getTag(), Utils.BITMAP_SIZE_SMALL));
setThumbnailImage(Utils.resizeBitmap(tempLoyaltyCard.imageFront, Utils.BITMAP_SIZE_SMALL));
return null;
});
}
if (cardImageBack.getTag() instanceof Bitmap) {
if (tempLoyaltyCard.imageBack != null) {
cardOptions.put(getString(R.string.useBackImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageBack.getTag(), Utils.BITMAP_SIZE_SMALL));
setThumbnailImage(Utils.resizeBitmap(tempLoyaltyCard.imageBack, Utils.BITMAP_SIZE_SMALL));
return null;
});
@@ -1423,8 +1335,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setLoyaltyCardHeaderColor(color);
// Unset image if set
mIconRemoved = true;
mIconUnsaved = false;
setThumbnailImage(null);
}
@@ -1602,16 +1512,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
try {
Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front);
Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back);
Utils.saveCardImage(this, (Bitmap) thumbnail.getTag(), loyaltyCardId, ImageLocationType.icon);
Utils.saveCardImage(this, tempLoyaltyCard.imageFront, loyaltyCardId, ImageLocationType.front);
Utils.saveCardImage(this, tempLoyaltyCard.imageBack, loyaltyCardId, ImageLocationType.back);
Utils.saveCardImage(this, tempLoyaltyCard.imageThumbnail, loyaltyCardId, ImageLocationType.icon);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, selectedGroups);
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(this, mDatabase, loyaltyCardId));
if (duplicateFromLoyaltyCardId) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
@@ -1745,7 +1655,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
return;
}
if (thumbnail.getTag() == null) {
if (tempLoyaltyCard.imageThumbnail == null) {
thumbnail.setBackgroundColor(tempLoyaltyCard.headerColor);
LetterBitmap letterBitmap = Utils.generateIcon(this, store, tempLoyaltyCard.headerColor);

View File

@@ -660,7 +660,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
window.setAttributes(attributes);
}
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
loyaltyCard = DBHelper.getLoyaltyCard(this, database, loyaltyCardId);
if (loyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();

View File

@@ -429,7 +429,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
public void onUserChoseParseResult(ParseResult parseResult) {
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = parseResult.toLoyaltyCardBundle();
Bundle bundle = parseResult.toLoyaltyCardBundle(MainActivity.this);
if (group != null) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}

View File

@@ -33,7 +33,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
@Override
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Boolean overlayValue = mInGroupOverlay.get(loyaltyCard.id);
if ((overlayValue != null ? overlayValue : isLoyaltyCardInGroup(loyaltyCard.id))) {
mAnimationItemsIndex.put(inputCursor.getPosition(), true);

View File

@@ -1,5 +1,6 @@
package protect.card_locker
import android.content.Context
import android.os.Bundle
class ParseResult(
@@ -7,9 +8,9 @@ class ParseResult(
val loyaltyCard: LoyaltyCard) {
var note: String? = null
fun toLoyaltyCardBundle(): Bundle {
fun toLoyaltyCardBundle(context: Context): Bundle {
when (parseResultType) {
ParseResultType.FULL -> return loyaltyCard.toBundle(listOf())
ParseResultType.FULL -> return loyaltyCard.toBundle(context, listOf())
ParseResultType.BARCODE_ONLY -> {
val defaultLoyaltyCard = LoyaltyCard()
defaultLoyaltyCard.setBarcodeId(null)
@@ -17,6 +18,7 @@ class ParseResult(
defaultLoyaltyCard.setCardId(loyaltyCard.cardId)
return defaultLoyaltyCard.toBundle(
context,
listOf(
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID,
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE,

View File

@@ -125,7 +125,10 @@ class PkpassParser(context: Context, uri: Uri?) {
starStatus,
lastUsed,
zoomLevel,
archiveStatus
archiveStatus,
image,
null,
null
)
}

View File

@@ -299,7 +299,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
private void returnResult(ParseResult parseResult) {
Intent result = new Intent();
Bundle bundle = parseResult.toLoyaltyCardBundle();
Bundle bundle = parseResult.toLoyaltyCardBundle(ScanActivity.this);
if (addGroup != null) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
}

View File

@@ -86,7 +86,7 @@ class ShortcutHelper {
for (int index = 0; index < list.size(); index++) {
ShortcutInfoCompat prevShortcut = list.get(index);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(database, Integer.parseInt(prevShortcut.getId()));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, Integer.parseInt(prevShortcut.getId()));
// skip outdated cards that no longer exist
if (loyaltyCard != null) {

View File

@@ -176,7 +176,6 @@ public class Utils {
}
static public List<ParseResult> retrieveBarcodesFromPkPass(Context context, Uri uri) {
// FIXME: Also return image
Log.i(TAG, "Received Pkpass file with possible barcode");
if (uri == null) {
Log.e(TAG, "Pkpass did not contain any data");
@@ -836,7 +835,7 @@ public class Utils {
}
}
public static Bitmap loadImage(String path) {
public static @Nullable Bitmap loadImage(String path) {
try {
return BitmapFactory.decodeStream(new FileInputStream(path));
} catch (IOException e) {
@@ -845,7 +844,7 @@ public class Utils {
}
}
public static Bitmap loadTempImage(Context context, String name) {
public static @Nullable Bitmap loadTempImage(Context context, String name) {
return loadImage(context.getCacheDir() + "/" + name);
}

View File

@@ -49,7 +49,7 @@ public class CatimaExporter implements Exporter {
// Generate CSV
ByteArrayOutputStream catimaOutputStream = new ByteArrayOutputStream();
OutputStreamWriter catimaOutputStreamWriter = new OutputStreamWriter(catimaOutputStream, StandardCharsets.UTF_8);
writeCSV(database, catimaOutputStreamWriter);
writeCSV(context, database, catimaOutputStreamWriter);
// Add CSV to zip file
ZipParameters csvZipParameters = createZipParameters("catima.csv", password);
@@ -64,12 +64,12 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
// For each card
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
// For each image
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
// If it exists, add to the .zip file
Bitmap image = Utils.retrieveCardImage(context, card.id, imageLocationType);
Bitmap image = card.getImageForImageLocationType(imageLocationType);
if (image != null) {
ZipParameters imageZipParameters = createZipParameters(Utils.getCardImageFileName(card.id, imageLocationType), password);
zipOutputStream.putNextEntry(imageZipParameters);
@@ -95,7 +95,7 @@ public class CatimaExporter implements Exporter {
return zipParameters;
}
private void writeCSV(SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
private void writeCSV(Context context, SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
CSVPrinter printer = new CSVPrinter(output, CSVFormat.RFC4180);
// Print the version
@@ -142,7 +142,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
printer.printRecord(card.id,
card.store,
@@ -176,7 +176,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor2.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor2);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor2);
for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) {
printer.printRecord(card.id, group._id);

View File

@@ -124,7 +124,7 @@ public class CatimaImporter implements Importer {
Set<String> existingImages = DBHelper.imageFiles(context, database);
for (LoyaltyCard card : data.cards) {
LoyaltyCard existing = DBHelper.getLoyaltyCard(database, card.id);
LoyaltyCard existing = DBHelper.getLoyaltyCard(context, database, card.id);
if (existing == null) {
DBHelper.insertLoyaltyCard(database, card.id, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType,
card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus);
@@ -490,7 +490,26 @@ public class CatimaImporter implements Importer {
// We catch this exception so we can still import old backups
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
archiveStatus,
null,
null,
null
);
}
/**

View File

@@ -149,7 +149,26 @@ public class FidmeImporter implements Importer {
// TODO: Front and back image
// use -1 for the ID, it will be ignored when inserting the card into the DB
return new LoyaltyCard(-1, store, note, null, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, Utils.getUnixTime(), DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
-1,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
cardId,
null,
barcodeType,
headerColor,
starStatus,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
archiveStatus,
null,
null,
null
);
}
public void saveAndDeduplicate(SQLiteDatabase database, final ImportedData data) {

View File

@@ -354,7 +354,26 @@ public class StocardImporter implements Importer {
long lastUsed = record.lastUsed != null ? record.lastUsed : Utils.getUnixTime();
LoyaltyCard card = new LoyaltyCard(tempID, store, note, null, null, BigDecimal.valueOf(0), null, record.cardId, null, barcodeType, headerColor, 0, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, 0);
LoyaltyCard card = new LoyaltyCard(
tempID,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
record.cardId,
null,
barcodeType,
headerColor,
0,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
0,
null,
null,
null
);
importedData.cards.add(card);
Map<ImageLocationType, Bitmap> images = new HashMap<>();

View File

@@ -151,7 +151,26 @@ public class VoucherVaultImporter implements Importer {
}
// use -1 for the ID, it will be ignored when inserting the card into the DB
importedData.cards.add(new LoyaltyCard(-1, store, "", null, expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime(), DBHelper.DEFAULT_ZOOM_LEVEL, 0));
importedData.cards.add(new LoyaltyCard(
-1,
store,
"",
null,
expiry,
balance,
balanceType,
cardId,
null,
barcodeType,
headerColor,
0,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
0,
null,
null,
null
));
}
return importedData;

View File

@@ -46,7 +46,7 @@ public class DatabaseTest {
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1);
assertNotNull(loyaltyCard);
assertEquals("store", loyaltyCard.store);
assertEquals("note", loyaltyCard.note);
@@ -64,7 +64,7 @@ public class DatabaseTest {
result = DBHelper.deleteLoyaltyCard(mDatabase, mActivity, 1);
assertTrue(result);
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
assertNull(DBHelper.getLoyaltyCard(mDatabase, 1));
assertNull(DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1));
}
@Test
@@ -78,7 +78,7 @@ public class DatabaseTest {
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1);
assertNotNull(loyaltyCard);
assertEquals("store1", loyaltyCard.store);
assertEquals("note1", loyaltyCard.note);
@@ -105,7 +105,7 @@ public class DatabaseTest {
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1);
assertNotNull(loyaltyCard);
assertEquals("store", loyaltyCard.store);
assertEquals("note", loyaltyCard.note);
@@ -138,7 +138,7 @@ public class DatabaseTest {
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1);
assertNotNull(loyaltyCard);
assertEquals("", loyaltyCard.store);
assertEquals("", loyaltyCard.note);
@@ -480,7 +480,7 @@ public class DatabaseTest {
dbHelper.onUpgrade(database, DBHelper.ORIGINAL_DATABASE_VERSION, DBHelper.DATABASE_VERSION);
// Determine that the entries are queryable and the fields are correct
LoyaltyCard card = DBHelper.getLoyaltyCard(database, newCardId);
LoyaltyCard card = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), database, newCardId);
assertEquals("store", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
@@ -496,7 +496,7 @@ public class DatabaseTest {
assertEquals(100, card.zoomLevel);
// Determine that the entries are queryable and the fields are correct
LoyaltyCard card2 = DBHelper.getLoyaltyCard(database, newCardId2);
LoyaltyCard card2 = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), database, newCardId2);
assertEquals("store", card2.store);
assertEquals("", card2.note);
assertEquals(null, card2.validFrom);
@@ -523,7 +523,7 @@ public class DatabaseTest {
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(mActivity.getApplicationContext(), mDatabase, 1);
assertNotNull(loyaltyCard);
assertEquals("store", loyaltyCard.store);
assertEquals("note", loyaltyCard.note);

View File

@@ -94,7 +94,7 @@ public class ImportExportTest {
boolean result = (id != -1);
assertTrue(result);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, (int) id);
assertEquals("No Expiry", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
@@ -111,7 +111,7 @@ public class ImportExportTest {
result = (id != -1);
assertTrue(result);
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, (int) id);
assertEquals("Past", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
@@ -128,7 +128,7 @@ public class ImportExportTest {
result = (id != -1);
assertTrue(result);
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, (int) id);
assertEquals("Today", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
@@ -148,7 +148,7 @@ public class ImportExportTest {
result = (id != -1);
assertTrue(result);
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, (int) id);
assertEquals("Future", card.store);
assertEquals("", card.note);
assertEquals(null, card.validFrom);
@@ -174,7 +174,7 @@ public class ImportExportTest {
int index = 1;
while (cursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);
@@ -200,7 +200,7 @@ public class ImportExportTest {
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
while (cursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
// ID goes up for duplicates (b/c the cursor orders by store), down for originals
int index = card.id > numCards ? card.id - numCards : numCards - card.id + 1;
@@ -236,7 +236,7 @@ public class ImportExportTest {
while (index < 10) {
cursor.moveToNext();
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);
@@ -258,7 +258,7 @@ public class ImportExportTest {
index = 1;
while (cursor.moveToNext() && index < 5) {
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);
@@ -649,7 +649,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -675,7 +675,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -713,7 +713,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -739,7 +739,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -765,7 +765,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -798,7 +798,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("store", card.store);
assertEquals("note", card.note);
@@ -831,7 +831,7 @@ public class ImportExportTest {
// Create card 1
int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1601510400), new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null,0);
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId));
DBHelper.insertGroup(mDatabase, "One");
List<Group> groups = Arrays.asList(DBHelper.getGroup(mDatabase, "One"));
DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, groups);
@@ -845,7 +845,7 @@ public class ImportExportTest {
// Create card 2
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, 2, 1, null,0);
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId));
// Export everything
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
@@ -863,7 +863,7 @@ public class ImportExportTest {
for (Integer loyaltyCardID : loyaltyCardHashMap.keySet()) {
LoyaltyCard loyaltyCard = loyaltyCardHashMap.get(loyaltyCardID);
LoyaltyCard dbLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardID);
LoyaltyCard dbLoyaltyCard = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardID);
assertEquals(loyaltyCard.id, dbLoyaltyCard.id);
assertEquals(loyaltyCard.store, dbLoyaltyCard.store);
@@ -950,7 +950,7 @@ public class ImportExportTest {
assertEquals(Arrays.asList(8, 6), DBHelper.getGroupCardIds(mDatabase, "Fashion"));
// Check all cards
LoyaltyCard card1 = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card1 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("Card 1", card1.store);
assertEquals("Note 1", card1.note);
@@ -967,7 +967,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 = DBHelper.getLoyaltyCard(mDatabase, 8);
LoyaltyCard card8 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 8);
assertEquals("Clothes Store", card8.store);
assertEquals("Note about store", card8.note);
@@ -984,7 +984,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 = DBHelper.getLoyaltyCard(mDatabase, 2);
LoyaltyCard card2 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
assertEquals("Department Store", card2.store);
assertEquals("", card2.note);
@@ -1001,7 +1001,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 = DBHelper.getLoyaltyCard(mDatabase, 3);
LoyaltyCard card3 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
assertEquals("Grocery Store", card3.store);
assertEquals("Multiline note about grocery store\n\nwith blank line", card3.note);
@@ -1018,7 +1018,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 = DBHelper.getLoyaltyCard(mDatabase, 4);
LoyaltyCard card4 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 4);
assertEquals("Pharmacy", card4.store);
assertEquals("", card4.note);
@@ -1035,7 +1035,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 = DBHelper.getLoyaltyCard(mDatabase, 5);
LoyaltyCard card5 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 5);
assertEquals("Restaurant", card5.store);
assertEquals("Note about restaurant here", card5.note);
@@ -1052,7 +1052,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 = DBHelper.getLoyaltyCard(mDatabase, 6);
LoyaltyCard card6 = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 6);
assertEquals("Shoe Store", card6.store);
assertEquals("", card6.note);
@@ -1081,7 +1081,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("Hema", card.store);
assertEquals("2021-03-24 18:35:08 UTC", card.note);
@@ -1094,7 +1094,7 @@ public class ImportExportTest {
assertEquals(null, card.barcodeType);
assertEquals(0, card.starStatus);
card = DBHelper.getLoyaltyCard(mDatabase, 2);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
assertEquals("test", card.store);
assertEquals("Test\n2021-03-24 18:34:19 UTC", card.note);
@@ -1107,7 +1107,7 @@ public class ImportExportTest {
assertEquals(null, card.barcodeType);
assertEquals(0, card.starStatus);
card = DBHelper.getLoyaltyCard(mDatabase, 3);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
assertEquals("Albert Heijn", card.store);
assertEquals("Bonus Kaart\n2021-03-24 16:47:47 UTC\nFirst Last", card.note);
@@ -1138,7 +1138,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("Air Miles", card.store);
assertEquals("szjsbs", card.note);
@@ -1156,7 +1156,7 @@ public class ImportExportTest {
assertTrue(BitmapFactory.decodeStream(getClass().getResourceAsStream("stocard-back.jpg")).sameAs(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back)));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 2);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
assertEquals("GAMMA", card.store);
assertEquals("", card.note);
@@ -1174,7 +1174,7 @@ public class ImportExportTest {
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 2, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 3);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
assertEquals("", card.store);
assertEquals("", card.note);
@@ -1205,7 +1205,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("Foo", card.store);
assertEquals("", card.note);
@@ -1223,7 +1223,7 @@ public class ImportExportTest {
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 1, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 2);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
assertEquals("Air Miles", card.store);
assertEquals("szjsbs\nMiles", card.note);
@@ -1241,7 +1241,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 = DBHelper.getLoyaltyCard(mDatabase, 3);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
assertEquals("GAMMA", card.store);
assertEquals("", card.note);
@@ -1259,7 +1259,7 @@ public class ImportExportTest {
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 3, ImageLocationType.back));
assertNull(Utils.retrieveCardImage(activity.getApplicationContext(), 3, ImageLocationType.icon));
card = DBHelper.getLoyaltyCard(mDatabase, 4);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 4);
assertEquals("", card.store);
assertEquals("", card.note);
@@ -1289,7 +1289,7 @@ public class ImportExportTest {
assertEquals(ImportExportResultType.Success, result.resultType());
assertEquals(2, DBHelper.getLoyaltyCardCount(mDatabase));
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
assertEquals("Clothes Store", card.store);
assertEquals("", card.note);
@@ -1303,7 +1303,7 @@ public class ImportExportTest {
assertEquals(Color.GRAY, (long) card.headerColor);
assertEquals(0, card.starStatus);
card = DBHelper.getLoyaltyCard(mDatabase, 2);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
assertEquals("Department Store", card.store);
assertEquals("", card.note);

View File

@@ -25,12 +25,13 @@ import java.util.Date;
@RunWith(RobolectricTestRunner.class)
public class ImportURITest {
private Activity activity;
private ImportURIHelper importURIHelper;
private SQLiteDatabase mDatabase;
@Before
public void setUp() {
Activity activity = Robolectric.setupActivity(MainActivity.class);
activity = Robolectric.setupActivity(MainActivity.class);
importURIHelper = new ImportURIHelper(activity);
mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase();
}
@@ -43,7 +44,7 @@ public class ImportURITest {
DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null,0);
// Get card
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
// Card to URI
Uri cardUri = importURIHelper.toUri(card);
@@ -73,7 +74,7 @@ public class ImportURITest {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0);
// Get card
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
// Card to URI
Uri cardUri = importURIHelper.toUri(card);
@@ -103,7 +104,7 @@ public class ImportURITest {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0);
// Get card
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
// Card to URI, with a trailing slash
Uri cardUri = importURIHelper.toUri(card).buildUpon().path("/share/").build();

View File

@@ -97,7 +97,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapterEmptyNote() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();
@@ -112,7 +112,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapterWithNote() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();
@@ -137,7 +137,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(4, cursor.getCount());
assertTrue(cursor.moveToFirst());
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(cursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
assertEquals("storeD", loyaltyCard.store);
View view = createView(cursor);
ConstraintLayout star = view.findViewById(R.id.star);
@@ -146,7 +146,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.GONE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.fromCursor(cursor);
loyaltyCard = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
assertEquals("storeC", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);
@@ -155,7 +155,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.GONE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.fromCursor(cursor);
loyaltyCard = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
assertEquals("storeB", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);
@@ -164,7 +164,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.VISIBLE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.fromCursor(cursor);
loyaltyCard = LoyaltyCard.fromCursor(activity.getApplicationContext(), cursor);
assertEquals("storeA", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);
@@ -178,7 +178,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter0Points() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();
@@ -193,7 +193,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter0EUR() {
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();
@@ -208,7 +208,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter100Points() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();
@@ -223,7 +223,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter10USD() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
cursor.moveToFirst();

View File

@@ -167,7 +167,7 @@ public class LoyaltyCardViewActivityTest {
assertEquals(1, DBHelper.getLoyaltyCardCount(database));
LoyaltyCard card = DBHelper.getLoyaltyCard(database, 1);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), database, 1);
assertEquals(store, card.store);
assertEquals(note, card.note);
assertEquals(balance, card.balance);
@@ -216,7 +216,7 @@ public class LoyaltyCardViewActivityTest {
* Initiate and complete a barcode capture, either in success
* or in failure
*/
private void captureBarcodeWithResult(final Activity activity, final boolean success) throws IOException {
private void captureBarcodeWithResult(final Activity activity, final boolean success) {
// Start image capture
final Button startButton = activity.findViewById(R.id.enterButton);
startButton.performClick();
@@ -238,7 +238,7 @@ public class LoyaltyCardViewActivityTest {
loyaltyCard.setCardId(BARCODE_DATA);
ParseResult parseResult = new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard);
resultIntent.putExtras(parseResult.toLoyaltyCardBundle());
resultIntent.putExtras(parseResult.toLoyaltyCardBundle(activity));
// Respond to image capture, success
shadowOf(activity).receiveResult(
@@ -251,7 +251,7 @@ public class LoyaltyCardViewActivityTest {
* Initiate and complete a barcode selection, either in success
* or in failure
*/
private void selectBarcodeWithResult(final Activity activity, final String barcodeData, final String barcodeType, final boolean success) throws IOException {
private void selectBarcodeWithResult(final Activity activity, final String barcodeData, final String barcodeType, final boolean success) {
// Start barcode selector
final Button startButton = activity.findViewById(R.id.enterButton);
startButton.performClick();
@@ -278,7 +278,7 @@ public class LoyaltyCardViewActivityTest {
loyaltyCard.setCardId(barcodeData);
ParseResult parseResult = new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard);
resultIntent.putExtras(parseResult.toLoyaltyCardBundle());
resultIntent.putExtras(parseResult.toLoyaltyCardBundle(activity));
// Respond to barcode selection, success
shadowOf(activity).receiveResult(
@@ -302,8 +302,10 @@ public class LoyaltyCardViewActivityTest {
} else if (fieldType == FieldTypeView.ImageView) {
ImageView imageView = (ImageView) view;
Bitmap image = null;
if (imageView.getTag() != null) {
try {
image = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} catch (ClassCastException e) {
// This is probably a VectorDrawable, the placeholder image. Aka: No image.
}
assertEquals(contents, image);
} else {
@@ -419,8 +421,8 @@ public class LoyaltyCardViewActivityTest {
cardIdField.setText("12345678");
barcodeField.setText("87654321");
barcodeTypeField.setText(CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName());
activity.setCardImage(frontImageView, frontBitmap, true);
activity.setCardImage(backImageView, backBitmap, true);
activity.setCardImage(ImageLocationType.front, frontImageView, frontBitmap, true);
activity.setCardImage(ImageLocationType.back, backImageView, backBitmap, true);
shadowOf(getMainLooper()).idle();