mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-25 08:07:56 -05:00
Compare commits
27 Commits
v2.20.0
...
fix/barcod
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
65d8d45018 | ||
|
|
0e7a5428f6 | ||
|
|
8030eb52f3 | ||
|
|
9fc315158f | ||
|
|
971f68b0a1 | ||
|
|
adfc17d5c2 | ||
|
|
5ee2852e4c | ||
|
|
ea1d42fa35 | ||
|
|
f8b90f2c07 | ||
|
|
6dc9821891 | ||
|
|
93a2e9cdbf | ||
|
|
6a9d54d6f0 | ||
|
|
28f0b407b5 | ||
|
|
89ed31ffe0 | ||
|
|
aa481ea094 | ||
|
|
523aaef650 | ||
|
|
a56c4d449d | ||
|
|
1468130477 | ||
|
|
0b5571a065 | ||
|
|
002c221390 | ||
|
|
2272c88d04 | ||
|
|
6a58bd632f | ||
|
|
027a7f798d | ||
|
|
dd4ad6d860 | ||
|
|
3342b8f83f | ||
|
|
5951c74fc4 | ||
|
|
2cae83c84f |
@@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased - 115
|
||||
|
||||
- Open image in gallery on long-press
|
||||
|
||||
## v2.20.0 - 114
|
||||
|
||||
- Add Monochrome icon for Android 13
|
||||
|
||||
@@ -8,7 +8,20 @@ to the rules described here, but by following the instructions below you
|
||||
should have a much easier time getting your work merged with the upstream
|
||||
project.
|
||||
|
||||
## Test Your Code
|
||||
## Translation Changes
|
||||
|
||||
Translation changes are managed through [Weblate](https://hosted.weblate.org/projects/catima/).
|
||||
Please do not supply translation updates directly through GitHub.
|
||||
|
||||
Weblate requires an account to translate changes, so please log in before
|
||||
you start translating.
|
||||
|
||||
While using Weblate, please do not ignore any of its warnings. They exist
|
||||
for good reason.
|
||||
|
||||
## Code Changes
|
||||
|
||||
### Test Your Code
|
||||
|
||||
There are four possible tests you can run to verify your code. The first
|
||||
is unit tests, which check the basic functionality of the application, and
|
||||
@@ -28,14 +41,14 @@ and SpotBugs, run using:
|
||||
The final check is by testing the application on a live device and verifying
|
||||
the basic functionality works as expected.
|
||||
|
||||
## Make Sure Your Code is Tested
|
||||
### Make Sure Your Code is Tested
|
||||
|
||||
The Catima code uses a fair number of unit tests to verify that
|
||||
the basic functionality is working. Submissions which add functionality
|
||||
or significantly change the existing code should include additional tests
|
||||
to verify the proper operation of the proposed changes.
|
||||
|
||||
## Explain Your Work
|
||||
### Explain Your Work
|
||||
|
||||
At the top of every patch you should include a description of the problem you
|
||||
are trying to solve, how you solved it, and why you chose the solution you
|
||||
@@ -44,7 +57,7 @@ if you can describe/include a reproducer for the problem in the description as
|
||||
well as instructions on how to test for the bug and verify that it has been
|
||||
fixed.
|
||||
|
||||
## Sign Your Work
|
||||
### Sign Your Work
|
||||
|
||||
The sign-off is a simple line at the end of the patch description, which
|
||||
certifies that you wrote it or otherwise have the right to pass it on as an
|
||||
@@ -82,7 +95,7 @@ your real name, saying:
|
||||
|
||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
||||
|
||||
## Submit Patch(es) for Review
|
||||
### Submit Patch(es) for Review
|
||||
|
||||
Finally, you will need to submit your patches so that they can be reviewed
|
||||
and potentially merged into the main Catima repository. The preferred
|
||||
|
||||
@@ -106,7 +106,7 @@ dependencies {
|
||||
// Testing
|
||||
testImplementation 'androidx.test:core:1.4.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.robolectric:robolectric:4.8.2'
|
||||
testImplementation 'org.robolectric:robolectric:4.9'
|
||||
}
|
||||
|
||||
tasks.withType(SpotBugsTask) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.google.zxing.common.BitMatrix;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import protect.card_locker.async.CompatCallable;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
|
||||
/**
|
||||
* This task will generate a barcode and load it into an ImageView.
|
||||
@@ -38,7 +39,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
private final WeakReference<ImageView> imageViewReference;
|
||||
private final WeakReference<TextView> textViewReference;
|
||||
private String cardId;
|
||||
private final CatimaBarcode format;
|
||||
private final Barcode format;
|
||||
private final int imageHeight;
|
||||
private final int imageWidth;
|
||||
private final boolean showFallback;
|
||||
@@ -46,7 +47,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
|
||||
BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, TextView textView,
|
||||
Barcode barcodeFormat, TextView textView,
|
||||
boolean showFallback, Runnable callback, boolean roundCornerPadding
|
||||
) {
|
||||
mContext = context;
|
||||
@@ -90,68 +91,8 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
this.showFallback = showFallback;
|
||||
}
|
||||
|
||||
private int getMaxWidth(CatimaBarcode format) {
|
||||
switch (format.format()) {
|
||||
// 2D barcodes
|
||||
case AZTEC:
|
||||
case DATA_MATRIX:
|
||||
case MAXICODE:
|
||||
case PDF_417:
|
||||
case QR_CODE:
|
||||
return MAX_WIDTH_2D;
|
||||
|
||||
// 1D barcodes:
|
||||
case CODABAR:
|
||||
case CODE_39:
|
||||
case CODE_93:
|
||||
case CODE_128:
|
||||
case EAN_8:
|
||||
case EAN_13:
|
||||
case ITF:
|
||||
case UPC_A:
|
||||
case UPC_E:
|
||||
case RSS_14:
|
||||
case RSS_EXPANDED:
|
||||
case UPC_EAN_EXTENSION:
|
||||
default:
|
||||
return MAX_WIDTH_1D;
|
||||
}
|
||||
}
|
||||
|
||||
private String getFallbackString(CatimaBarcode format) {
|
||||
switch (format.format()) {
|
||||
// 2D barcodes
|
||||
case AZTEC:
|
||||
return "AZTEC";
|
||||
case DATA_MATRIX:
|
||||
return "DATA_MATRIX";
|
||||
case PDF_417:
|
||||
return "PDF_417";
|
||||
case QR_CODE:
|
||||
return "QR_CODE";
|
||||
|
||||
// 1D barcodes:
|
||||
case CODABAR:
|
||||
return "C0C";
|
||||
case CODE_39:
|
||||
return "CODE_39";
|
||||
case CODE_93:
|
||||
return "CODE_93";
|
||||
case CODE_128:
|
||||
return "CODE_128";
|
||||
case EAN_8:
|
||||
return "32123456";
|
||||
case EAN_13:
|
||||
return "5901234123457";
|
||||
case ITF:
|
||||
return "1003";
|
||||
case UPC_A:
|
||||
return "123456789012";
|
||||
case UPC_E:
|
||||
return "0123456";
|
||||
default:
|
||||
throw new IllegalArgumentException("No fallback known for this barcode type");
|
||||
}
|
||||
private int getMaxWidth(Barcode format) {
|
||||
return format.is2D() ? MAX_WIDTH_2D : MAX_WIDTH_1D;
|
||||
}
|
||||
|
||||
private Bitmap generate() {
|
||||
@@ -227,7 +168,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
|
||||
if (showFallback && !Thread.currentThread().isInterrupted()) {
|
||||
Log.i(TAG, "Barcode generation failed, generating fallback...");
|
||||
cardId = getFallbackString(format);
|
||||
cardId = format.exampleValue();
|
||||
bitmap = generate();
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,9 @@ import java.util.ArrayList;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.barcodes.BarcodeFactory;
|
||||
import protect.card_locker.barcodes.BarcodeWithValue;
|
||||
|
||||
/**
|
||||
* This activity is callable and will allow a user to enter
|
||||
@@ -86,10 +89,10 @@ public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void generateBarcodes(String value) {
|
||||
// Update barcodes
|
||||
ArrayList<CatimaBarcodeWithValue> barcodes = new ArrayList<>();
|
||||
for (BarcodeFormat barcodeFormat : CatimaBarcode.barcodeFormats) {
|
||||
CatimaBarcode catimaBarcode = CatimaBarcode.fromBarcode(barcodeFormat);
|
||||
barcodes.add(new CatimaBarcodeWithValue(catimaBarcode, value));
|
||||
ArrayList<BarcodeWithValue> barcodes = new ArrayList<>();
|
||||
for (BarcodeFormat barcodeFormat : BarcodeFactory.getAllFormats()) {
|
||||
Barcode catimaBarcode = BarcodeFactory.fromBarcode(barcodeFormat);
|
||||
barcodes.add(new BarcodeWithValue(catimaBarcode, value));
|
||||
}
|
||||
mAdapter.setBarcodes(barcodes);
|
||||
}
|
||||
@@ -118,7 +121,7 @@ public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition, View view) {
|
||||
CatimaBarcodeWithValue barcodeWithValue = mAdapter.getItem(inputPosition);
|
||||
BarcodeWithValue barcodeWithValue = mAdapter.getItem(inputPosition);
|
||||
CatimaBarcode catimaBarcode = barcodeWithValue.catimaBarcode();
|
||||
|
||||
if (!mAdapter.isValid(view)) {
|
||||
|
||||
@@ -13,8 +13,11 @@ import android.widget.TextView;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.barcodes.BarcodeFactory;
|
||||
import protect.card_locker.barcodes.BarcodeWithValue;
|
||||
|
||||
public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue> {
|
||||
public class BarcodeSelectorAdapter extends ArrayAdapter<BarcodeWithValue> {
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
private final TaskHandler mTasks = new TaskHandler();
|
||||
@@ -29,12 +32,12 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
void onRowClicked(int inputPosition, View view);
|
||||
}
|
||||
|
||||
public BarcodeSelectorAdapter(Context context, ArrayList<CatimaBarcodeWithValue> barcodes, BarcodeSelectorListener barcodeSelectorListener) {
|
||||
public BarcodeSelectorAdapter(Context context, ArrayList<BarcodeWithValue> barcodes, BarcodeSelectorListener barcodeSelectorListener) {
|
||||
super(context, 0, barcodes);
|
||||
mListener = barcodeSelectorListener;
|
||||
}
|
||||
|
||||
public void setBarcodes(ArrayList<CatimaBarcodeWithValue> barcodes) {
|
||||
public void setBarcodes(ArrayList<BarcodeWithValue> barcodes) {
|
||||
clear();
|
||||
addAll(barcodes);
|
||||
notifyDataSetChanged();
|
||||
@@ -43,9 +46,9 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
CatimaBarcodeWithValue catimaBarcodeWithValue = getItem(position);
|
||||
CatimaBarcode catimaBarcode = catimaBarcodeWithValue.catimaBarcode();
|
||||
String value = catimaBarcodeWithValue.value();
|
||||
BarcodeWithValue barcodeWithValue = getItem(position);
|
||||
Barcode catimaBarcode = barcodeWithValue.barcode();
|
||||
String value = barcodeWithValue.value();
|
||||
|
||||
ViewHolder viewHolder;
|
||||
if (convertView == null) {
|
||||
@@ -73,7 +76,7 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
}
|
||||
|
||||
private void createBarcodeOption(final ImageView image, final String formatType, final String cardId, final TextView text) {
|
||||
final CatimaBarcode format = CatimaBarcode.fromName(formatType);
|
||||
final Barcode format = BarcodeFactory.fromName(formatType);
|
||||
|
||||
image.setImageBitmap(null);
|
||||
image.setClipToOutline(true);
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class CatimaBarcode {
|
||||
public static final List<BarcodeFormat> barcodeFormats = Collections.unmodifiableList(Arrays.asList(
|
||||
BarcodeFormat.AZTEC,
|
||||
BarcodeFormat.CODE_39,
|
||||
BarcodeFormat.CODE_93,
|
||||
BarcodeFormat.CODE_128,
|
||||
BarcodeFormat.CODABAR,
|
||||
BarcodeFormat.DATA_MATRIX,
|
||||
BarcodeFormat.EAN_8,
|
||||
BarcodeFormat.EAN_13,
|
||||
BarcodeFormat.ITF,
|
||||
BarcodeFormat.PDF_417,
|
||||
BarcodeFormat.QR_CODE,
|
||||
BarcodeFormat.UPC_A,
|
||||
BarcodeFormat.UPC_E
|
||||
));
|
||||
|
||||
public static final List<String> barcodePrettyNames = Collections.unmodifiableList(Arrays.asList(
|
||||
"Aztec",
|
||||
"Code 39",
|
||||
"Code 93",
|
||||
"Code 128",
|
||||
"Codabar",
|
||||
"Data Matrix",
|
||||
"EAN 8",
|
||||
"EAN 13",
|
||||
"ITF",
|
||||
"PDF 417",
|
||||
"QR Code",
|
||||
"UPC A",
|
||||
"UPC E"
|
||||
));
|
||||
|
||||
private final BarcodeFormat mBarcodeFormat;
|
||||
|
||||
private CatimaBarcode(BarcodeFormat barcodeFormat) {
|
||||
mBarcodeFormat = barcodeFormat;
|
||||
}
|
||||
|
||||
public static CatimaBarcode fromBarcode(BarcodeFormat barcodeFormat) {
|
||||
return new CatimaBarcode(barcodeFormat);
|
||||
}
|
||||
|
||||
public static CatimaBarcode fromName(String name) {
|
||||
return new CatimaBarcode(BarcodeFormat.valueOf(name));
|
||||
}
|
||||
|
||||
public static CatimaBarcode fromPrettyName(String prettyName) {
|
||||
try {
|
||||
return new CatimaBarcode(barcodeFormats.get(barcodePrettyNames.indexOf(prettyName)));
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
throw new IllegalArgumentException("No barcode type with pretty name " + prettyName + " known!");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSupported() {
|
||||
return barcodeFormats.contains(mBarcodeFormat);
|
||||
}
|
||||
|
||||
public boolean isSquare() {
|
||||
return mBarcodeFormat == BarcodeFormat.AZTEC
|
||||
|| mBarcodeFormat == BarcodeFormat.DATA_MATRIX
|
||||
|| mBarcodeFormat == BarcodeFormat.MAXICODE
|
||||
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
|
||||
}
|
||||
|
||||
public boolean hasInternalPadding() {
|
||||
return mBarcodeFormat == BarcodeFormat.PDF_417
|
||||
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
|
||||
}
|
||||
|
||||
public BarcodeFormat format() {
|
||||
return mBarcodeFormat;
|
||||
}
|
||||
|
||||
public String name() {
|
||||
return mBarcodeFormat.name();
|
||||
}
|
||||
|
||||
public String prettyName() {
|
||||
int index = barcodeFormats.indexOf(mBarcodeFormat);
|
||||
|
||||
if (index == -1 || index >= barcodePrettyNames.size()) {
|
||||
return mBarcodeFormat.name();
|
||||
}
|
||||
|
||||
return barcodePrettyNames.get(index);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package protect.card_locker;
|
||||
|
||||
public class CatimaBarcodeWithValue {
|
||||
private final CatimaBarcode mCatimaBarcode;
|
||||
private final String mValue;
|
||||
|
||||
public CatimaBarcodeWithValue(CatimaBarcode catimaBarcode, String value) {
|
||||
mCatimaBarcode = catimaBarcode;
|
||||
mValue = value;
|
||||
}
|
||||
|
||||
public CatimaBarcode catimaBarcode() {
|
||||
return mCatimaBarcode;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return mValue;
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,8 @@ import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
|
||||
public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
@@ -360,7 +362,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static long insertLoyaltyCard(
|
||||
final SQLiteDatabase database, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor,
|
||||
final String barcodeId, final Barcode barcodeType, final Integer headerColor,
|
||||
final int starStatus, final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
@@ -392,7 +394,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static long insertLoyaltyCard(
|
||||
final SQLiteDatabase database, final int id, final String store, final String note,
|
||||
final Date expiry, final BigDecimal balance, final Currency balanceType,
|
||||
final String cardId, final String barcodeId, final CatimaBarcode barcodeType,
|
||||
final String cardId, final String barcodeId, final Barcode barcodeType,
|
||||
final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
@@ -425,7 +427,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static boolean updateLoyaltyCard(
|
||||
SQLiteDatabase database, final int id, final String store, final String note,
|
||||
final Date expiry, final BigDecimal balance, final Currency balanceType,
|
||||
final String cardId, final String barcodeId, final CatimaBarcode barcodeType,
|
||||
final String cardId, final String barcodeId, final Barcode barcodeType,
|
||||
final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
|
||||
@@ -15,6 +15,9 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.barcodes.BarcodeFactory;
|
||||
|
||||
public class ImportURIHelper {
|
||||
private static final String STORE = DBHelper.LoyaltyCardDbIds.STORE;
|
||||
private static final String NOTE = DBHelper.LoyaltyCardDbIds.NOTE;
|
||||
@@ -61,7 +64,7 @@ public class ImportURIHelper {
|
||||
|
||||
try {
|
||||
// These values are allowed to be null
|
||||
CatimaBarcode barcodeType = null;
|
||||
Barcode barcodeType = null;
|
||||
Date expiry = null;
|
||||
BigDecimal balance = new BigDecimal("0");
|
||||
Currency balanceType = null;
|
||||
@@ -95,7 +98,7 @@ public class ImportURIHelper {
|
||||
|
||||
String unparsedBarcodeType = kv.get(BARCODE_TYPE);
|
||||
if (unparsedBarcodeType != null && !unparsedBarcodeType.equals("")) {
|
||||
barcodeType = CatimaBarcode.fromName(unparsedBarcodeType);
|
||||
barcodeType = BarcodeFactory.fromName(unparsedBarcodeType);
|
||||
}
|
||||
|
||||
String unparsedBalance = kv.get(BALANCE);
|
||||
|
||||
@@ -9,6 +9,8 @@ import java.util.Currency;
|
||||
import java.util.Date;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.barcodes.BarcodeFactory;
|
||||
|
||||
public class LoyaltyCard implements Parcelable {
|
||||
public final int id;
|
||||
@@ -23,7 +25,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
public final String barcodeId;
|
||||
|
||||
@Nullable
|
||||
public final CatimaBarcode barcodeType;
|
||||
public final Barcode barcodeType;
|
||||
|
||||
@Nullable
|
||||
public final Integer headerColor;
|
||||
@@ -35,7 +37,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
|
||||
public LoyaltyCard(final int id, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
@Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
|
||||
@Nullable final String barcodeId, @Nullable final Barcode barcodeType,
|
||||
@Nullable final Integer headerColor, final int starStatus,
|
||||
final long lastUsed, final int zoomLevel, final int archiveStatus) {
|
||||
this.id = id;
|
||||
@@ -65,7 +67,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
cardId = in.readString();
|
||||
barcodeId = in.readString();
|
||||
String tmpBarcodeType = in.readString();
|
||||
barcodeType = !tmpBarcodeType.isEmpty() ? CatimaBarcode.fromName(tmpBarcodeType) : null;
|
||||
barcodeType = !tmpBarcodeType.isEmpty() ? BarcodeFactory.fromName(tmpBarcodeType) : null;
|
||||
int tmpHeaderColor = in.readInt();
|
||||
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
|
||||
starStatus = in.readInt();
|
||||
@@ -109,13 +111,13 @@ public class LoyaltyCard implements Parcelable {
|
||||
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
|
||||
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
|
||||
|
||||
CatimaBarcode barcodeType = null;
|
||||
Barcode barcodeType = null;
|
||||
Currency balanceType = null;
|
||||
Date expiry = null;
|
||||
Integer headerColor = null;
|
||||
|
||||
if (cursor.isNull(barcodeTypeColumn) == false) {
|
||||
barcodeType = CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn));
|
||||
barcodeType = BarcodeFactory.fromName(cursor.getString(barcodeTypeColumn));
|
||||
}
|
||||
|
||||
if (cursor.isNull(balanceTypeColumn) == false) {
|
||||
|
||||
@@ -77,6 +77,8 @@ import androidx.core.content.FileProvider;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.barcodes.BarcodeFactory;
|
||||
|
||||
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
private static final String TAG = "Catima";
|
||||
@@ -204,7 +206,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
(Currency) (fieldName == LoyaltyCardField.balanceType ? value : loyaltyCard.balanceType),
|
||||
(String) (fieldName == LoyaltyCardField.cardId ? value : loyaltyCard.cardId),
|
||||
(String) (fieldName == LoyaltyCardField.barcodeId ? value : loyaltyCard.barcodeId),
|
||||
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
|
||||
(Barcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
|
||||
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
|
||||
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
|
||||
0, // Unimportant, always set to null in doSave so the DB updates it to the current timestamp
|
||||
@@ -553,13 +555,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
updateTempState(LoyaltyCardField.barcodeType, null);
|
||||
} else {
|
||||
try {
|
||||
CatimaBarcode barcodeFormat = CatimaBarcode.fromPrettyName(s.toString());
|
||||
|
||||
updateTempState(LoyaltyCardField.barcodeType, barcodeFormat);
|
||||
|
||||
if (!barcodeFormat.isSupported()) {
|
||||
Toast.makeText(LoyaltyCardEditActivity.this, getString(R.string.unsupportedBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
updateTempState(LoyaltyCardField.barcodeType, barcodeTypeField.getTag());
|
||||
} catch (IllegalArgumentException e) {
|
||||
}
|
||||
}
|
||||
@@ -820,7 +816,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
formatBalanceCurrencyField(tempLoyaltyCard.balanceType);
|
||||
cardIdFieldView.setText(tempLoyaltyCard.cardId);
|
||||
barcodeIdField.setText(tempLoyaltyCard.barcodeId != null ? tempLoyaltyCard.barcodeId : getString(R.string.sameAsCardId));
|
||||
barcodeTypeField.setText(tempLoyaltyCard.barcodeType != null ? tempLoyaltyCard.barcodeType.prettyName() : getString(R.string.noBarcode));
|
||||
setbarcodeTypeField(tempLoyaltyCard.barcodeType);
|
||||
|
||||
if (groupsChips.getChildCount() == 0) {
|
||||
List<Group> existingGroups = DBHelper.getGroups(mDatabase);
|
||||
@@ -869,9 +865,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
// Update from intent
|
||||
if (barcodeType != null) {
|
||||
try {
|
||||
barcodeTypeField.setText(CatimaBarcode.fromName(barcodeType).prettyName());
|
||||
Barcode barcode = BarcodeFactory.fromName(barcodeType);
|
||||
setbarcodeTypeField(barcode);
|
||||
} catch (IllegalArgumentException e) {
|
||||
barcodeTypeField.setText(getString(R.string.noBarcode));
|
||||
setbarcodeTypeField(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -949,6 +946,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void setbarcodeTypeField(Barcode barcode) {
|
||||
barcodeTypeField.setTag(barcode);
|
||||
barcodeTypeField.setText(barcode != null ? barcode.prettyName() : getString(R.string.noBarcode));
|
||||
}
|
||||
|
||||
protected static void formatExpiryField(Context context, EditText expiryField, Date expiry) {
|
||||
expiryField.setTag(expiry);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.res.ColorStateList;
|
||||
@@ -43,6 +44,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.Guideline;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.core.graphics.BlendModeColorFilterCompat;
|
||||
import androidx.core.graphics.BlendModeCompat;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
@@ -53,6 +55,7 @@ import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.bottomappbar.BottomAppBar;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DateFormat;
|
||||
@@ -61,6 +64,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.barcodes.Barcode;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements GestureDetector.OnGestureListener {
|
||||
@@ -98,7 +102,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
String cardIdString;
|
||||
String barcodeIdString;
|
||||
CatimaBarcode format;
|
||||
Barcode format;
|
||||
|
||||
FloatingActionButton editButton;
|
||||
|
||||
@@ -114,7 +118,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
int mainImageIndex = 0;
|
||||
List<ImageType> imageTypes;
|
||||
private ImageView[] dots;
|
||||
boolean isBarcodeSupported = true;
|
||||
|
||||
static final String STATE_IMAGEINDEX = "imageIndex";
|
||||
static final String STATE_FULLSCREEN = "isFullscreen";
|
||||
@@ -150,8 +153,45 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
// Also switch on long-press for accessibility
|
||||
setMainImage(true, true);
|
||||
openCurrentMainImageInGallery();
|
||||
}
|
||||
|
||||
private void openCurrentMainImageInGallery() {
|
||||
ImageType wantedImageType = imageTypes.get(mainImageIndex);
|
||||
|
||||
File file = null;
|
||||
|
||||
switch (wantedImageType) {
|
||||
case IMAGE_FRONT:
|
||||
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.front);
|
||||
break;
|
||||
case IMAGE_BACK:
|
||||
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.back);
|
||||
break;
|
||||
case BARCODE:
|
||||
Toast.makeText(this, R.string.barcodeLongPressMessage, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
default:
|
||||
// Empty default case for now to keep the spotBugsRelease job happy
|
||||
}
|
||||
|
||||
// Do nothing if there is no file
|
||||
if (file == null) {
|
||||
Toast.makeText(this, R.string.failedToRetrieveImageFile, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW)
|
||||
.setDataAndType(FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID, file), "image/*")
|
||||
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivity(intent);
|
||||
}
|
||||
catch (ActivityNotFoundException e) {
|
||||
// Display a toast message if an image viewer is not installed on device
|
||||
Toast.makeText(this, R.string.failedLaunchingPhotoPicker, Toast.LENGTH_SHORT).show();
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -673,17 +713,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
// Set shadow colour of store text so even same color on same color would be readable
|
||||
storeName.setShadowLayer(1, 1, 1, backgroundNeedsDarkIcons ? Color.BLACK : Color.WHITE);
|
||||
|
||||
if (format != null && !format.isSupported()) {
|
||||
isBarcodeSupported = false;
|
||||
|
||||
Toast.makeText(this, getString(R.string.unsupportedBarcodeType), Toast.LENGTH_LONG).show();
|
||||
} else if (format == null) {
|
||||
isBarcodeSupported = false;
|
||||
}
|
||||
|
||||
imageTypes = new ArrayList<>();
|
||||
|
||||
if (isBarcodeSupported) {
|
||||
if (format != null) {
|
||||
imageTypes.add(ImageType.BARCODE);
|
||||
}
|
||||
|
||||
|
||||
@@ -345,6 +345,14 @@ public class Utils {
|
||||
saveCardImage(context, bitmap, getCardImageFileName(loyaltyCardId, type));
|
||||
}
|
||||
|
||||
public static File retrieveCardImageAsFile(Context context, String fileName) {
|
||||
return context.getFileStreamPath(fileName);
|
||||
}
|
||||
|
||||
public static File retrieveCardImageAsFile(Context context, int loyaltyCardId, ImageLocationType type) {
|
||||
return retrieveCardImageAsFile(context, getCardImageFileName(loyaltyCardId, type));
|
||||
}
|
||||
|
||||
static public Bitmap retrieveCardImage(Context context, String fileName) {
|
||||
FileInputStream in;
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class AztecBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Aztec";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.AZTEC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "AZTEC";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInternalPadding() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
22
app/src/main/java/protect/card_locker/barcodes/Barcode.java
Normal file
22
app/src/main/java/protect/card_locker/barcodes/Barcode.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
/**
|
||||
* Abstract barcode class
|
||||
*/
|
||||
public abstract class Barcode {
|
||||
public String name() {
|
||||
return format().name();
|
||||
};
|
||||
abstract public String prettyName();
|
||||
abstract public BarcodeFormat format();
|
||||
abstract public String exampleValue();
|
||||
|
||||
abstract public boolean isSquare();
|
||||
abstract public boolean is2D();
|
||||
public boolean hasInternalPadding() {
|
||||
return false;
|
||||
};
|
||||
public boolean isSupported() { return true; };
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class BarcodeFactory {
|
||||
public static final Map<String, BarcodeFormat> barcodeNames = new HashMap<>() {{
|
||||
put(BarcodeFormat.AZTEC.name(), BarcodeFormat.AZTEC);
|
||||
put(BarcodeFormat.CODE_39.name(), BarcodeFormat.CODE_39);
|
||||
put(BarcodeFormat.CODE_93.name(), BarcodeFormat.CODE_93);
|
||||
put(BarcodeFormat.CODE_128.name(), BarcodeFormat.CODE_128);
|
||||
put(BarcodeFormat.CODABAR.name(), BarcodeFormat.CODABAR);
|
||||
put(BarcodeFormat.DATA_MATRIX.name(), BarcodeFormat.DATA_MATRIX);
|
||||
put(BarcodeFormat.EAN_8.name(), BarcodeFormat.EAN_8);
|
||||
put(BarcodeFormat.EAN_13.name(), BarcodeFormat.EAN_13);
|
||||
put(BarcodeFormat.ITF.name(), BarcodeFormat.ITF);
|
||||
put(BarcodeFormat.PDF_417.name(), BarcodeFormat.PDF_417);
|
||||
put(BarcodeFormat.QR_CODE.name(), BarcodeFormat.QR_CODE);
|
||||
put(BarcodeFormat.UPC_A.name(), BarcodeFormat.UPC_A);
|
||||
put(BarcodeFormat.UPC_E.name(), BarcodeFormat.UPC_E);
|
||||
}};
|
||||
|
||||
public static Barcode fromBarcode(BarcodeFormat barcodeFormat) {
|
||||
switch (barcodeFormat) {
|
||||
case AZTEC: return new AztecBarcode();
|
||||
case CODE_39: return new Code39Barcode();
|
||||
case CODE_93: return new Code93Barcode();
|
||||
case CODE_128: return new Code128Barcode();
|
||||
case CODABAR: return new CodabarBarcode();
|
||||
case DATA_MATRIX: return new DataMatrixBarcode();
|
||||
case EAN_8: return new Ean8Barcode();
|
||||
case EAN_13: return new Ean13Barcode();
|
||||
case ITF: return new ItfBarcode();
|
||||
case PDF_417: return new Pdf417Barcode();
|
||||
case QR_CODE: return new QrCodeBarcode();
|
||||
case UPC_A: return new UpcABarcode();
|
||||
case UPC_E: return new UpcEBarcode();
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
public static Barcode fromName(String name) {
|
||||
return fromBarcode(Objects.requireNonNull(barcodeNames.get(name)));
|
||||
}
|
||||
|
||||
public static boolean isSupported(BarcodeFormat barcodeFormat) {
|
||||
return barcodeNames.containsValue(barcodeFormat);
|
||||
}
|
||||
|
||||
public static boolean isSupported(String name) {
|
||||
return barcodeNames.containsKey(name);
|
||||
}
|
||||
|
||||
public static Collection<BarcodeFormat> getAllFormats() {
|
||||
return barcodeNames.values();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
public class BarcodeWithValue {
|
||||
private final Barcode mBarcode;
|
||||
private final String mValue;
|
||||
|
||||
public BarcodeWithValue(Barcode barcode, String value) {
|
||||
mBarcode = barcode;
|
||||
mValue = value;
|
||||
}
|
||||
|
||||
public Barcode barcode() {
|
||||
return mBarcode;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return mValue;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class CodabarBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Codabar";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.CODABAR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "C0C";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInternalPadding() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Code128Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Code 128";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.CODE_128;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "CODE_128";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Code39Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Code 39";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.CODE_39;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "CODE_39";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInternalPadding() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Code93Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Code 93";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.CODE_93;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "CODE_93";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class DataMatrixBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "Data Matrix";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.DATA_MATRIX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "DATA_MATRIX";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Ean13Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "EAN 13";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.EAN_13;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "5901234123457";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Ean8Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "EAN 8";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.EAN_8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "32123456";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class ItfBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "ITF";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.ITF;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "1003";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class Pdf417Barcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "PDF 417";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.PDF_417;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "PDF_417";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInternalPadding() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class QrCodeBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "QR Code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.QR_CODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "QR_CODE";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInternalPadding() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class UpcABarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "UPC A";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.UPC_A;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "123456789012";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package protect.card_locker.barcodes;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
public class UpcEBarcode extends Barcode {
|
||||
@Override
|
||||
public String prettyName() {
|
||||
return "UPC E";
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarcodeFormat format() {
|
||||
return BarcodeFormat.UPC_E;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exampleValue() {
|
||||
return "0123456";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSquare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is2D() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,6 @@ import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Group;
|
||||
|
||||
@@ -18,7 +18,6 @@ import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
@@ -24,7 +24,6 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.ImageLocationType;
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
@@ -14,8 +14,8 @@ Petr Novák
|
||||
Joel A
|
||||
Michael Moroni
|
||||
Taco
|
||||
Gediminas Murauskas
|
||||
SlavekB
|
||||
Gediminas Murauskas
|
||||
Nyatsuki
|
||||
Samantaz Fox
|
||||
laralem
|
||||
@@ -62,6 +62,7 @@ Neko Nekowazarashi
|
||||
Rosdyana Kusuma
|
||||
umoenks
|
||||
Thomas Bertels
|
||||
Wanath
|
||||
Runner
|
||||
ce i moa
|
||||
inesre
|
||||
@@ -86,6 +87,7 @@ danieluhrinyi
|
||||
Kasina Dheeraj
|
||||
Donno
|
||||
Eric
|
||||
Evgeniy Khramov
|
||||
Flav
|
||||
Franciszek Stefan
|
||||
Grzegorz
|
||||
@@ -94,11 +96,14 @@ Izzy
|
||||
Jean-Baptiste
|
||||
Jean-Luc Tibaux
|
||||
krkk
|
||||
Lisa
|
||||
bittin
|
||||
Manan Jhaveri
|
||||
Marco
|
||||
Mattia
|
||||
Michael Gangolf
|
||||
Moi Toi
|
||||
DivideEtImpera
|
||||
pbeckmann
|
||||
Peer Beckmann
|
||||
Quang Nguyen
|
||||
@@ -112,12 +117,14 @@ Simone Dotto
|
||||
Subhashish Anand
|
||||
Titas Pažereckas
|
||||
Tom Sawyer
|
||||
Tomer Ben-Rachel
|
||||
Tony C
|
||||
Tymofii Lytvynenko
|
||||
Vancha March
|
||||
Yevgeny M
|
||||
Avik Kundu
|
||||
gbonaspetti
|
||||
mtrmirez
|
||||
opsik
|
||||
pooyanazari
|
||||
psa-jforestier
|
||||
|
||||
@@ -102,7 +102,6 @@
|
||||
<string name="barcodeId">قيمة الباركود</string>
|
||||
<string name="sameAsCardId">نفس بطاقة الهوية</string>
|
||||
<string name="setBarcodeId">قم بتعيين قيمة الباركود</string>
|
||||
<string name="unsupportedBarcodeType">لا يمكن عرض نوع الباركود هذا. قد يكون مدعومًا في إصدار أحدث من التطبيق.</string>
|
||||
<string name="wrongValueForBarcodeType">القيمة غير صالحة لنوع الباركود المحدد</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">تم نسخ بطاقات الهوية إلى الحافظة</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">أريد مشاركة بعض البطاقات معك</string>
|
||||
|
||||
@@ -148,7 +148,6 @@
|
||||
<string name="addFromImage">Избор от галерията</string>
|
||||
<string name="addManually">Ръчно въвеждане</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Оставяте промените незапазени\?</string>
|
||||
<string name="unsupportedBarcodeType">Щрихкод от този вид не може да бъде показан. Може да бъде поддържан в следващо издание.</string>
|
||||
<string name="importStocard">Внасяне от Stocard</string>
|
||||
<string name="importVoucherVault">Внасяне от Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Изберете файла <i>vouchervault.json</i>, предварително изнесен от Voucher Vault.
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
<string name="barcodeId">বারকোড আইডি</string>
|
||||
<string name="sameAsCardId">কার্ড আইডির মতো</string>
|
||||
<string name="setBarcodeId">বারকোড আইডি সেট করুন</string>
|
||||
<string name="unsupportedBarcodeType">অসমর্থিত বারকোড টাইপ</string>
|
||||
<string name="wrongValueForBarcodeType">বারকোড টাইপের জন্য ভুল মান</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ক্লিপবোর্ড একাধিক টোস্টে অনুলিপি করুন</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">url থেকে ইন্টেন্ট ইম্পোর্ট কার্ড একাধিক টেক্সট শেয়ার করে</string>
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
<string name="barcodeId">Barcode vrijednost</string>
|
||||
<string name="sameAsCardId">Isto kao i kartica</string>
|
||||
<string name="setBarcodeId">Postavi vrijednost za bar kod</string>
|
||||
<string name="unsupportedBarcodeType">Ovaj bar kod još nije prikazan. Ona može biti podržana u kasnijoj verziji app.</string>
|
||||
<string name="wrongValueForBarcodeType">Izabrana vrijednost nije izvršna</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">IDs kartica kopiran u clipboard</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Želim podijeliti karte s tobom</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Chci s vámi sdílet karty</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID zkopírována do schránky</string>
|
||||
<string name="wrongValueForBarcodeType">Hodnota není platná pro vybraný typ čárového kódu</string>
|
||||
<string name="unsupportedBarcodeType">Tento typ čárového kódu zatím nelze zobrazit. Možná bude podporován v pozdější verzi aplikace.</string>
|
||||
<string name="barcodeId">Hodnota čárového kódu</string>
|
||||
<string name="setBarcodeId">Nastavení hodnoty čárového kódu</string>
|
||||
<string name="sameAsCardId">Stejné jako ID</string>
|
||||
|
||||
@@ -131,7 +131,6 @@
|
||||
<string name="noBarcodeFound">Kein Barcode erkannt</string>
|
||||
<string name="addFromImage">Bild aus der Galerie wählen</string>
|
||||
<string name="settings_max_font_size_scale">Maximale Schriftgröße</string>
|
||||
<string name="unsupportedBarcodeType">Dieser Barcodetyp kann noch nicht angezeigt werden. Wir hoffen das Format in einer zukünftigen Version zu unterstützen.</string>
|
||||
<string name="wrongValueForBarcodeType">Der Wert ist für den gewählten Barcodetyp leider nicht gültig</string>
|
||||
<string name="app_resources">Freie Ressourcen von Drittanbietern: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Freie Bibliotheken von Drittanbietern: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
|
||||
@@ -148,7 +148,6 @@
|
||||
<string name="setFrontImage">Επιλογή μπροστινής εικόνας</string>
|
||||
<string name="importVoucherVaultMessage">Επιλέξτε την <i>vouchervault.json</i> εξαγωγή από το Voucher Vault για εισαγωγή.
|
||||
\nΔημιουργήστε το επιλέγοντας Εξαγωγή στο Voucher Vault.</string>
|
||||
<string name="unsupportedBarcodeType">Ο τύπος γραμμοκώδικα δεν γίνεται να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
|
||||
<string name="frontImageDescription">Μπροστινή εικόνα</string>
|
||||
<string name="photos">Φωτογραφίες</string>
|
||||
<string name="backImageDescription">Οπίσθια εικόνα</string>
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="editCardTitle">Editar tarjeta</string>
|
||||
<string name="addCardTitle">Añadir tarjeta</string>
|
||||
<string name="scanCardBarcode">Escanear código de barras de la tarjeta</string>
|
||||
<string name="scanCardBarcode">Escanear código de barras</string>
|
||||
<string name="cardShortcut">Atajo de tarjeta</string>
|
||||
<string name="noCardsMessage">Añada una tarjeta primero</string>
|
||||
<string name="noStoreError">No se proporcionó ningún nombre</string>
|
||||
<string name="noCardIdError">Id. de tarjeta no especificado</string>
|
||||
<string name="noCardExistsError">No se ha podido encontrar la tarjeta</string>
|
||||
<string name="noCardIdError">No se ha introducido ninguna código</string>
|
||||
<string name="noCardExistsError">No se ha podido encontrar esa tarjeta</string>
|
||||
<string name="importExport">Importar/Exportar</string>
|
||||
<string name="exportName">Exportar</string>
|
||||
<string name="importExportHelp">El respaldo le permite transferir sus datos a otro dispositivo.</string>
|
||||
<string name="importExportHelp">Hacer una copia de seguridad de los datos permite trasladarlos a otro dispositivo.</string>
|
||||
<string name="importSuccessfulTitle">Importado</string>
|
||||
<string name="importFailedTitle">Falló la importación</string>
|
||||
<string name="importFailed">No se han podido importar</string>
|
||||
<string name="importFailed">No se ha podido realizar la importación</string>
|
||||
<string name="exportSuccessfulTitle">Exportado</string>
|
||||
<string name="exportFailedTitle">Falló la exportación</string>
|
||||
<string name="exportFailed">No se han podido exportar</string>
|
||||
@@ -53,13 +53,13 @@
|
||||
<string name="settings_light_theme">Claro</string>
|
||||
<string name="settings_system_theme">Sistema</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="enterBarcodeInstructions">Introduzca el identificador de tarjeta y seleccione el código de barras que se utilizará, o de lo contrario, elija «Esta tarjeta no tiene código de barras».</string>
|
||||
<string name="enterBarcodeInstructions">Introduzca el código, y elija un tipo de código de barras a continuación, o «No hay código de barras».</string>
|
||||
<string name="app_copyright_old">Basado en Loyalty Card Keychain
|
||||
\nderechos de autor © 2016-2020 de Branden Archer</string>
|
||||
<string name="exportOptionExplanation">Los datos se guardarán en la ubicación que elija.</string>
|
||||
<string name="failedParsingImportUriError">No se pudo procesar el URI de importación</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="barcodeNoBarcode">Esta tarjeta no tiene código de barras</string>
|
||||
<string name="barcodeNoBarcode">No hay código de barras</string>
|
||||
<string name="barcodeType">Tipo de código de barras</string>
|
||||
<string name="noMatchingGiftCards">Sin resultados. Intente cambiar su búsqueda.</string>
|
||||
<string name="action_search">Buscar</string>
|
||||
@@ -85,6 +85,7 @@
|
||||
<string name="star">Añadir a favoritos</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> tarjeta</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> tarjetas</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> tarjetas</item>
|
||||
</plurals>
|
||||
<string name="points">Puntos</string>
|
||||
@@ -103,21 +104,21 @@
|
||||
<string name="app_libraries">Bibliotecas de terceros libres: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="settings_max_font_size_scale">Tam. de fuente máximo</string>
|
||||
<string name="importCatimaMessage">Seleccione su <i>catima.zip</i> exportado desde Catima para importarlo.
|
||||
\nO créalo primero desde el menú Importar/Exportar de otra app de Catima al presionar Exportar desde allí.</string>
|
||||
\nCréalo primero desde el menú Importar/Exportar de otra app de Catima al presionar Exportar desde allí.</string>
|
||||
<string name="importFidmeMessage">Seleccione su <i>fidme-export-request-xxxxxx.zip</i> exportado desde FidMe para importar, y luego escoja los tipos de códigos de barras manualmente.
|
||||
\nO créalo primero desde tu perfil de FidMe eligiendo Protección de datos y pulsa Extraer mis datos.</string>
|
||||
\nCréalo primero desde tu perfil de FidMe eligiendo Protección de datos y pulsa Extraer mis datos.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Seleccione su <i>LoyaltyCardKeychain.csv</i> exportado desde Loyalty Card Keychain para importarlo.
|
||||
\nO créalo primero desde el menú Importar/Exportar en Loyalty Card Keychain pulsando Exportar desde allí.</string>
|
||||
\nCréalo primero desde el menú Importar/Exportar en Loyalty Card Keychain pulsando Exportar desde allí.</string>
|
||||
<string name="importStocardMessage">Seleccione su exportación <i>*-sync.zip</i> de Stocard para importarla.
|
||||
\nO consígalo enviando un correo electrónico a support@stocardapp.com solicitando una exportación de sus datos.</string>
|
||||
\nConsígalo enviando un correo electrónico a support@stocardapp.com solicitando una exportación de sus datos.</string>
|
||||
<string name="importVoucherVaultMessage">Seleccione su <i>vouchervault.json</i> exportado desde Voucher Vault para importarlo.
|
||||
\nO créalo pulsando primero Exportar en Voucher Vault.</string>
|
||||
\nCréalo pulsando primero Exportar en Voucher Vault.</string>
|
||||
<string name="failedGeneratingShareURL">No se ha podido generar una URL compartible. Por favor, informe de ello.</string>
|
||||
<string name="passwordRequired">Por favor, introduzca la contraseña</string>
|
||||
<string name="updateBarcodeQuestionText">Ha cambiado la Id. de la tarjeta. ¿Desea actualizar también el código de barras para usar el mismo valor\?</string>
|
||||
<string name="updateBarcodeQuestionText">Ha cambiado el código. ¿Desea actualizar también el código de barras para usar el mismo valor\?</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Quiero compartirte algunas tarjetas</string>
|
||||
<string name="setBackImage">Establecer imagen anversa</string>
|
||||
<string name="card_ids_copied">Id. de tarjetas copiadas</string>
|
||||
<string name="card_ids_copied">Código(s) copiado(s)</string>
|
||||
<string name="turn_flashlight_off">Apagar linterna</string>
|
||||
<string name="turn_flashlight_on">Encender linterna</string>
|
||||
<string name="no">No</string>
|
||||
@@ -127,13 +128,12 @@
|
||||
<string name="removeImage">Quitar imagen</string>
|
||||
<string name="setFrontImage">Establecer imagen frontal</string>
|
||||
<string name="photos">Fotos</string>
|
||||
<string name="backImageDescription">Imagen del reverso de la tarjeta</string>
|
||||
<string name="frontImageDescription">Imagen frontal de la tarjeta</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID de tarjetas copiadas al portapapeles</string>
|
||||
<string name="backImageDescription">Imagen del reverso</string>
|
||||
<string name="frontImageDescription">Imagen frontal</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Códigos copiados al portapapeles</string>
|
||||
<string name="wrongValueForBarcodeType">El valor no es válido para el tipo de código de barras seleccionado</string>
|
||||
<string name="unsupportedBarcodeType">Este tipo de código de barras todavía no se puede visualizar. Es posible que se admita en una futura versión de la aplicación.</string>
|
||||
<string name="setBarcodeId">Establecer valor de código de barra</string>
|
||||
<string name="sameAsCardId">Igual que la ID de tarjeta</string>
|
||||
<string name="sameAsCardId">Igual que el código</string>
|
||||
<string name="barcodeId">Valor de código de barra</string>
|
||||
<string name="importVoucherVault">Importar desde Voucher Vault</string>
|
||||
<string name="importStocard">Importar desde Stocard</string>
|
||||
@@ -154,7 +154,7 @@
|
||||
<string name="noBarcodeFound">No se encontró código de barras</string>
|
||||
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="addFromImage">Selecciona imagen desde galería</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Evitar bloqueo de pantalla</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Evitar el bloqueo de pantalla</string>
|
||||
<string name="settings_keep_screen_on">Mantener pantalla encendida</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> tarjeta seleccionada</item>
|
||||
@@ -164,10 +164,12 @@
|
||||
<string name="deleteConfirmation">¿Quiere eliminar permanentemente esta tarjeta\?</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">¿Borrar esta tarjeta <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
<item quantity="many">¿Borrar estas tarjetas <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
<item quantity="other">¿Borrar estas tarjetas <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Borrar <xliff:g>%d</xliff:g> tarjeta</item>
|
||||
<item quantity="many">Borrar <xliff:g>%d</xliff:g> tarjetas</item>
|
||||
<item quantity="other">Borrar <xliff:g>%d</xliff:g> tarjetas</item>
|
||||
</plurals>
|
||||
<string name="app_contributors">Hecho posible por: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
@@ -187,6 +189,7 @@
|
||||
<string name="settings_landscape_orientation">Horizontal</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> punto</item>
|
||||
<item quantity="many"><xliff:g>%s</xliff:g> puntos</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> puntos</item>
|
||||
</plurals>
|
||||
<string name="barcodeImageDescriptionWithType">Imagen <xliff:g>%s</xliff:g> código de barras</string>
|
||||
@@ -195,6 +198,63 @@
|
||||
<string name="group_edit">Editar grupo</string>
|
||||
<string name="group_updated">Grupo actualizado</string>
|
||||
<string name="noGiftCardsGroup">Cree algunas tarjetas y luego asígnelas al grupo aquí.</string>
|
||||
<string name="settings_follow_system_orientation">Seguir sistema</string>
|
||||
<string name="settings_follow_system_orientation">Seguir el sistema</string>
|
||||
<string name="settings_lock_on_opening_orientation">Bloqueo a la orientación utilizada al abrir la tarjeta</string>
|
||||
<string name="sort_by_most_recently_used">Lo más reciente que se ha utilizado</string>
|
||||
<string name="sort_by_expiry">Caducidad</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="version_history">Historial de versiones</string>
|
||||
<string name="help_translate_this_app">Ayuda a traducir esta aplicación</string>
|
||||
<string name="and_data_usage">y el uso de datos</string>
|
||||
<string name="shortcutSelectCard">Seleccione una tarjeta</string>
|
||||
<string name="showMoreInfo">Mostrar información</string>
|
||||
<string name="hideMoreInfo">Ocultar información</string>
|
||||
<string name="reverse">… en orden inverso</string>
|
||||
<string name="credits">Créditos</string>
|
||||
<string name="sort_by_name">Nombre</string>
|
||||
<string name="license">Licencia</string>
|
||||
<string name="source_repository">Repositorio de fuente</string>
|
||||
<string name="set_scale">Ajustar la escala</string>
|
||||
<string name="on_github">En GitHub</string>
|
||||
<string name="on_google_play">en Google Play</string>
|
||||
<string name="report_error">Informar de un error</string>
|
||||
<string name="action_hide_details">Ocultar detalles</string>
|
||||
<string name="translate_platform">en Weblate</string>
|
||||
<string name="action_show_details">Mostrar detalles</string>
|
||||
<string name="selectColor">Seleccione el color</string>
|
||||
<string name="setIcon">Establecer icono</string>
|
||||
<string name="sort">Ordenar</string>
|
||||
<string name="swipeToSwitchImages">Desliza el dedo o haz una pulsación larga para cambiar de imagen</string>
|
||||
<string name="sort_by">Ordenar por</string>
|
||||
<string name="rate_this_app">Califica esta aplicación</string>
|
||||
<string name="options">Opciones</string>
|
||||
<string name="failedToOpenUrl">Instale primero un navegador web</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Ver archivo (<xliff:g>%1$d</xliff:g> tarjeta)</item>
|
||||
<item quantity="many">Ver archivo (<xliff:g>%1$d</xliff:g> tarjetas)</item>
|
||||
<item quantity="other">Ver archivo (<xliff:g>%1$d</xliff:g> tarjetas)</item>
|
||||
</plurals>
|
||||
<string name="welcome">Bienvenido/a a Catima</string>
|
||||
<string name="group_name_already_in_use">Nombre del grupo ya está en uso</string>
|
||||
<string name="group_name_is_empty">El nombre del grupo no puede estar vacío</string>
|
||||
<string name="settings_oled_dark">Fondo negro puro para el tema oscuro</string>
|
||||
<string name="exportPasswordHint">Introduzca la contraseña</string>
|
||||
<string name="previousCard">Anterior</string>
|
||||
<string name="nextCard">Siguiente</string>
|
||||
<string name="editGroup">Edición del grupo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="include_if_asking_support">Si desea solicitar apoyo, incluya la siguiente información:</string>
|
||||
<string name="duplicateCard">Duplicar</string>
|
||||
<string name="unarchive">Desarchivar</string>
|
||||
<string name="archive">Archivar</string>
|
||||
<string name="archived">Tarjeta archivada</string>
|
||||
<string name="unarchived">Tarjeta desarchivada</string>
|
||||
<string name="archiveList">Archivo</string>
|
||||
<string name="noUnarchivedCardsMessage">No existen tarjetas sin archivar</string>
|
||||
<string name="exportPassword">Establezca una contraseña para proteger su exportación (opcional)</string>
|
||||
<string name="failedLaunchingPhotoPicker">No se ha podido encontrar una aplicación de galería compatible</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> tarjeta (archivada)<xliff:g id="archivedCount">%2$d</xliff:g></item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> tarjetas (archivadas)<xliff:g id="archivedCount">%2$d</xliff:g></item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> tarjetas (archivadas)<xliff:g id="archivedCount">%2$d</xliff:g></item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -8,7 +8,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Haluan jakaa joitain kortteja kanssasi</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID-tunnukset kopioitu leikepöydälle</string>
|
||||
<string name="wrongValueForBarcodeType">Arvo ei ole kelvollinen valitulle viivakoodityypille</string>
|
||||
<string name="unsupportedBarcodeType">Tätä viivakoodityyppiä ei voi vielä näyttää. Sitä saatetaan tukea sovelluksen myöhemmässä versiossa.</string>
|
||||
<string name="setBarcodeId">Aseta viivakoodin arvo</string>
|
||||
<string name="sameAsCardId">Sama kuin ID-tunnus</string>
|
||||
<string name="barcodeId">Viivakoodin arvo</string>
|
||||
@@ -245,4 +244,10 @@
|
||||
<string name="duplicateCard">Duplikaatti</string>
|
||||
<string name="previousCard">Edellinen</string>
|
||||
<string name="nextCard">Seuraava</string>
|
||||
<string name="failedToOpenUrl">Asenna ensin verkkoselain</string>
|
||||
<string name="welcome">Tervetuloa Catimaan</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Näytä arkisto (<xliff:g>%1$d</xliff:g> kortti)</item>
|
||||
<item quantity="other">Näytä arkisto (<xliff:g>%1$d</xliff:g> korttia)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -97,7 +97,7 @@
|
||||
<string name="chooseImportType">Importer les données depuis</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> ne semble pas être un solde valide.</string>
|
||||
<string name="points">Points</string>
|
||||
<string name="currency">Monnaie</string>
|
||||
<string name="currency">Devise</string>
|
||||
<string name="balance">Solde</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Centrer le code-barres sur l’écran</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Déplacez le code-barres vers le haut de l’écran</string>
|
||||
@@ -131,7 +131,6 @@
|
||||
<string name="sameAsCardId">Identique à l’identifiant</string>
|
||||
<string name="barcodeId">Valeur du code-barres</string>
|
||||
<string name="settings_max_font_size_scale">Taille max. de la police</string>
|
||||
<string name="unsupportedBarcodeType">Ce type de code-barres ne peut pas encore être affiché. Il sera peut-être pris en charge dans une version ultérieure de l’application.</string>
|
||||
<string name="wrongValueForBarcodeType">La valeur n’est pas valide pour le type de code-barres sélectionné</string>
|
||||
<string name="app_resources">Ressources tierces libres : <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Bibliothèques tierces libres : <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
|
||||
@@ -51,4 +51,19 @@
|
||||
<string name="exportFailedTitle">הייצוא נכשל</string>
|
||||
<string name="importing">מייבא…</string>
|
||||
<string name="exporting">ייצוא…</string>
|
||||
<string name="exportOptionExplanation">המידע יכתב למיקום שאת/ה תבחר/י.</string>
|
||||
<string name="importOptionFilesystemTitle">יבא ממערכת קבצים</string>
|
||||
<string name="importOptionFilesystemExplanation">בחר/י קובץ מסויים ממערכת הקבצים.</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">אחד</item>
|
||||
<item quantity="two">שניים</item>
|
||||
<item quantity="many">מעט</item>
|
||||
<item quantity="other">אחר</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">אחד</item>
|
||||
<item quantity="two">שניים</item>
|
||||
<item quantity="many">מעט</item>
|
||||
<item quantity="other">אחר</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -151,7 +151,6 @@
|
||||
<string name="barcodeId">Vonalkód érték</string>
|
||||
<string name="sameAsCardId">Ugyanaz, mint az azonosító</string>
|
||||
<string name="setBarcodeId">Vonalkód érték beállítása</string>
|
||||
<string name="unsupportedBarcodeType">Ez a vonalkód típus még nem megjeleníthető. Feltehetően támogatva lesz egy későbbi verzióban.</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Azonosítók a vágólapra másolva</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Meg akarok veled osztani pár kártyát</string>
|
||||
<string name="frontImageDescription">Előlapi kép</string>
|
||||
|
||||
@@ -167,7 +167,6 @@
|
||||
<string name="importVoucherVault">Impor dari Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Pilih ekspor <i>vouchervault.json</i> Anda dari Vault Voucher untuk diimpor.
|
||||
\nBuat dengan menekan Ekspor di Vault Voucher terlebih dahulu.</string>
|
||||
<string name="unsupportedBarcodeType">Jenis barcode ini belum dapat ditampilkan. Ini mungkin didukung di versi aplikasi yang lebih baru.</string>
|
||||
<string name="wrongValueForBarcodeType">Nilai tidak berlaku untuk jenis barcode yang dipilih</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID disalin ke papan klip</string>
|
||||
<string name="frontImageDescription">Gambar depan</string>
|
||||
|
||||
@@ -131,7 +131,6 @@
|
||||
<string name="noBarcodeFound">Nessun codice a barre trovato</string>
|
||||
<string name="addFromImage">Seleziona immagine dalla galleria</string>
|
||||
<string name="settings_max_font_size_scale">Dimensione massima del carattere</string>
|
||||
<string name="unsupportedBarcodeType">Questo tipo di codice a barre non può ancora essere visualizzato. Potrebbe essere supportato in una versione successiva dell\'applicazione.</string>
|
||||
<string name="wrongValueForBarcodeType">Il valore non è valido per il tipo di codice a barre selezionato</string>
|
||||
<string name="app_resources">Risorse libere di terze parti: <xliff:g id="app_resources_list"> %s </xliff:g></string>
|
||||
<string name="app_libraries">Librerie libere di terze parti: <xliff:g id="app_libraries_list"> %s </xliff:g></string>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="wrongValueForBarcodeType">選択したバーコード形式ではこの番号は使用できません</string>
|
||||
<string name="unsupportedBarcodeType">このバーコード形式は表示できません。将来のアップデートにより対応するかもしれません。</string>
|
||||
<string name="setBarcodeId">バーコード番号を設定</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">インポートするにはLoyalty Card Keychainでエクスポートした <i>LoyaltyCardKeychain.csv</i>ファイルを選択してください。
|
||||
\nファイルがない場合、 Loyalty Card Keychainアプリからファイルをエクスポートしてください。</string>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<string name="importFailedTitle">가져오기 실패</string>
|
||||
<string name="importSuccessfulTitle">가져오기 완료</string>
|
||||
<string name="noCardIdError">카드 ID를 입력하지 않음</string>
|
||||
<string name="storeName">매장</string>
|
||||
<string name="storeName">이름</string>
|
||||
<string name="thumbnailDescription">카드 섬네일</string>
|
||||
<string name="importOptionApplicationButton">외부 앱 사용</string>
|
||||
<string name="failedParsingImportUriError">가져온 URI를 분석할 수 없음</string>
|
||||
@@ -74,4 +74,4 @@
|
||||
<string name="barcode">바코드</string>
|
||||
<string name="deleteConfirmation">정말 이 카드를 삭제하시겠습니까\?</string>
|
||||
<string name="deleteTitle">카드 제거</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -54,7 +54,6 @@
|
||||
<string name="updateBarcodeQuestionTitle">Aktualiséiert barcode-Wäert\?</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ech wëll eng Kaart mat dir deelen</string>
|
||||
<string name="importSuccessfulTitle">Anere sproochen</string>
|
||||
<string name="unsupportedBarcodeType">Dee barcode-Typ kann net ugewise ginn. Et kann zu enger spéiderer Versioun vun der App ënnerstëtzt ginn.</string>
|
||||
<string name="yes">Jo</string>
|
||||
<string name="importFailedTitle">Import fehlgeschlagen</string>
|
||||
<string name="importFailed">Kaarten konnten net anere sproochen ginn</string>
|
||||
|
||||
@@ -72,7 +72,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Noriu su jumis pasidalyti keliomis kortelėmis</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Kortelės ID nukopijuotas į iškarpinę</string>
|
||||
<string name="wrongValueForBarcodeType">Vertė netinkama pasirinktam brūkšninio kodo tipui</string>
|
||||
<string name="unsupportedBarcodeType">Šio brūkšninio kodo tipo dar negalima rodyti. Galbūt jis bus palaikomas vėlesnėje programėlės versijoje.</string>
|
||||
<string name="setBarcodeId">Nustatyti brūkšninio kodo reikšmę</string>
|
||||
<string name="sameAsCardId">Tokia pat kaip kortelės ID</string>
|
||||
<string name="barcodeId">Brūkšninio kodo reikšmė</string>
|
||||
|
||||
@@ -116,7 +116,6 @@
|
||||
<string name="errorReadingImage">Kunne ikke lese bildet</string>
|
||||
<string name="noBarcodeFound">Fant ingen strekkode</string>
|
||||
<string name="addFromImage">Velg bilde fra galleri</string>
|
||||
<string name="unsupportedBarcodeType">Denne strekkodetypen kan ikke vises for øyeblikket. Støtte kan bli lagt til i en senere versjon av programmet.</string>
|
||||
<string name="setBarcodeId">Sett strekkodeverdi</string>
|
||||
<string name="sameAsCardId">Samme som ID</string>
|
||||
<string name="barcodeId">Strekkodeverdi</string>
|
||||
|
||||
@@ -130,7 +130,6 @@
|
||||
<string name="sameAsCardId">Gelijk aan kaart-id</string>
|
||||
<string name="barcodeId">Barcodewaarde</string>
|
||||
<string name="settings_max_font_size_scale">Max. tekstgrootte</string>
|
||||
<string name="unsupportedBarcodeType">Dit type barcode kan nog niet worden getoond - we hopen hiervoor in een nieuwere versie ondersteuning toe te voegen.</string>
|
||||
<string name="wrongValueForBarcodeType">Deze waarde komt niet overeen met het gekozen barcodetype</string>
|
||||
<string name="app_resources">Vrije externe bronnen: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Vrije externe bibliotheken: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Chcę Ci udostępnić karty</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Skopiowano ID do schowka</string>
|
||||
<string name="wrongValueForBarcodeType">Wartość nie jest prawidłowa dla wybranego typu kodu kreskowego</string>
|
||||
<string name="unsupportedBarcodeType">Nie można jeszcze wyświetlić tego typu kodu kreskowego. Być może będzie on obsługiwany w nowszej wersji aplikacji.</string>
|
||||
<string name="setBarcodeId">Ustaw wartość kodu kreskowego</string>
|
||||
<string name="sameAsCardId">Taki sam jak ID</string>
|
||||
<string name="barcodeId">Wartość kodu kreskowego</string>
|
||||
|
||||
@@ -161,7 +161,6 @@
|
||||
<string name="importVoucherVault">Importar do Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Selecione a exportação <i>vouchervault.json</i> do Voucher Vault para importar.
|
||||
\nCrie-a primeiro pressionando a opção \"Exportar\" no Voucher Vault.</string>
|
||||
<string name="unsupportedBarcodeType">Este tipo de código de barras ainda não pode ser mostrado. Pode vir a ser suportado numa versão posterior da aplicação.</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Identificação copiado para a área de transferência</string>
|
||||
<string name="setFrontImage">Definir imagem frontal</string>
|
||||
<string name="setBackImage">Definir imagem de trás</string>
|
||||
|
||||
@@ -132,7 +132,6 @@
|
||||
<string name="sameAsCardId">Как номер</string>
|
||||
<string name="barcodeId">Значение штрих-кода</string>
|
||||
<string name="settings_max_font_size_scale">Максимальный размер шрифта</string>
|
||||
<string name="unsupportedBarcodeType">В настоящее время данный тип штрих-кодов не отображается. Его поддержка может быть добавлена в следующих версиях приложения.</string>
|
||||
<string name="wrongValueForBarcodeType">Недопустимое значение для выбранного типа штрих-кода</string>
|
||||
<string name="app_resources">Свободные сторонние ресурсы: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Свободные сторонние библиотеки: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
|
||||
@@ -190,7 +190,6 @@
|
||||
<string name="barcodeId">Hodnota čiarového kódu</string>
|
||||
<string name="sameAsCardId">Rovnaké ako ID</string>
|
||||
<string name="setBarcodeId">Nastavenie hodnoty čiarového kódu</string>
|
||||
<string name="unsupportedBarcodeType">Tento typ čiarového kódu zatiaľ nie je možné zobraziť. Možno bude podporovaný v neskoršej verzii aplikácie.</string>
|
||||
<string name="wrongValueForBarcodeType">Hodnota nie je platná pre vybraný typ čiarového kódu</string>
|
||||
<string name="frontImageDescription">Obrázok prednej strany</string>
|
||||
<string name="backImageDescription">Obrázok zadnej strany</string>
|
||||
|
||||
@@ -156,5 +156,4 @@
|
||||
<string name="updateBarcodeQuestionText">Spremenili ste številko kartice. Želite posodobiti tudi črtno kodo na enako vrednost?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Posodobi črtno kodo?</string>
|
||||
<string name="removeImage">Odstrani sliko</string>
|
||||
<string name="unsupportedBarcodeType">Te vrste črtne kode aplikacija ne more prikazati. Morda bo to možno v prihodnosti.</string>
|
||||
</resources>
|
||||
@@ -72,7 +72,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Jag vill dela några kort med dig</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID:n kopierades till Urklipp</string>
|
||||
<string name="wrongValueForBarcodeType">Värdet är inte giltigt för den valda streckkodstypen</string>
|
||||
<string name="unsupportedBarcodeType">Denna streckkodstyp kan ännu inte visas. Den kan komma att stödjas i en senare version av appen.</string>
|
||||
<string name="setBarcodeId">Ange streckkodsvärde</string>
|
||||
<string name="sameAsCardId">Samma som ID:t</string>
|
||||
<string name="turn_flashlight_on">Sätt på ficklampa</string>
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Seninle birkaç kart paylaşmak istiyorum</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Numaralar panoya kopyalandı</string>
|
||||
<string name="wrongValueForBarcodeType">Değer, seçilen barkod türü için geçerli değil</string>
|
||||
<string name="unsupportedBarcodeType">Bu barkod türü henüz görüntülenemiyor. Uygulamanın sonraki bir sürümünde desteklenebilir.</string>
|
||||
<string name="setBarcodeId">Barkod değerini ayarla</string>
|
||||
<string name="sameAsCardId">Numarayla aynı</string>
|
||||
<string name="barcodeId">Barkod değeri</string>
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
<string name="updateBarcodeQuestionText">Ви змінили ID. Чи ви бажаєте оновити штрих-код для використання цього ж значення\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Оновити значення штрих-коду\?</string>
|
||||
<string name="wrongValueForBarcodeType">Значення не дійсне для обраного типу штрих-коду</string>
|
||||
<string name="unsupportedBarcodeType">Цей тип штрих-коду поки що не відображається. Підтримку може бути додано в подальших версіях програми.</string>
|
||||
<string name="setBarcodeId">Встановіть значення штрих-коду</string>
|
||||
<string name="sameAsCardId">Таке ж як ID</string>
|
||||
<string name="barcodeId">Значення штрих-коду</string>
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
<string name="intent_import_card_from_url_share_multiple_text">我想和你分享一些卡片</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">卡号已复制到剪贴板</string>
|
||||
<string name="wrongValueForBarcodeType">该值对所选条形码类型无效</string>
|
||||
<string name="unsupportedBarcodeType">此条形码类型尚无法显示。较新版本的应用程序可能提供支持。</string>
|
||||
<string name="setBarcodeId">设置条形码值</string>
|
||||
<string name="sameAsCardId">与卡号相同</string>
|
||||
<string name="barcodeId">条形码值</string>
|
||||
|
||||
@@ -194,7 +194,6 @@
|
||||
<string name="moveBarcodeToTopOfScreen">將條碼移至螢幕上方</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">將條碼移至螢幕中央</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="unsupportedBarcodeType">尚支援此條碼種類,但未來版本的應用程式可能會支援此條碼種類。</string>
|
||||
<string name="wrongValueForBarcodeType">條碼內容不適用於此條碼種類</string>
|
||||
<string name="backImageDescription">背面圖片</string>
|
||||
<string name="updateBarcodeQuestionText">您已更新了 ID,是否要更新條碼內容以匹配此 ID?</string>
|
||||
@@ -223,4 +222,5 @@
|
||||
<string name="options">選項</string>
|
||||
<string name="set_scale">設定大小</string>
|
||||
<string name="include_if_asking_support">如果您想請求協助,請附上以下訊息:</string>
|
||||
<string name="settings_card_orientation">條碼方向</string>
|
||||
</resources>
|
||||
@@ -199,7 +199,6 @@
|
||||
<string name="barcodeId">Barcode value</string>
|
||||
<string name="sameAsCardId">Same as ID</string>
|
||||
<string name="setBarcodeId">Set barcode value</string>
|
||||
<string name="unsupportedBarcodeType">This barcode type can\'t yet be displayed. It may be supported in a later version of the app.</string>
|
||||
<string name="wrongValueForBarcodeType">The value is not valid for the selected barcode type</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">IDs copied to clipboard</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">I want to share some cards with you</string>
|
||||
@@ -250,7 +249,9 @@
|
||||
<string name="sort">Sort</string>
|
||||
<string name="showMoreInfo">Show info</string>
|
||||
<string name="hideMoreInfo">Hide info</string>
|
||||
<string name="swipeToSwitchImages">Swipe or long press to switch images</string>
|
||||
<string name="swipeToSwitchImages">Swipe to switch images, hold to open image in the gallery app</string>
|
||||
<string name="failedToRetrieveImageFile">Failed to retrieve image file</string>
|
||||
<string name="barcodeLongPressMessage">Only images can be opened in the gallery app</string>
|
||||
<string name="sort_by_name">Name</string>
|
||||
<string name="sort_by_most_recently_used">Most Recently Used</string>
|
||||
<string name="sort_by_expiry">Expiry</string>
|
||||
@@ -298,4 +299,4 @@
|
||||
<item quantity="other">View archive (<xliff:g>%1$d</xliff:g> cards)</item>
|
||||
</plurals>
|
||||
<string name="welcome">Welcome to Catima</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,3 +1,4 @@
|
||||
<paths>
|
||||
<cache-path name="cachePath" path="/" />
|
||||
<files-path name="files" path="/" />
|
||||
</paths>
|
||||
1
fastlane/metadata/android/en-US/changelogs/115.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/115.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Open image in gallery on long-press
|
||||
@@ -1,4 +1,3 @@
|
||||
- Aggiunta icona monocolore per Android 13
|
||||
- Migliorata la schermata del primo avvio
|
||||
- Spostate le informazioni dell'archivio dal menù alla parte inferiore della lista di carte
|
||||
- Sistemato l'importazione da Fidme
|
||||
|
||||
3
fastlane/metadata/android/ru-RU/changelogs/10.txt
Normal file
3
fastlane/metadata/android/ru-RU/changelogs/10.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Изменено имя файла импорта/экспорта по умолчанию. (пулл #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
|
||||
- Исправлена строка на странице импорта/экспорта. (пулл #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
|
||||
- Улучшен макет страницы просмотра карты. Текст должен быть более удобным для чтения и выбираться длинным щелчком мыши. (пулл #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/100.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/100.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Скрыт значок поиска, расширения и сортировки, пока не будет хотя бы 1 карточки
|
||||
- Различные исправления тематического оформления
|
||||
3
fastlane/metadata/android/ru-RU/changelogs/101.txt
Normal file
3
fastlane/metadata/android/ru-RU/changelogs/101.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Исправление того, что кроппер не использовал цвет темы
|
||||
- Исправлены незначительные проблемы с темами
|
||||
- Добавлена чисто черная темная тема для OLED-экранов
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/102.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/102.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Различные мелкие исправления
|
||||
- Исправление сбоя при использовании норвежского перевода
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/103.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/103.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Исправление ручного выбора языка, который применялся не везде
|
||||
- Исправление сбоя в представлении редактирования на локали без региона
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/104.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/104.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Сохранение состояния расширения деталей карты
|
||||
- Незначительные исправления пользовательского интерфейса
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/105.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/105.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Исправление появления серого блока при недопустимом значении штрихкода
|
||||
- Исправления в импорте Stocard
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/106.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/106.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлены некоторые последовательности символов, отображаемые как один символ
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/107.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/107.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлен импорт Stocard
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/109.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/109.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлен неправильный цвет текста на кнопке «Нет штрих-кода».
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/33.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/33.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Обновлены и добавлены переводы
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/34.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/34.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Обновлён русский перевод
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/35.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/35.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Включено резервное копирование приложений
|
||||
- Обновление французского и словенского переводов
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/42.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/42.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление сбоя в поиске при отсутствии групп
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/45.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/45.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление срабатывания пролистывания домашнего экрана при вертикальном пролистывании
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/46.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/46.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Запоминание вкладки активной группы между экранами и сеансами
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/49.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/49.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Улучшены переводы
|
||||
- Небольшие исправления пользовательского интерфейса
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/51.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/51.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлен прозрачный фон нижнего листа
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/58.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/58.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлен сбой на версиях до Android 7
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/62.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/62.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление баланса парсинга для стран, использующих пробел в качестве разделителя
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/72.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/72.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление невозможности настройки фотографий в новой карте постоянного клиента
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/73.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/73.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправлена загрузка фотографий при редактировании существующей карты
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/84.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/84.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Минорные багфиксы и улучшения
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/86.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/86.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Улучшен поиск с пробелами
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/87.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/87.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление регрессии, нарушающей импорт/экспорт
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/88.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/88.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление некорректного перехода, в результате которого первая карта становилась невидимой
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/95.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/95.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление сбоя при совместном использовании карты
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/98.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/98.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Исправление различных ошибок, связанных с TalkBack
|
||||
1
fastlane/metadata/android/ru-RU/changelogs/99.txt
Normal file
1
fastlane/metadata/android/ru-RU/changelogs/99.txt
Normal file
@@ -0,0 +1 @@
|
||||
- редизайн под Material You
|
||||
Reference in New Issue
Block a user