mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2026-05-10 09:03:02 -04:00
feat: split complex loyaltyCardViewActivity (#3072)
This commit is contained in:
@@ -98,7 +98,7 @@
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
<activity
|
||||
android:name=".LoyaltyCardViewActivity"
|
||||
android:name=".cardview.LoyaltyCardViewActivity"
|
||||
android:exported="true"
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
<activity
|
||||
|
||||
@@ -57,7 +57,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
private final boolean showFallback;
|
||||
private final BarcodeImageWriterResultCallback callback;
|
||||
|
||||
BarcodeImageWriterTask(
|
||||
public BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, @NonNull Charset barcodeEncoding, TextView textView,
|
||||
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding, boolean isFullscreen
|
||||
|
||||
@@ -22,6 +22,8 @@ import java.util.List;
|
||||
import java.util.concurrent.Flow;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import protect.card_locker.cardview.LoyaltyCardViewActivity;
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
public class CardsOnPowerScreenService extends ControlsProviderService {
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import androidx.core.widget.RemoteViewsCompat
|
||||
import protect.card_locker.DBHelper.LoyaltyCardArchiveFilter
|
||||
import protect.card_locker.cardview.LoyaltyCardViewActivity
|
||||
|
||||
class ListWidget : AppWidgetProvider() {
|
||||
fun updateAll(context: Context) {
|
||||
@@ -129,4 +130,4 @@ class ListWidget : AppWidgetProvider() {
|
||||
|
||||
return remoteViews
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -719,6 +719,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
if (mDatabase != null && mDatabase.isOpen()) {
|
||||
mDatabase.close();
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void selectTab(int index) {
|
||||
binding.tabs.selectTab(binding.tabs.getTabAt(index));
|
||||
viewModel.setTabIndex(index);
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
|
||||
import protect.card_locker.DBHelper.LoyaltyCardOrder
|
||||
import protect.card_locker.DBHelper.LoyaltyCardOrderDirection
|
||||
import protect.card_locker.LoyaltyCardCursorAdapter.CardAdapterListener
|
||||
import protect.card_locker.cardview.LoyaltyCardViewActivity
|
||||
import protect.card_locker.databinding.ContentMainBinding
|
||||
import protect.card_locker.databinding.MainActivityBinding
|
||||
import protect.card_locker.databinding.SortingOptionBinding
|
||||
|
||||
@@ -15,11 +15,11 @@ import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
|
||||
class ShortcutHelper {
|
||||
import protect.card_locker.cardview.LoyaltyCardViewActivity;
|
||||
|
||||
public class ShortcutHelper {
|
||||
/**
|
||||
* This variable controls the maximum number of shortcuts available.
|
||||
* It is made public only to make testing easier and should not be
|
||||
@@ -43,33 +43,36 @@ class ShortcutHelper {
|
||||
* based on the lastUsed field. Archived cards are excluded from the shortcuts
|
||||
* list. The list keeps at most maxShortcuts number of elements.
|
||||
*/
|
||||
static void updateShortcuts(Context context) {
|
||||
public static void updateShortcuts(Context context) {
|
||||
if (maxShortcuts == -1) {
|
||||
maxShortcuts = ShortcutManagerCompat.getMaxShortcutCountPerActivity(context);
|
||||
}
|
||||
LinkedList<ShortcutInfoCompat> finalList = new LinkedList<>();
|
||||
SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
|
||||
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
|
||||
DBHelper dbHelper = new DBHelper(context);
|
||||
SQLiteDatabase database = dbHelper.getReadableDatabase();
|
||||
try (Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
|
||||
database,
|
||||
"",
|
||||
null,
|
||||
DBHelper.LoyaltyCardOrder.LastUsed,
|
||||
DBHelper.LoyaltyCardOrderDirection.Ascending,
|
||||
DBHelper.LoyaltyCardArchiveFilter.Unarchived
|
||||
);
|
||||
)) {
|
||||
int rank = 0;
|
||||
|
||||
int rank = 0;
|
||||
while (rank < maxShortcuts && loyaltyCardCursor.moveToNext()) {
|
||||
int id = loyaltyCardCursor.getInt(loyaltyCardCursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
|
||||
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, id);
|
||||
|
||||
while (rank < maxShortcuts && loyaltyCardCursor.moveToNext()) {
|
||||
int id = loyaltyCardCursor.getInt(loyaltyCardCursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
|
||||
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, id);
|
||||
ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard)
|
||||
.setRank(rank)
|
||||
.build();
|
||||
|
||||
ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard)
|
||||
.setRank(rank)
|
||||
.build();
|
||||
|
||||
finalList.addLast(updatedShortcut);
|
||||
rank++;
|
||||
finalList.addLast(updatedShortcut);
|
||||
rank++;
|
||||
}
|
||||
} finally {
|
||||
dbHelper.close();
|
||||
}
|
||||
|
||||
ShortcutManagerCompat.setDynamicShortcuts(context, finalList);
|
||||
@@ -110,4 +113,4 @@ class ShortcutHelper {
|
||||
.setIntent(intent)
|
||||
.setIcon(icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package protect.card_locker.cardview;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
final class LoyaltyCardImageNavigator {
|
||||
private final List<LoyaltyCardImageType> imageTypes;
|
||||
private int currentIndex;
|
||||
|
||||
LoyaltyCardImageNavigator(List<LoyaltyCardImageType> imageTypes, int currentIndex) {
|
||||
this.imageTypes = new ArrayList<>(imageTypes);
|
||||
this.currentIndex = clampIndex(currentIndex);
|
||||
}
|
||||
|
||||
LoyaltyCardImageType getCurrent() {
|
||||
if (isEmpty()) {
|
||||
return LoyaltyCardImageType.NONE;
|
||||
}
|
||||
return imageTypes.get(currentIndex);
|
||||
}
|
||||
|
||||
boolean isEmpty() {
|
||||
return imageTypes.isEmpty();
|
||||
}
|
||||
|
||||
int size() {
|
||||
return imageTypes.size();
|
||||
}
|
||||
|
||||
boolean remove(LoyaltyCardImageType type) {
|
||||
int removedIndex = imageTypes.indexOf(type);
|
||||
if (removedIndex == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
imageTypes.remove(removedIndex);
|
||||
currentIndex = clampIndex(currentIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean canGoPrevious() {
|
||||
return currentIndex > 0;
|
||||
}
|
||||
|
||||
boolean canGoNext() {
|
||||
return currentIndex < imageTypes.size() - 1;
|
||||
}
|
||||
|
||||
boolean movePrevious() {
|
||||
if (!canGoPrevious()) {
|
||||
return false;
|
||||
}
|
||||
currentIndex--;
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean moveNext(boolean overflow) {
|
||||
if (isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
if (canGoNext()) {
|
||||
currentIndex++;
|
||||
return true;
|
||||
}
|
||||
if (overflow) {
|
||||
currentIndex = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int getCurrentIndex() {
|
||||
return currentIndex;
|
||||
}
|
||||
|
||||
LoyaltyCardImageType peekNext(boolean overflow) {
|
||||
if (isEmpty()) {
|
||||
return LoyaltyCardImageType.NONE;
|
||||
}
|
||||
|
||||
if (canGoNext()) {
|
||||
return imageTypes.get(currentIndex + 1);
|
||||
}
|
||||
|
||||
return overflow ? imageTypes.get(0) : getCurrent();
|
||||
}
|
||||
|
||||
private int clampIndex(int index) {
|
||||
if (imageTypes.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Math.max(0, Math.min(index, imageTypes.size() - 1));
|
||||
}
|
||||
}
|
||||
|
||||
enum LoyaltyCardImageType {
|
||||
NONE,
|
||||
ICON,
|
||||
BARCODE,
|
||||
IMAGE_FRONT,
|
||||
IMAGE_BACK
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
package protect.card_locker.cardview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.card.MaterialCardView;
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import protect.card_locker.*;
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
|
||||
final class LoyaltyCardMainImageRenderer {
|
||||
private final Context context;
|
||||
private final TaskHandler tasks = new TaskHandler();
|
||||
private final BarcodeImageWriterResultCallback barcodeCallback;
|
||||
|
||||
LoyaltyCardMainImageRenderer(
|
||||
Context context,
|
||||
BarcodeImageWriterResultCallback barcodeCallback
|
||||
) {
|
||||
this.context = context;
|
||||
this.barcodeCallback = barcodeCallback;
|
||||
}
|
||||
|
||||
void renderCurrent(
|
||||
LoyaltyCardImageType imageType,
|
||||
Bitmap frontImageBitmap,
|
||||
Bitmap backImageBitmap,
|
||||
CatimaBarcode format,
|
||||
Charset barcodeEncoding,
|
||||
String cardIdString,
|
||||
String barcodeIdString,
|
||||
ImageView barcodeRenderTarget,
|
||||
TextView mainImageDescription,
|
||||
MaterialCardView mainCardView,
|
||||
boolean isFullscreen,
|
||||
boolean waitForResize
|
||||
) {
|
||||
if (imageType == LoyaltyCardImageType.NONE) {
|
||||
// With no renderable media left, show the raw card ID instead of an empty card area.
|
||||
barcodeRenderTarget.setVisibility(View.GONE);
|
||||
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
|
||||
mainImageDescription.setTextColor(
|
||||
MaterialColors.getColor(
|
||||
mainImageDescription,
|
||||
com.google.android.material.R.attr.colorOnSurfaceVariant
|
||||
)
|
||||
);
|
||||
mainImageDescription.setText(cardIdString);
|
||||
return;
|
||||
}
|
||||
|
||||
if (imageType == LoyaltyCardImageType.BARCODE) {
|
||||
barcodeRenderTarget.setBackgroundColor(Color.WHITE);
|
||||
mainCardView.setCardBackgroundColor(Color.WHITE);
|
||||
mainImageDescription.setTextColor(context.getResources().getColor(R.color.md_theme_light_onSurfaceVariant));
|
||||
|
||||
if (waitForResize) {
|
||||
redrawBarcodeAfterResize(
|
||||
barcodeRenderTarget,
|
||||
barcodeIdString,
|
||||
cardIdString,
|
||||
format,
|
||||
barcodeEncoding,
|
||||
!isFullscreen,
|
||||
isFullscreen
|
||||
);
|
||||
} else {
|
||||
drawBarcode(
|
||||
barcodeRenderTarget,
|
||||
barcodeIdString,
|
||||
cardIdString,
|
||||
format,
|
||||
barcodeEncoding,
|
||||
!isFullscreen,
|
||||
isFullscreen
|
||||
);
|
||||
}
|
||||
|
||||
mainImageDescription.setText(cardIdString);
|
||||
barcodeRenderTarget.setContentDescription(
|
||||
context.getString(R.string.barcodeImageDescriptionWithType, format.prettyName())
|
||||
);
|
||||
} else if (imageType == LoyaltyCardImageType.IMAGE_FRONT) {
|
||||
barcodeRenderTarget.setImageBitmap(frontImageBitmap);
|
||||
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
|
||||
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
|
||||
mainImageDescription.setTextColor(
|
||||
MaterialColors.getColor(
|
||||
mainImageDescription,
|
||||
com.google.android.material.R.attr.colorOnSurfaceVariant
|
||||
)
|
||||
);
|
||||
mainImageDescription.setText(context.getString(R.string.frontImageDescription));
|
||||
barcodeRenderTarget.setContentDescription(context.getString(R.string.frontImageDescription));
|
||||
} else if (imageType == LoyaltyCardImageType.IMAGE_BACK) {
|
||||
barcodeRenderTarget.setImageBitmap(backImageBitmap);
|
||||
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
|
||||
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
|
||||
mainImageDescription.setTextColor(
|
||||
MaterialColors.getColor(
|
||||
mainImageDescription,
|
||||
com.google.android.material.R.attr.colorOnSurfaceVariant
|
||||
)
|
||||
);
|
||||
mainImageDescription.setText(context.getString(R.string.backImageDescription));
|
||||
barcodeRenderTarget.setContentDescription(context.getString(R.string.backImageDescription));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown image type: " + imageType);
|
||||
}
|
||||
|
||||
barcodeRenderTarget.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void redrawBarcodeAfterResize(
|
||||
ImageView barcodeRenderTarget,
|
||||
String barcodeIdString,
|
||||
String cardIdString,
|
||||
CatimaBarcode format,
|
||||
Charset barcodeEncoding,
|
||||
boolean addPadding,
|
||||
boolean isFullscreen
|
||||
) {
|
||||
if (format == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Barcode dimensions depend on the final ImageView size, so wait for layout before rendering.
|
||||
barcodeRenderTarget.getViewTreeObserver().addOnGlobalLayoutListener(
|
||||
new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
barcodeRenderTarget.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
drawBarcode(
|
||||
barcodeRenderTarget,
|
||||
barcodeIdString,
|
||||
cardIdString,
|
||||
format,
|
||||
barcodeEncoding,
|
||||
addPadding,
|
||||
isFullscreen
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void drawBarcode(
|
||||
ImageView barcodeRenderTarget,
|
||||
String barcodeIdString,
|
||||
String cardIdString,
|
||||
CatimaBarcode format,
|
||||
Charset barcodeEncoding,
|
||||
boolean addPadding,
|
||||
boolean isFullscreen
|
||||
) {
|
||||
// Barcodes are regenerated eagerly because zoom/fullscreen changes affect the output bitmap.
|
||||
tasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
|
||||
if (format == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(
|
||||
context.getApplicationContext(),
|
||||
barcodeRenderTarget,
|
||||
barcodeIdString != null ? barcodeIdString : cardIdString,
|
||||
format,
|
||||
barcodeEncoding,
|
||||
null,
|
||||
false,
|
||||
barcodeCallback,
|
||||
addPadding,
|
||||
isFullscreen
|
||||
);
|
||||
tasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,246 @@
|
||||
package protect.card_locker.cardview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.text.InputType;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.DigitsKeyListener;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.util.Linkify;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import protect.card_locker.*;
|
||||
|
||||
final class LoyaltyCardViewDialogs {
|
||||
interface BalanceUpdateListener {
|
||||
void onBalanceUpdated(BigDecimal newBalance);
|
||||
}
|
||||
|
||||
void showInfoDialog(Context context, LoyaltyCard loyaltyCard, List<Group> loyaltyCardGroups) {
|
||||
AlertDialog.Builder infoDialog = new MaterialAlertDialogBuilder(context);
|
||||
|
||||
int dialogContentPadding = context.getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
|
||||
infoDialog.setTitle(loyaltyCard.store);
|
||||
|
||||
TextView infoTextview = new TextView(context);
|
||||
infoTextview.setPadding(
|
||||
dialogContentPadding,
|
||||
dialogContentPadding / 2,
|
||||
dialogContentPadding,
|
||||
0
|
||||
);
|
||||
infoTextview.setAutoLinkMask(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
|
||||
infoTextview.setTextIsSelectable(true);
|
||||
|
||||
SpannableStringBuilder infoText = new SpannableStringBuilder();
|
||||
if (!loyaltyCard.note.isEmpty()) {
|
||||
infoText.append(loyaltyCard.note);
|
||||
}
|
||||
|
||||
if (!loyaltyCardGroups.isEmpty()) {
|
||||
List<String> groupNames = new ArrayList<>();
|
||||
for (Group group : loyaltyCardGroups) {
|
||||
groupNames.add(group._id);
|
||||
}
|
||||
|
||||
padSpannableString(infoText);
|
||||
infoText.append(context.getString(R.string.groupsList, TextUtils.join(", ", groupNames)));
|
||||
}
|
||||
|
||||
if (hasBalance(loyaltyCard)) {
|
||||
padSpannableString(infoText);
|
||||
infoText.append(context.getString(
|
||||
R.string.balanceSentence,
|
||||
Utils.formatBalance(context, loyaltyCard.balance, loyaltyCard.balanceType)
|
||||
));
|
||||
}
|
||||
|
||||
appendDateInfo(
|
||||
context,
|
||||
infoText,
|
||||
loyaltyCard.validFrom,
|
||||
Utils::isNotYetValid,
|
||||
R.string.validFromSentence,
|
||||
R.string.validFromSentence
|
||||
);
|
||||
appendDateInfo(
|
||||
context,
|
||||
infoText,
|
||||
loyaltyCard.expiry,
|
||||
Utils::hasExpired,
|
||||
R.string.expiryStateSentenceExpired,
|
||||
R.string.expiryStateSentence
|
||||
);
|
||||
|
||||
infoTextview.setText(infoText);
|
||||
infoDialog.setView(infoTextview);
|
||||
infoDialog.setPositiveButton(R.string.ok, (dialogInterface, i) -> dialogInterface.dismiss());
|
||||
infoDialog.create().show();
|
||||
}
|
||||
|
||||
void showBalanceUpdateDialog(
|
||||
Context context,
|
||||
LoyaltyCard loyaltyCard,
|
||||
BalanceUpdateListener balanceUpdateListener
|
||||
) {
|
||||
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
|
||||
builder.setTitle(R.string.updateBalanceTitle);
|
||||
|
||||
FrameLayout container = new FrameLayout(context);
|
||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
);
|
||||
int contentPadding = context.getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
|
||||
params.leftMargin = contentPadding;
|
||||
params.topMargin = contentPadding / 2;
|
||||
params.rightMargin = contentPadding;
|
||||
|
||||
LinearLayout layout = new LinearLayout(context);
|
||||
layout.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
TextView currentTextview = new TextView(context);
|
||||
currentTextview.setText(context.getString(
|
||||
R.string.currentBalanceSentence,
|
||||
Utils.formatBalance(context, loyaltyCard.balance, loyaltyCard.balanceType)
|
||||
));
|
||||
layout.addView(currentTextview);
|
||||
|
||||
final TextInputEditText input = new TextInputEditText(context);
|
||||
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||
input.setKeyListener(DigitsKeyListener.getInstance("0123456789,."));
|
||||
input.setHint(R.string.updateBalanceHint);
|
||||
|
||||
layout.addView(input);
|
||||
layout.setLayoutParams(params);
|
||||
container.addView(layout);
|
||||
builder.setView(container);
|
||||
|
||||
builder.setPositiveButton(R.string.spend, (dialogInterface, i) -> {
|
||||
try {
|
||||
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
|
||||
BigDecimal newBalance = loyaltyCard.balance.subtract(balanceChange).max(new BigDecimal(0));
|
||||
balanceUpdateListener.onBalanceUpdated(newBalance);
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(
|
||||
R.string.newBalanceSentence,
|
||||
Utils.formatBalance(context, newBalance, loyaltyCard.balanceType)
|
||||
),
|
||||
Toast.LENGTH_LONG
|
||||
).show();
|
||||
} catch (ParseException e) {
|
||||
Toast.makeText(context, R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(R.string.receive, (dialogInterface, i) -> {
|
||||
try {
|
||||
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
|
||||
BigDecimal newBalance = loyaltyCard.balance.add(balanceChange);
|
||||
balanceUpdateListener.onBalanceUpdated(newBalance);
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(
|
||||
R.string.newBalanceSentence,
|
||||
Utils.formatBalance(context, newBalance, loyaltyCard.balanceType)
|
||||
),
|
||||
Toast.LENGTH_LONG
|
||||
).show();
|
||||
} catch (ParseException e) {
|
||||
Toast.makeText(context, R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
builder.setNeutralButton(context.getString(R.string.cancel), (dialog, which) -> dialog.cancel());
|
||||
AlertDialog dialog = builder.create();
|
||||
|
||||
// Button state depends on the parsed input, so listeners must be bound after the dialog exists.
|
||||
input.addTextChangedListener(new SimpleTextWatcher() {
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
BigDecimal balanceChange;
|
||||
|
||||
try {
|
||||
balanceChange = Utils.parseBalance(s.toString(), loyaltyCard.balanceType);
|
||||
} catch (ParseException e) {
|
||||
input.setError(context.getString(R.string.amountParsingFailed));
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
|
||||
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
input.setError(null);
|
||||
boolean hasNonZeroValue = !balanceChange.equals(new BigDecimal(0));
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(hasNonZeroValue);
|
||||
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(hasNonZeroValue);
|
||||
}
|
||||
});
|
||||
|
||||
dialog.show();
|
||||
// Touching dialog buttons before show() can crash because they are not created yet.
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
|
||||
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
|
||||
|
||||
if (dialog.getWindow() != null) {
|
||||
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
|
||||
}
|
||||
// Focus immediately so the keyboard opens on the amount field.
|
||||
input.requestFocus();
|
||||
}
|
||||
|
||||
private boolean hasBalance(LoyaltyCard loyaltyCard) {
|
||||
return !loyaltyCard.balance.equals(new BigDecimal(0));
|
||||
}
|
||||
|
||||
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
|
||||
if (spannableStringBuilder.length() > 0) {
|
||||
spannableStringBuilder.append("\n\n");
|
||||
}
|
||||
|
||||
return spannableStringBuilder;
|
||||
}
|
||||
|
||||
private void appendDateInfo(
|
||||
Context context,
|
||||
SpannableStringBuilder infoText,
|
||||
Date date,
|
||||
Predicate<Date> dateCheck,
|
||||
@StringRes int dateCheckTrueString,
|
||||
@StringRes int dateCheckFalseString
|
||||
) {
|
||||
if (date == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String formattedDate = DateFormat.getDateInstance(DateFormat.LONG).format(date);
|
||||
|
||||
padSpannableString(infoText);
|
||||
if (dateCheck.test(date)) {
|
||||
int start = infoText.length();
|
||||
infoText.append(context.getString(dateCheckTrueString, formattedDate));
|
||||
infoText.setSpan(new ForegroundColorSpan(Color.RED), start, infoText.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
} else {
|
||||
infoText.append(context.getString(dateCheckFalseString, formattedDate));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,7 @@ import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.client.android.Intents;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -71,13 +72,19 @@ import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.cardview.LoyaltyCardViewActivity;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class LoyaltyCardViewActivityTest {
|
||||
private final String BARCODE_DATA = "428311627547";
|
||||
private final CatimaBarcode BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A);
|
||||
private final List<ActivityController<? extends Activity>> activityControllers = new ArrayList<>();
|
||||
private final List<DBHelper> dbHelpers = new ArrayList<>();
|
||||
|
||||
private final String EAN_BARCODE_DATA = "4763705295336";
|
||||
private final CatimaBarcode EAN_BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.EAN_13);
|
||||
@@ -101,6 +108,30 @@ public class LoyaltyCardViewActivityTest {
|
||||
ShadowLog.stream = System.out;
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
for (int index = activityControllers.size() - 1; index >= 0; index--) {
|
||||
ActivityController<? extends Activity> activityController = activityControllers.get(index);
|
||||
try {
|
||||
activityController.pause().stop().destroy();
|
||||
} catch (RuntimeException ignored) {
|
||||
try {
|
||||
activityController.destroy();
|
||||
} catch (RuntimeException ignoredAgain) {
|
||||
}
|
||||
}
|
||||
}
|
||||
activityControllers.clear();
|
||||
|
||||
for (int index = dbHelpers.size() - 1; index >= 0; index--) {
|
||||
try {
|
||||
dbHelpers.get(index).close();
|
||||
} catch (RuntimeException ignored) {
|
||||
}
|
||||
}
|
||||
dbHelpers.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a handler in the package manager for a image capture intent
|
||||
*/
|
||||
@@ -137,87 +168,110 @@ public class LoyaltyCardViewActivityTest {
|
||||
final String barcodeType,
|
||||
final String barcodeEncoding,
|
||||
boolean creatingNewCard) throws ParseException {
|
||||
SQLiteDatabase database = new DBHelper(activity).getWritableDatabase();
|
||||
if (creatingNewCard) {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(database));
|
||||
} else {
|
||||
DBHelper dbHelper = new DBHelper(activity);
|
||||
SQLiteDatabase database = dbHelper.getWritableDatabase();
|
||||
try {
|
||||
if (creatingNewCard) {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(database));
|
||||
} else {
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(database));
|
||||
}
|
||||
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final TextInputLayout validFromView = activity.findViewById(R.id.validFromView);
|
||||
final TextInputLayout expiryView = activity.findViewById(R.id.expiryView);
|
||||
final EditText balanceView = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceCurrencyField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
final TextView cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
final TextView barcodeIdField = activity.findViewById(R.id.barcodeIdField);
|
||||
final TextView barcodeTypeField = activity.findViewById(R.id.barcodeTypeField);
|
||||
final TextView barcodeEncodingField = activity.findViewById(R.id.barcodeEncodingField);
|
||||
|
||||
storeField.setText(store);
|
||||
noteField.setText(note);
|
||||
validFromView.setTag(validFrom);
|
||||
expiryView.setTag(expiry);
|
||||
balanceView.setText(balance.toPlainString());
|
||||
balanceCurrencyField.setText(balanceType);
|
||||
cardIdField.setText(cardId);
|
||||
barcodeIdField.setText(barcodeId);
|
||||
barcodeTypeField.setText(barcodeType);
|
||||
barcodeEncodingField.setText(barcodeEncoding);
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
activity.findViewById(R.id.fabSave).performClick();
|
||||
assertEquals(true, activity.isFinishing());
|
||||
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(database));
|
||||
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), database, 1);
|
||||
assertEquals(store, card.store);
|
||||
assertEquals(note, card.note);
|
||||
assertEquals(balance, card.balance);
|
||||
|
||||
// The special "Any date" string shouldn't actually be written to the loyalty card
|
||||
if (validFrom.equals(activity.getApplicationContext().getString(R.string.anyDate))) {
|
||||
assertEquals(null, card.validFrom);
|
||||
} else {
|
||||
assertEquals(DateFormat.getDateInstance().parse(validFrom), card.validFrom);
|
||||
}
|
||||
|
||||
// The special "Never" string shouldn't actually be written to the loyalty card
|
||||
if (expiry.equals(activity.getApplicationContext().getString(R.string.never))) {
|
||||
assertEquals(null, card.expiry);
|
||||
} else {
|
||||
assertEquals(DateFormat.getDateInstance().parse(expiry), card.expiry);
|
||||
}
|
||||
|
||||
// The special "Points" string shouldn't actually be written to the loyalty card
|
||||
if (balanceType.equals(activity.getApplicationContext().getString(R.string.points))) {
|
||||
assertEquals(null, card.balanceType);
|
||||
} else {
|
||||
assertEquals(Currency.getInstance(balanceType), card.balanceType);
|
||||
}
|
||||
assertEquals(cardId, card.cardId);
|
||||
|
||||
// The special "Same as barcode ID" string shouldn't actually be written to the loyalty card
|
||||
if (barcodeId.equals(activity.getApplicationContext().getString(R.string.sameAsCardId))) {
|
||||
assertEquals(null, card.barcodeId);
|
||||
} else {
|
||||
assertEquals(barcodeId, card.barcodeId);
|
||||
}
|
||||
|
||||
// The special "No barcode" string shouldn't actually be written to the loyalty card
|
||||
if (barcodeType.equals(activity.getApplicationContext().getString(R.string.noBarcode))) {
|
||||
assertEquals(null, card.barcodeType);
|
||||
} else {
|
||||
assertEquals(CatimaBarcode.fromName(barcodeType).format(), card.barcodeType.format());
|
||||
}
|
||||
|
||||
assertEquals(Charset.forName(barcodeEncoding), card.barcodeEncoding);
|
||||
|
||||
assertNotNull(card.headerColor);
|
||||
} finally {
|
||||
dbHelper.close();
|
||||
}
|
||||
}
|
||||
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final TextInputLayout validFromView = activity.findViewById(R.id.validFromView);
|
||||
final TextInputLayout expiryView = activity.findViewById(R.id.expiryView);
|
||||
final EditText balanceView = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceCurrencyField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
final TextView cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
final TextView barcodeIdField = activity.findViewById(R.id.barcodeIdField);
|
||||
final TextView barcodeTypeField = activity.findViewById(R.id.barcodeTypeField);
|
||||
final TextView barcodeEncodingField = activity.findViewById(R.id.barcodeEncodingField);
|
||||
private SQLiteDatabase getWritableEmptyDatabase(Context context) {
|
||||
DBHelper dbHelper = TestHelpers.getEmptyDb(context);
|
||||
dbHelpers.add(dbHelper);
|
||||
return dbHelper.getWritableDatabase();
|
||||
}
|
||||
|
||||
storeField.setText(store);
|
||||
noteField.setText(note);
|
||||
validFromView.setTag(validFrom);
|
||||
expiryView.setTag(expiry);
|
||||
balanceView.setText(balance.toPlainString());
|
||||
balanceCurrencyField.setText(balanceType);
|
||||
cardIdField.setText(cardId);
|
||||
barcodeIdField.setText(barcodeId);
|
||||
barcodeTypeField.setText(barcodeType);
|
||||
barcodeEncodingField.setText(barcodeEncoding);
|
||||
private <T extends Activity> ActivityController<T> trackActivityController(ActivityController<T> activityController) {
|
||||
activityControllers.add(activityController);
|
||||
return activityController;
|
||||
}
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
activity.findViewById(R.id.fabSave).performClick();
|
||||
assertEquals(true, activity.isFinishing());
|
||||
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(database));
|
||||
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), database, 1);
|
||||
assertEquals(store, card.store);
|
||||
assertEquals(note, card.note);
|
||||
assertEquals(balance, card.balance);
|
||||
|
||||
// The special "Any date" string shouldn't actually be written to the loyalty card
|
||||
if (validFrom.equals(activity.getApplicationContext().getString(R.string.anyDate))) {
|
||||
assertEquals(null, card.validFrom);
|
||||
private void checkFieldType(final Activity activity, final int id, FieldTypeView fieldTypeView) {
|
||||
final View view = activity.findViewById(id);
|
||||
if (fieldTypeView == FieldTypeView.TextView) {
|
||||
assertTrue(view instanceof TextView);
|
||||
} else {
|
||||
assertEquals(DateFormat.getDateInstance().parse(validFrom), card.validFrom);
|
||||
assertTrue(view instanceof TextInputLayout || view instanceof ImageView);
|
||||
}
|
||||
|
||||
// The special "Never" string shouldn't actually be written to the loyalty card
|
||||
if (expiry.equals(activity.getApplicationContext().getString(R.string.never))) {
|
||||
assertEquals(null, card.expiry);
|
||||
} else {
|
||||
assertEquals(DateFormat.getDateInstance().parse(expiry), card.expiry);
|
||||
}
|
||||
|
||||
// The special "Points" string shouldn't actually be written to the loyalty card
|
||||
if (balanceType.equals(activity.getApplicationContext().getString(R.string.points))) {
|
||||
assertEquals(null, card.balanceType);
|
||||
} else {
|
||||
assertEquals(Currency.getInstance(balanceType), card.balanceType);
|
||||
}
|
||||
assertEquals(cardId, card.cardId);
|
||||
|
||||
// The special "Same as barcode ID" string shouldn't actually be written to the loyalty card
|
||||
if (barcodeId.equals(activity.getApplicationContext().getString(R.string.sameAsCardId))) {
|
||||
assertEquals(null, card.barcodeId);
|
||||
} else {
|
||||
assertEquals(barcodeId, card.barcodeId);
|
||||
}
|
||||
|
||||
// The special "No barcode" string shouldn't actually be written to the loyalty card
|
||||
if (barcodeType.equals(activity.getApplicationContext().getString(R.string.noBarcode))) {
|
||||
assertEquals(null, card.barcodeType);
|
||||
} else {
|
||||
assertEquals(CatimaBarcode.fromName(barcodeType).format(), card.barcodeType.format());
|
||||
}
|
||||
|
||||
assertEquals(Charset.forName(barcodeEncoding), card.barcodeEncoding);
|
||||
|
||||
assertNotNull(card.headerColor);
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -357,7 +411,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
@Config(qualifiers="de")
|
||||
public void noCrashOnRegionlessLocale() {
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
@@ -375,107 +429,110 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void noDataLossOnResumeOrRotate() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
try {
|
||||
registerMediaStoreIntentHandler();
|
||||
|
||||
registerMediaStoreIntentHandler();
|
||||
Integer cardId;
|
||||
|
||||
Integer cardId;
|
||||
for (boolean newCard : new boolean[]{false, true}) {
|
||||
System.out.println();
|
||||
System.out.println("=====");
|
||||
System.out.println("New card? " + newCard);
|
||||
System.out.println("=====");
|
||||
System.out.println();
|
||||
|
||||
for (boolean newCard : new boolean[]{false, true}) {
|
||||
System.out.println();
|
||||
System.out.println("=====");
|
||||
System.out.println("New card? " + newCard);
|
||||
System.out.println("=====");
|
||||
System.out.println();
|
||||
if (!newCard) {
|
||||
cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.UTF_8, Color.BLACK, 0, null, 0);
|
||||
} else {
|
||||
cardId = null;
|
||||
}
|
||||
|
||||
if (!newCard) {
|
||||
cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.UTF_8, Color.BLACK, 0, null, 0);
|
||||
} else {
|
||||
cardId = null;
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, cardId);
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), newCard ? "ISO-8859-1" : "UTF-8", null, null);
|
||||
|
||||
// Change everything
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final EditText validFromField = activity.findViewById(R.id.validFromField);
|
||||
final EditText expiryField = activity.findViewById(R.id.expiryField);
|
||||
final EditText balanceField = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceTypeField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
final EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
final EditText barcodeField = activity.findViewById(R.id.barcodeIdField);
|
||||
final EditText barcodeTypeField = activity.findViewById(R.id.barcodeTypeField);
|
||||
final EditText barcodeEncodingField = activity.findViewById(R.id.barcodeEncodingField);
|
||||
final ImageView frontImageView = activity.findViewById(R.id.frontImage);
|
||||
final ImageView backImageView = activity.findViewById(R.id.backImage);
|
||||
|
||||
Currency currency = Currency.getInstance("EUR");
|
||||
Date validFromDate = Date.from(Instant.now().minus(20, ChronoUnit.DAYS));
|
||||
Date expiryDate = new Date();
|
||||
Bitmap frontBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.circle);
|
||||
Bitmap backBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_done);
|
||||
|
||||
storeField.setText("correct store");
|
||||
noteField.setText("correct note");
|
||||
LoyaltyCardEditActivity.formatDateField(context, validFromField, validFromDate);
|
||||
activity.setLoyaltyCardValidFrom(validFromDate);
|
||||
LoyaltyCardEditActivity.formatDateField(context, expiryField, expiryDate);
|
||||
activity.setLoyaltyCardExpiry(expiryDate);
|
||||
balanceField.setText("100");
|
||||
balanceTypeField.setText(currency.getSymbol());
|
||||
cardIdField.setText("12345678");
|
||||
barcodeField.setText("87654321");
|
||||
barcodeTypeField.setText(CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName());
|
||||
barcodeEncodingField.setText(StandardCharsets.ISO_8859_1.name());
|
||||
activity.setCardImage(ImageLocationType.front, frontImageView, frontBitmap, true);
|
||||
activity.setCardImage(ImageLocationType.back, backImageView, backBitmap, true);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if changed
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Resume
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to landscape
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
activity.recreate();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to portrait
|
||||
shadowOf(getMainLooper()).idle();
|
||||
activity.recreate();
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
}
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, cardId);
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), newCard ? "ISO-8859-1" : "UTF-8", null, null);
|
||||
|
||||
// Change everything
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final EditText validFromField = activity.findViewById(R.id.validFromField);
|
||||
final EditText expiryField = activity.findViewById(R.id.expiryField);
|
||||
final EditText balanceField = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceTypeField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
final EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
final EditText barcodeField = activity.findViewById(R.id.barcodeIdField);
|
||||
final EditText barcodeTypeField = activity.findViewById(R.id.barcodeTypeField);
|
||||
final EditText barcodeEncodingField = activity.findViewById(R.id.barcodeEncodingField);
|
||||
final ImageView frontImageView = activity.findViewById(R.id.frontImage);
|
||||
final ImageView backImageView = activity.findViewById(R.id.backImage);
|
||||
|
||||
Currency currency = Currency.getInstance("EUR");
|
||||
Date validFromDate = Date.from(Instant.now().minus(20, ChronoUnit.DAYS));
|
||||
Date expiryDate = new Date();
|
||||
Bitmap frontBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.circle);
|
||||
Bitmap backBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_done);
|
||||
|
||||
storeField.setText("correct store");
|
||||
noteField.setText("correct note");
|
||||
LoyaltyCardEditActivity.formatDateField(context, validFromField, validFromDate);
|
||||
activity.setLoyaltyCardValidFrom(validFromDate);
|
||||
LoyaltyCardEditActivity.formatDateField(context, expiryField, expiryDate);
|
||||
activity.setLoyaltyCardExpiry(expiryDate);
|
||||
balanceField.setText("100");
|
||||
balanceTypeField.setText(currency.getSymbol());
|
||||
cardIdField.setText("12345678");
|
||||
barcodeField.setText("87654321");
|
||||
barcodeTypeField.setText(CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName());
|
||||
barcodeEncodingField.setText(StandardCharsets.ISO_8859_1.name());
|
||||
activity.setCardImage(ImageLocationType.front, frontImageView, frontBitmap, true);
|
||||
activity.setCardImage(ImageLocationType.back, backImageView, backBitmap, true);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if changed
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Resume
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to landscape
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
activity.recreate();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to portrait
|
||||
shadowOf(getMainLooper()).idle();
|
||||
activity.recreate();
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), StandardCharsets.ISO_8859_1.name(), frontBitmap, backBitmap);
|
||||
} finally {
|
||||
database.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startWithoutParametersCheckFieldsAvailable() {
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -489,9 +546,9 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithoutParametersCannotCreateLoyaltyCard() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -519,7 +576,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
@Test
|
||||
public void startWithoutParametersBack() {
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -535,7 +592,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
public void startWithoutParametersCaptureBarcodeCreateLoyaltyCard() throws IOException, ParseException {
|
||||
registerMediaStoreIntentHandler();
|
||||
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -559,7 +616,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
@Test
|
||||
public void startWithoutParametersCaptureBarcodeFailure() throws IOException {
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -580,7 +637,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
@Test
|
||||
public void startWithoutParametersCaptureBarcodeCancel() throws IOException {
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class).create());
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -631,13 +688,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
intent.putExtras(bundle);
|
||||
|
||||
return Robolectric.buildActivity(clazz, intent).create();
|
||||
return trackActivityController(Robolectric.buildActivity(clazz, intent).create());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startWithLoyaltyCardEditModeCheckDisplay() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -656,7 +713,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardViewModeCheckDisplay() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.UTF_8, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -675,7 +732,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardWithBarcodeUpdateBarcode() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.UTF_8, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -700,7 +757,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardWithReceiptUpdateReceiptCancel() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -739,7 +796,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardNoExpirySetExpiry() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -772,7 +829,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardExpirySetNoExpiry() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -797,7 +854,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardNoBalanceSetBalance() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -848,7 +905,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardBalanceSetNoBalance() throws IOException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -889,7 +946,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardSameAsCardIDUpdateBarcodeID() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -921,7 +978,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardSameAsCardIDUpdateCardID() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -955,7 +1012,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDUpdate() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -992,7 +1049,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDDoNotUpdate() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1029,7 +1086,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void checkMenu() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1074,7 +1131,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithoutParametersViewBack() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1095,7 +1152,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startWithoutColors() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, null, 0, null, 0);
|
||||
|
||||
@@ -1116,7 +1173,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startLoyaltyCardWithoutColorsSave() throws IOException, ParseException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, null, 0, null, 0);
|
||||
|
||||
@@ -1136,7 +1193,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void startLoyaltyCardWithExplicitNoBarcodeSave() throws IOException, ParseException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1156,7 +1213,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void removeBarcodeFromLoyaltyCard() throws IOException, ParseException {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1187,7 +1244,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void checkPushStarIcon() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1224,7 +1281,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void checkBarcodeFullscreenWorkflow() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1320,7 +1377,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
@Test
|
||||
public void checkNoBarcodeFullscreenWorkflow() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
SQLiteDatabase database = getWritableEmptyDatabase(context);
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
@@ -1366,7 +1423,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Intent intent = new Intent();
|
||||
intent.setData(importUri);
|
||||
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class, intent).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class, intent).create());
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1388,7 +1445,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Intent intent = new Intent();
|
||||
intent.setData(importUri);
|
||||
|
||||
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class, intent).create();
|
||||
ActivityController activityController = trackActivityController(Robolectric.buildActivity(LoyaltyCardEditActivity.class, intent).create());
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
|
||||
@@ -22,19 +22,20 @@ public class TestHelpers {
|
||||
SQLiteDatabase database = db.getWritableDatabase();
|
||||
|
||||
// Make sure no files remain
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(database);
|
||||
cursor.moveToFirst();
|
||||
while (!cursor.isAfterLast()) {
|
||||
int cardID = cursor.getColumnIndex(DBHelper.LoyaltyCardDbIds.ID);
|
||||
try (Cursor cursor = DBHelper.getLoyaltyCardCursor(database)) {
|
||||
cursor.moveToFirst();
|
||||
while (!cursor.isAfterLast()) {
|
||||
int cardID = cursor.getColumnIndex(DBHelper.LoyaltyCardDbIds.ID);
|
||||
|
||||
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
|
||||
try {
|
||||
Utils.saveCardImage(context.getApplicationContext(), null, cardID, imageLocationType);
|
||||
} catch (FileNotFoundException ignored) {
|
||||
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
|
||||
try {
|
||||
Utils.saveCardImage(context.getApplicationContext(), null, cardID, imageLocationType);
|
||||
} catch (FileNotFoundException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cursor.moveToNext();
|
||||
cursor.moveToNext();
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure DB is empty
|
||||
|
||||
Reference in New Issue
Block a user