Compare commits

..

27 Commits

Author SHA1 Message Date
Sylvia van Os
65d8d45018 WIP 2022-10-05 21:48:31 +02:00
Sylvia van Os
0e7a5428f6 Merge pull request #1062 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.9
Bump robolectric from 4.8.2 to 4.9
2022-10-03 18:18:38 +02:00
dependabot[bot]
8030eb52f3 Bump robolectric from 4.8.2 to 4.9
Bumps [robolectric](https://github.com/robolectric/robolectric) from 4.8.2 to 4.9.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.8.2...robolectric-4.9)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 02:36:38 +00:00
Sylvia van Os
9fc315158f Name Weblate in CONTRIBUTING.md 2022-10-02 19:24:48 +02:00
Sylvia van Os
971f68b0a1 Merge pull request #1059 from CatimaLoyalty/create-pull-request/patch-1664690892
Update contributors
2022-10-02 10:10:22 +02:00
TheLastProject
adfc17d5c2 Update contributors 2022-10-02 06:08:12 +00:00
Sylvia van Os
5ee2852e4c Merge pull request #1058 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-10-02 00:48:46 +02:00
J. Lavoie
ea1d42fa35 Translated using Weblate (Finnish)
Currently translated at 98.1% (259 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2022-10-01 21:20:34 +02:00
Lisa
f8b90f2c07 Translated using Weblate (Italian)
Currently translated at 16.9% (19 of 112 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2022-10-01 21:20:34 +02:00
J. Lavoie
6dc9821891 Translated using Weblate (French)
Currently translated at 100.0% (264 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-10-01 21:20:34 +02:00
J. Lavoie
93a2e9cdbf Translated using Weblate (Spanish)
Currently translated at 99.6% (263 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2022-10-01 21:20:34 +02:00
Sylvia van Os
6a9d54d6f0 Merge pull request #1055 from CatimaLoyalty/create-pull-request/patch-1664626344
Update Fastlane changelogs
2022-10-01 14:13:08 +02:00
TheLastProject
28f0b407b5 Update Fastlane changelogs 2022-10-01 12:12:24 +00:00
Sylvia van Os
89ed31ffe0 Update CHANGELOG 2022-10-01 14:12:08 +02:00
Manan Jhaveri
aa481ea094 View photos in gallery when Long Pressed (#1052)
* Open Native Image Viewer on long pressing a photo inside LoyaltyCardViewActivity

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

Signed-off-by: Manan Jhaveri <incrediblemanan@gmail.com>
2022-10-01 14:11:15 +02:00
bors[bot]
523aaef650 Merge #1051
1051: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: Tomer Ben Rachel <tomerpacific@gmail.com>
Co-authored-by: Evgeniy Khramov <thejenjagamertjg@gmail.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-10-01 09:50:55 +00:00
Sylvia van Os
a56c4d449d Remove broken translation 2022-10-01 11:50:22 +02:00
Evgeniy Khramov
1468130477 Translated using Weblate (Russian)
Currently translated at 28.5% (32 of 112 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2022-09-28 21:16:13 +02:00
Tomer Ben Rachel
0b5571a065 Translated using Weblate (Hebrew (Israel))
Currently translated at 35.2% (93 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2022-09-28 21:16:13 +02:00
Sylvia van Os
002c221390 Merge pull request #1050 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-09-26 21:25:16 +02:00
Oğuz Ersen
2272c88d04 Translated using Weblate (English)
Currently translated at 98.8% (261 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/en/
2022-09-26 20:28:50 +02:00
Wanath
6a58bd632f Translated using Weblate (Korean)
Currently translated at 35.9% (95 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2022-09-26 20:28:50 +02:00
Wanath
027a7f798d Translated using Weblate (English)
Currently translated at 98.8% (261 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/en/
2022-09-26 20:28:50 +02:00
Sylvia van Os
dd4ad6d860 Merge pull request #1048 from CatimaLoyalty/create-pull-request/patch-1664085704
Update contributors
2022-09-25 10:27:46 +02:00
TheLastProject
3342b8f83f Update contributors 2022-09-25 06:01:43 +00:00
Sylvia van Os
5951c74fc4 Merge pull request #1047 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-09-24 12:46:35 +02:00
Nate Higgers
2cae83c84f Translated using Weblate (Chinese (Traditional))
Currently translated at 93.1% (246 of 264 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2022-09-24 12:27:25 +02:00
98 changed files with 808 additions and 293 deletions

View File

@@ -1,5 +1,9 @@
# Changelog
## Unreleased - 115
- Open image in gallery on long-press
## v2.20.0 - 114
- Add Monochrome icon for Android 13

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 à lidentifiant</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 lapplication.</string>
<string name="wrongValueForBarcodeType">La valeur nest 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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,4 @@
<paths>
<cache-path name="cachePath" path="/" />
<files-path name="files" path="/" />
</paths>

View File

@@ -0,0 +1 @@
- Open image in gallery on long-press

View File

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

View 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))

View File

@@ -0,0 +1,2 @@
- Скрыт значок поиска, расширения и сортировки, пока не будет хотя бы 1 карточки
- Различные исправления тематического оформления

View File

@@ -0,0 +1,3 @@
- Исправление того, что кроппер не использовал цвет темы
- Исправлены незначительные проблемы с темами
- Добавлена чисто черная темная тема для OLED-экранов

View File

@@ -0,0 +1,2 @@
- Различные мелкие исправления
- Исправление сбоя при использовании норвежского перевода

View File

@@ -0,0 +1,2 @@
- Исправление ручного выбора языка, который применялся не везде
- Исправление сбоя в представлении редактирования на локали без региона

View File

@@ -0,0 +1,2 @@
- Сохранение состояния расширения деталей карты
- Незначительные исправления пользовательского интерфейса

View File

@@ -0,0 +1,2 @@
- Исправление появления серого блока при недопустимом значении штрихкода
- Исправления в импорте Stocard

View File

@@ -0,0 +1 @@
- Исправлены некоторые последовательности символов, отображаемые как один символ

View File

@@ -0,0 +1 @@
- Исправлен импорт Stocard

View File

@@ -0,0 +1 @@
- Исправлен неправильный цвет текста на кнопке «Нет штрих-кода».

View File

@@ -0,0 +1 @@
- Обновлены и добавлены переводы

View File

@@ -0,0 +1 @@
- Обновлён русский перевод

View File

@@ -0,0 +1,2 @@
- Включено резервное копирование приложений
- Обновление французского и словенского переводов

View File

@@ -0,0 +1 @@
- Исправление сбоя в поиске при отсутствии групп

View File

@@ -0,0 +1 @@
- Исправление срабатывания пролистывания домашнего экрана при вертикальном пролистывании

View File

@@ -0,0 +1 @@
- Запоминание вкладки активной группы между экранами и сеансами

View File

@@ -0,0 +1,2 @@
- Улучшены переводы
- Небольшие исправления пользовательского интерфейса

View File

@@ -0,0 +1 @@
- Исправлен прозрачный фон нижнего листа

View File

@@ -0,0 +1 @@
- Исправлен сбой на версиях до Android 7

View File

@@ -0,0 +1 @@
- Исправление баланса парсинга для стран, использующих пробел в качестве разделителя

View File

@@ -0,0 +1 @@
- Исправление невозможности настройки фотографий в новой карте постоянного клиента

View File

@@ -0,0 +1 @@
- Исправлена загрузка фотографий при редактировании существующей карты

View File

@@ -0,0 +1 @@
- Минорные багфиксы и улучшения

View File

@@ -0,0 +1 @@
- Улучшен поиск с пробелами

View File

@@ -0,0 +1 @@
- Исправление регрессии, нарушающей импорт/экспорт

View File

@@ -0,0 +1 @@
- Исправление некорректного перехода, в результате которого первая карта становилась невидимой

View File

@@ -0,0 +1 @@
- Исправление сбоя при совместном использовании карты

View File

@@ -0,0 +1 @@
- Исправление различных ошибок, связанных с TalkBack

View File

@@ -0,0 +1 @@
- редизайн под Material You